Chrome Android 未使用 SDP 提供的所有编解码器选项
Posted
技术标签:
【中文标题】Chrome Android 未使用 SDP 提供的所有编解码器选项【英文标题】:Chrome Android not using all codec options in SDP offer 【发布时间】:2020-09-10 00:41:35 【问题描述】:当我在 Chrome android 上运行 RTCRtpSender.getCapabilities("video").codecs;
时,它包含 H264。但是,我运行var offer = RTCPeerConnection.createOffer()
并查看offer.sdp
,它有时只会在报价中包含H264。这导致我使用需要 H264 的应用程序出现问题 - 由于拒绝那些不包含 H264 的报价,它的工作方式不一致,而且我不知道如何强制 SDP 报价包含它。如何确保createOffer
包含所有可用的编解码器?我宁愿不必对 SDP 进行任何手动编辑。
【问题讨论】:
这也发生在我们身上,但是我们检测到 H.264 仅在您在杀死 Android Chrome 之后第一次加载网站然后询问可用编解码器时丢失,即使在RTCRtpSender.getCapabilities("video").codecs;
中也是如此。在来回导航或 F5'ing 时,H.264 始终显示。我们向 Chromium 团队报告了这个错误,正在等待回复。 bugs.chromium.org/p/webrtc/issues/detail?id=11620
你为什么不从另一个角度解决这个问题 - 如果你仍然要处理流媒体,生成一个远程报价,声明它只接收并且只支持 h.264 和然后在本地为该远程报价创建一个答案。在这种情况下,如果平台上完全可用,答案是强制包含 h.264。
【参考方案1】:
我也遇到了同样的问题。正如 Pedro Vergara 评论的那样,它看起来像是最近版本的 Chrome Android 中引入的一个错误。目前,在尝试创建 SDP 报价之前,我一直调用RTCRtpSender.getCapabilities('video')
,直到它列出预期的 H.264 编解码器支持,我做了一个简单的解决方法。像这样的:
console.log('Waiting for H.264 codec support');
checkH264(20);
function checkH264(count)
if (count > 0)
console.log('Getting video codec capabilities');
let capabilities = JSON.stringify(RTCRtpSender.getCapabilities('video').codecs);
console.log(capabilities);
if (capabilities.toLowerCase().includes('video/h264'))
console.log('H.264 support found. Ready to proceed now! =)');
// Proceed to SDP offer creation...
else
setTimeout(checkH264, 1000, count - 1);
else
console.warn('H.264 support not found');
// Proceed with caution. SDP offer may not contain H.264...
请注意,上面的代码通过使用 setTimeout()
为 Chrome 提供了一些时间来使 H.264 可用。在没有真正等待的情况下直接调用RTCRtpSender.getCapabilities('video')
两次或更多次可能行不通。
【讨论】:
如果可以的话,我会请你喝啤酒。几个小时以来,我一直在努力弄清楚为什么使用 h264 进行投射对运行 Android 10 的 Google TV 的 Chromecast 不起作用。以上是关于Chrome Android 未使用 SDP 提供的所有编解码器选项的主要内容,如果未能解决你的问题,请参考以下文章
Threejs - 导入 collada 模型在 Chrome Android 上看起来很有趣,纹理未正确加载
Chrome 自定义选项卡 - 未触发意图 (Android)