无法使用 WebRTC 呈现远程视频
Unable to render remote video with WebRTC
我无法使用 WebRTC 渲染远程视频。对于上下文,我使用的是 Janus 的流媒体插件。
我正在关注我目前阅读的内容。每当在 RTCPeerConnectionDelegate
上调用 peerConnection(_ peerConnection:, didAdd stream:)
时,我都会创建一个远程渲染器并将其添加到代理提供给我的流的第一个 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
}
}
我无法使用 WebRTC 渲染远程视频。对于上下文,我使用的是 Janus 的流媒体插件。
我正在关注我目前阅读的内容。每当在 RTCPeerConnectionDelegate
上调用 peerConnection(_ peerConnection:, didAdd stream:)
时,我都会创建一个远程渲染器并将其添加到代理提供给我的流的第一个 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
}
}