Chromecast 设备是否支持 avc1.66.31,mp4a.40.2?

Is avc1.66.31,mp4a.40.2 supported by the Chromecast device?

我有一个 m3u8 文件,如下所示:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=2048805,CODECS="avc1.66.31,mp4a.40.2",RESOLUTION=1280x720
chunklist_w517510829.m3u8

我在尝试播放时遇到以下错误:

Uncaught NotSupportedError: Failed to execute 'addSourceBuffer' on 'MediaSource': The type provided ('video/mp2t; codecs="avc1.66.31,mp4a.40.2"') is unsupported.
player.js:1682 Uncaught TypeError: undefined is not a function

奇怪的是,如果我删除 avc1.66.31,mp4a.40.2,它在 Chromecast 上播放效果很好。我将此示例用作播放器 https://github.com/googlecast/Cast-Player-Sample

谢谢。

某些 Chromecast 版本拒绝 "avc1.66.31",因此建议使用 "avc1.66.30",而不是通过更新播放列表或使用 host.processManifest 解决方法

host.processManifest = function(manifest) {
  return manifest.replace(/CODECS=\"avc1.66.([0-9]*)/g, 'CODECS=\"avc1.66.30');
};

在自定义接收器中。

在新版本的 Chromecast 中,我必须:

context.getPlayerManager().setMediaPlaybackInfoHandler((loadRequest, playbackConfig) => {

  if (loadRequest.media.customData &&
      loadRequest.media.customData.playbackConfig && 
      loadRequest.media.customData.playbackConfig.manifestHandler) {

     playbackConfig.manifestHandler = loadRequest.media.customData.playbackConfig.manifestHandler;
  }

  return playbackConfig;
});

然后我以这种方式加载媒体信息(从清单中删除 avc1.100 格式行):

const mediaInformation = new window.cast.framework.messages.MediaInformation();

...

mediaInformation.hlsSegmentFormat = window.cast.framework.messages.HlsSegmentFormat.TS;

mediaInformation.customData = {

  manifestHandler: manifest => {

      const lines = manifest.split(/\n/);
      const result = [];

      let i = 0;
      while(i < lines.length) {
      if (lines[i].match(/avc1\.100\./)) {
        i += 2;
      } else {
        result.push(lines[i]);
        i++;
      }
     }

     return result.join('\n');
  }
}