Scenario: sto creando una vista WebRTC all'interno di un'app Il contenitore per i video avrà sempre un'altezza di 160.
Al centro del contenitore dovrebbe essere visualizzato il video remoto con un'altezza massima di 160, la larghezza deve essere ridimensionata per rispettare le proporzioni del video. Inoltre, la larghezza non può essere maggiore della larghezza della vista, in tal caso la larghezza sarà uguale alla larghezza della vista e l'altezza dovrebbe essere adattata alle proporzioni.
Nell'angolo in alto a destra dovrebbe essere visualizzato il video locale dalla fotocamera anteriore con una larghezza massima di 100 e l'altezza deve essere adattata per rispettare le proporzioni del video locale
il mio codice finora:
func createPeerConnection () {
// some other code
self.localStream = self.factory.mediaStream(withStreamId: "stream")
let videoSource = self.factory.videoSource()
let devices = RTCCameraVideoCapturer.captureDevices()
if let camera = devices.last,
let format = RTCCameraVideoCapturer.supportedFormats(for: camera).last,
let fps = format.videoSupportedFrameRateRanges.first?.maxFrameRate {
let intFps = Int(fps)
self.capturer = RTCCameraVideoCapturer(delegate: videoSource)
self.capturer?.startCapture(with: camera, format: format, fps: intFps)
videoSource.adaptOutputFormat(toWidth: 100, height: 160, fps: Int32(fps))
}
let videoTrack = self.factory.videoTrack(with: videoSource, trackId: "video")
self.localStream.addVideoTrack(videoTrack)
DispatchQueue.main.async {
if self.localView == nil {
let videoView = RTCEAGLVideoView(frame: CGRect(x: self.view.frame.size.width - 105, y: 5, width: 100, height: 160))
videoView.backgroundColor = UIColor.red
self.view.addSubview(videoView)
self.localView = videoView
}
videoTrack.add(self.localView!)
}
}
func peerConnection(_ peerConnection: RTCPeerConnection, didAdd stream: RTCMediaStream) {
self.remoteStream = stream
if let videoTrack = stream.videoTracks.first {
DispatchQueue.main.async {
if self.remoteView == nil {
let videoView = RTCEAGLVideoView(frame: CGRect(x: self.view.frame.size.width - 50, y: 0, width: 100, height: 160))
videoView.backgroundColor = UIColor.green
if let local = self.localView {
self.view.insertSubview(videoView, belowSubview: local)
} else {
self.view.addSubview(videoView)
}
self.remoteView = videoView
}
videoTrack.add(self.remoteView!)
}
}
}
Non so come ottenere le proporzioni di nessuno dei video, locale o remoto. Se lo avessi, avrei potuto calcolare la larghezza e le altezze appropriate per ciascuno di essi