ios - 无法使用 WebRTC 渲染远程视频
问题描述
我使用 WebRTC 渲染远程视频失败。对于上下文,我使用的是 Janus 的流插件。
我正在关注到目前为止我一直在阅读的内容。每当peerConnection(_ peerConnection:, didAdd stream:)
被调用时RTCPeerConnectionDelegate
,我都会创建一个远程渲染器并将其添加到委托提供给我的流的第一个 videoTrack 中,如下所示:
#if arch(arm64)
let remoteRenderer = RTCMTLVideoView(frame: self.view.frame)
remoteRenderer.videoContentMode = .scaleAspectFill
#else
let remoteRenderer = RTCEAGLVideoView(frame: self.view.frame)
#endif
stream.videoTracks.first?.add(remoteRenderer)
self.view.addSubview(remoteRenderer)
但是视频不会显示,只有黑屏。
我的代表还打电话peerConnection(_ peerConnection:, didChange newState:)
给 newState ,RTCIceConnectionState.connected
这让我认为连接很好。
解决方案
当您收到事件“didStartReceivingOnTransceiver”时尝试附加渲染器:
func peerConnection(_ peerConnection: RTCPeerConnection, didStartReceivingOn transceiver: RTCRtpTransceiver) {
switch transceiver.mediaType {
case .video:
DispatchQueue.main.async {[weak self] in
self?.remoteVideoTrack = transceiver.receiver.track as? RTCVideoTrack
if let renderer = self?.delegate?.viewForRemoteVideoTrack(){
self?.remoteVideoTrack?.add(renderer)
}
}
default:
break
}
}
推荐阅读
- python - 在 Cython 中使用字符串的 pandas DataFrames(Numpy 数组)
- postgresql - Postgres 删除重复项(多列)以添加唯一约束
- python - Python中的从宽到长
- r - 将逗号分隔类别的列拆分为二进制矩阵
- javascript - 如何使用“overwritePermissions”功能打开某个频道的权限?
- android - 我怎样才能懒惰地依赖由任务创建的 AAR?
- windows - 我是在命令行上运行更复杂命令的新手,需要帮助找出这里出了什么问题
- ruby - 如何验证ruby cucumber中抛出的异常
- mysql - MYSQL Group By DateTime Range 在特定时间
- python - 连接稀疏矩阵 - ValueError:无法连接零维数组