【问题标题】:Adaptive bitrate HLS not working with Google Cast SDK自适应比特率 HLS 不适用于 Google Cast SDK
【发布时间】:2014-03-02 07:34:44
【问题描述】:

我正在使用最新版本的 Chrome Sender(新公开版本的 v1),但在让 HLS 正常工作时遇到了问题。

我的 m3u8 清单是一个“主”播放列表,它指向其他六个不同分辨率和比特率的 m3u8 播放列表,以便根据规范提供自适应比特率流。

此播放列表在我的自定义 Roku 应用程序、我的 iOS 应用程序(也适用于 Apple TV)甚至通过 Flash (JWPlayer Pro) 的浏览器中的作品中都经过了很好的测试。它也可以直接在 iOS 上的 Safari 中运行。我的播放列表唯一有点不同的是它们包含查询字符串参数,这些参数会强制内容过期,但这在 HLS 规范中是允许的。例如:playlist.m3u8?expires=1391662909&signature=I3G8RKUkILOwxjZy8EyL5w%3D%3D%24q0WbXA2whSNFAj0Os3NIpfHkqMA%2BH2iqMMjm0xH2CYKNe3jh1jgl%2FUdS39ve%0AFnL%2F

这是我在 Chrome Sender 中设置播放列表 URL 的代码:

var mediaInfo = new chrome.cast.media.MediaInfo('http://master_playlist_url.m3u8');
mediaInfo.contentType = 'application/x-mpegURL';

var request = new chrome.cast.media.LoadRequest(mediaInfo);
request.autoplay = true;
request.currentTime = 0;

session.loadMedia(request, onMediaDiscovered.bind(this, 'loadMedia'), onMediaError);

媒体未加载,onMediaError 使用包含以下内容的错误对象调用:

code: "session_error"
description: "LOAD_FAILED"
details: null

我还尝试将streamType 设置为chrome.cast.media.StreamType.BUFFEREDchrome.cast.media.StreamType.LIVEchrome.cast.media.StreamType.OTHER,每个结果都相同。我也尝试过设置duration,但没有成功。我尝试在 LoadRequest 上删除 autoplaycurrentTime,但也没有运气。

我的接收器是一个基本的自定义接收器,如下所示:

<html>
<head>
  <title>Cast</title>
  <script src="//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js"></script>
</head>
<body>
  <video id='media' width="100%" height="auto" />
  <script>
    window.onload = function() {
      window.mediaElement = document.getElementById('media');
      window.mediaManager = new cast.receiver.MediaManager(window.mediaElement);
      window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance();
      window.castReceiverManager.start();
    }
  </script>
</body>
</html>

根据更新的文档,现在支持 HLS,但我似乎无法让它工作:https://developers.google.com/cast/docs/media

我还应该提到,当使用渐进式 MP4 并将内容类型更改为 video/mp4 时,此代码可以正常工作。

更新: 我决定尝试从混音中删除主播放列表(自适应比特率流),只使用包含一种质量 TS 片段的单个 m3u8 播放列表。它产生了同样的错误。因此,至少我们知道该问题与自适应比特率流无关,而是与 HLS 支持有关。

【问题讨论】:

    标签: http-live-streaming chromecast


    【解决方案1】:

    自适应比特率协议需要Media Player Library。查看Cast Media Player Library SampleCast Custom Receiver 示例。

    【讨论】:

    • 谢谢 Les,我没有注意到关于将媒体播放器库添加到我的接收器的部分。我已经这样做了,现在我不再收到错误消息,但是在会话上调用 loadMedia 后既没有调用 onMediaDiscovered 也没有调用 onMediaError。我在接收器上启用了调试。
    • 写一个新的Q,并发布你的日志和你的接收者,一定要遮盖任何PII。
    • 我最终在您的链接中使用了示例接收器,它在屏幕上显示所有调试信息,现在 onMediaError 被调用。以下是详细信息:代码:“session_error”,描述:“LOAD_FAILED”。在接收器调试输出中,它只显示了我在 MediaInfo 对象上传递的所有参数。有什么方法可以更详细地了解正在发生的错误?
    • 我在您发布您的几乎同时发布了我之前的评论,我将发布一个更详细的新问题。谢谢
    • 我已经发布了一个新问题here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多