Kịch bản: Tôi đang xây dựng chế độ xem WebRTC bên trong ứng dụng Hộp chứa video sẽ luôn có chiều cao 160.
Ở trung tâm của container nên được hiển thị video từ xa với chiều cao tối đa 160, chiều rộng phải được thu nhỏ để tôn trọng tỷ lệ khung hình của video. Chiều rộng cũng không thể lớn hơn chiều rộng của chế độ xem, trong trường hợp đó, chiều rộng sẽ bằng với chiều rộng của chế độ xem và chiều cao phải được điều chỉnh theo tỷ lệ khung hình.
Ở góc trên bên phải, sẽ được hiển thị video cục bộ từ camera trước với chiều rộng tối đa 100 và chiều cao phải được điều chỉnh để tôn trọng tỷ lệ khung hình của video cục bộ
mã của tôi cho đến nay:
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!)
}
}
}
Tôi không biết cách lấy tỷ lệ khung hình của một trong hai video, cục bộ hoặc từ xa. Nếu tôi có điều đó, tôi có thể tính chiều rộng và chiều cao phù hợp cho từng người trong số họ