Chrome Android未在SDP中使用所有编解码器选项
当我运行Chrome Android未在SDP中使用所有编解码器选项,android,google-chrome,webrtc,h.264,sdp,Android,Google Chrome,Webrtc,H.264,Sdp,当我运行RTCRtpSender.getCapabilities(“视频”).codec时在Chrome Android上,它包括H264。但是,我运行var offer=rtpeerconnection.createOffer()并查看offer.sdp它有时只会在报价中包含H264。这给我带来了一个需要H264的应用程序的问题——由于拒绝了那些不包含H264的报价,它的工作方式不一致,我不知道如何强制SDP报价包含H264。如何确保createOffer包含所有可用的编解码器?我宁愿不必对S
RTCRtpSender.getCapabilities(“视频”).codec时代码>在Chrome Android上,它包括H264。但是,我运行var offer=rtpeerconnection.createOffer()
并查看offer.sdp
它有时只会在报价中包含H264。这给我带来了一个需要H264的应用程序的问题——由于拒绝了那些不包含H264的报价,它的工作方式不一致,我不知道如何强制SDP报价包含H264。如何确保createOffer
包含所有可用的编解码器?我宁愿不必对SDP进行任何手动编辑。我一直面临着同样的问题。正如Pedro Vergara评论的那样,它看起来像是Chrome Android最新版本中引入的一个bug。现在,我做了一个简单的解决方法,在尝试创建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')
两次或更多次而不真正等待可能不起作用。这也发生在我们身上,但是我们发现,H.264只是在您杀死安卓Chrome并要求提供可用的编解码器后第一次加载网站时丢失,即使是在RTCRtpSender.getCapabilities('video').编解码器代码>。在来回导航或F5'ing时,H.264始终显示。我们向Chromium团队报告了该漏洞,并正在等待响应。为什么不从另一个角度来解决这个问题呢?如果您仍然要处理流媒体,请生成一个远程服务,声明它是仅接收且仅支持h.264,然后在本地为该远程服务创建一个答案。在这种情况下,答案是强制包含h.264,如果它在平台上可用的话。如果可以的话,我会给你买一杯啤酒。几个小时以来,我一直在琢磨为什么h264的演员阵容不能与运行android 10的谷歌电视的Chromecast相媲美。