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)

WebRTC:将视频添加到 SDP 中没有 BUNDLE 行的音频呼叫

SDP协议基本分析(RTSPWebRTC使用)

SDP协议基本分析(RTSPWebRTC使用)

SDP协议基本分析(RTSPWebRTC使用)