【问题标题】:Live Audio HLS stream fails to play直播音频 HLS 流无法播放
【发布时间】:2020-05-15 09:11:54
【问题描述】:

我们正在尝试播放纯音频的 HLS 直播。 它看起来还不错,我们可以在我们拥有的所有浏览器和本机播放器上播放它,但它无法在 Chromecast 上播放。

网址:http://rcavliveaudio.akamaized.net/hls/live/2006635/P-2QMTL0_MTL/playlist.m3u8

内容类型:vnd.apple.mpegURL

复制步骤 将此内容网址和内容类型强制输入 Chromecast 播放器。

预期 要像在我们尝试的任何其他播放器上一样听到音频播放。

实际结果 没有播放。获取主播放列表,获取块播放列表并获取第一个块,但没有播放。它在几块后停止。 播放器卡在“处理段”阶段,然后停止。

【问题讨论】:

标签: http-live-streaming google-cast receiver google-cast-sdk


【解决方案1】:

使用 Anjaneesh 的评论,我最终解决了这个问题。在接收者的 JavaScript 上:

  const instance = cast.framework.CastReceiverContext.getInstance();

  const options = new cast.framework.CastReceiverOptions();
  options.disableIdleTimeout = true;
  options.supportedCommands = cast.framework.messages.Command.ALL_BASIC_MEDIA;

  instance.start(options);

  const playerManager = instance.getPlayerManager();
  playerManager.setMessageInterceptor(cast.framework.messages.MessageType.LOAD, (req) => {
    req.media.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.TS_AAC;
    req.media.streamType = cast.framework.messages.StreamType.LIVE;
    return req;
  });

关键是为LOAD事件/消息设置消息拦截回调。在那里,您可以从客户端覆盖 hlsSegmentFormat。就我而言,我需要指出我的片段是 TS 格式。

我不完全确定为什么这是必要的。有视频轨道时不需要……只有在缺少视频时才需要。

【讨论】:

    【解决方案2】:

    请将内容类型更改为音频/mp4,并将 AAC 设置为分段格式 mediaInfo.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.AAC;

    【讨论】:

    • @MarcDesharnais 你能告诉我把这个放在哪里或者有一个例子吗?我刚开始使用自定义接收器,不知道该放在哪里。
    • @AnjaneeshRayapati 你能详细说明这个答案吗?你从哪里得到mediaInfo?使用参考代码,发送方只有mediaInfo,而接收方只定义了cast.framework.messages.HlsSegmentFormat.AAC。就我而言,我在我的 sender 上设置了mediaInfo.hlsSegmentFormat = 'ts_aac'(使用字符串值,而不是定义的常量),并且我能够让我的流工作。但是,这似乎很不稳定,并且与您在此处的建议不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多