为什么Chome在webrtc连接中选择了错误的视频编解码器?

为什么Chome在webrtc连接中选择了错误的视频编解码器?,webrtc,Webrtc,我有两个同龄人,爱丽丝和鲍勃。Alice想接收Bob的视频,但不想发送自己的视频。Bob不支持VP8/9,仅支持h.264。目前,webrtc连接已建立,没有错误,但Alice看到了紫色的视频混乱。修改报价m行后,视频将正确显示 更详细地说。。Alice使用下面的m行创建一个报价,并发送给Bob。流ID96-101使用vp8或vp9编解码器。ids>101使用h.264 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121

我有两个同龄人,爱丽丝和鲍勃。Alice想接收Bob的视频,但不想发送自己的视频。Bob不支持VP8/9,仅支持h.264。目前,webrtc连接已建立,没有错误,但Alice看到了紫色的视频混乱。修改报价m行后,视频将正确显示

更详细地说。。Alice使用下面的m行创建一个报价,并发送给Bob。流ID96-101使用vp8或vp9编解码器。ids>101使用h.264

m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
由于Bob不支持vp8或vp9,因此他的答案包含以下m行:

m=video 9 UDP/TLS/RTP/SAVPF 102 122 127 121 125 107 108 109 114 115 116
Alice从Bob接收答案,调用setRemoteDescription,然后获取ontrack回调,然后获取setRemoteDescriptionFinished回调

我希望Alice的浏览器(Chrome79.0.3945.130,Mac)选择102并使用h.264解码器。紫色、乱码的视频看起来可疑地像是被错误的解码器解码的视频数据

因此,作为一个实验,我在setLocalDescription之前和发送给Bob之前,从Alice的报价中删除了96-101范围内的条目。通过此更改,视频将正确显示

了解webrtc的人是否知道是什么原因导致Chrome选择了对等答案中不存在的流

我正在其他浏览器上进行测试,并简化代码以进行更多测试

另外值得注意的是,只需要修改传递给setLocalDescription的提供。如果随后将未修改的报价发送给Bob,则视频仍能正确显示


根据webrtc内部消息,Alice的Chrome确实选择96(VP8)作为入站rtp流的格式,即使它是H264。

fmtp行中的配置文件级别id和打包模式是什么?紫色和乱码听起来像是有什么东西被解码了,但不正确。在里面chrome://webrtc-internals 关于入站rtp流,什么是decoderImplementation?非常感谢您指出入站rtp!我不知道我怎么会错过它。没有SDP修改,Alice(Chrome)显示decoderImplementation是libvpx。另外,从codecId和[codec]条目中,我看到它确实选择了96(VP8)。在setLocalDescription之前修改m行会导致102/H264和decoderImplementation=ExternalDecoder。这听起来像是你在用一种有趣的错误方式进行咀嚼。你有没有chrome://webrtc-internals 倾倒此外,我没有大口大口大口大口大口地咀嚼,而是心烦意乱。SetCodePreferences听起来是个很好的建议。我会调查一下,然后再报告。我不知道“咀嚼”是不被鼓励的。我经常看到它被推荐。有人知道你是否也可以用一个编解码器来做这件事吗?它没有包含在最初的SDP中,但你知道它是受支持的?