Live Audio HLS 流播放失败
Live Audio HLS stream fails to play
我们正在尝试播放纯音频的 HLS 直播流。
它在规格方面看起来不错,我们可以在所有浏览器和我们拥有的本机播放器上播放它,但它无法在 Chromecast 上播放。
Url: http://rcavliveaudio.akamaized.net/hls/live/2006635/P-2QMTL0_MTL/playlist.m3u8
内容类型:vnd.apple.mpegURL
重现步骤
强制此内容 url 和内容类型进入 Chromecast 播放器。
预计
要像在我们尝试的任何其他播放器上一样听到音频播放。
实际结果
没有回放。主播放列表已获取,块播放列表已获取,第一个块已获取,但没有播放。它在几块后停止。
播放器卡在 "processing segment" 阶段,然后停止。
请将内容类型更改为 audio/mp4 并将 AAC 设置为分段格式 mediaInfo.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.AAC;
根据 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
event/message 设置消息拦截器回调。在那里,您可以从客户端覆盖 hlsSegmentFormat
。在我的例子中,我需要指出我的片段是 TS 格式。
我不完全确定为什么这是必要的。当有视频轨道时不需要...只有当视频丢失时才需要。
我们正在尝试播放纯音频的 HLS 直播流。 它在规格方面看起来不错,我们可以在所有浏览器和我们拥有的本机播放器上播放它,但它无法在 Chromecast 上播放。
Url: http://rcavliveaudio.akamaized.net/hls/live/2006635/P-2QMTL0_MTL/playlist.m3u8
内容类型:vnd.apple.mpegURL
重现步骤 强制此内容 url 和内容类型进入 Chromecast 播放器。
预计 要像在我们尝试的任何其他播放器上一样听到音频播放。
实际结果 没有回放。主播放列表已获取,块播放列表已获取,第一个块已获取,但没有播放。它在几块后停止。 播放器卡在 "processing segment" 阶段,然后停止。
请将内容类型更改为 audio/mp4 并将 AAC 设置为分段格式 mediaInfo.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.AAC;
根据 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
event/message 设置消息拦截器回调。在那里,您可以从客户端覆盖 hlsSegmentFormat
。在我的例子中,我需要指出我的片段是 TS 格式。
我不完全确定为什么这是必要的。当有视频轨道时不需要...只有当视频丢失时才需要。