为什么Chromecast无法播放此HLS视频? “找不到ID3和ADTS标题”/错误网络/ 315

问题描述 投票:3回答:1

我正在尝试通过发件人应用将一些网址流式传输到我的Chromecast。它们是HLS / m3u8网址。

这是一个这样的示例URL:https://qa-apache-php7.dev.kaltura.com/p/1091/sp/109100/playManifest/entryId/0_wifqaipd/protocol/https/format/applehttp/flavorIds/0_h65mfj7f,0_3flmvnwc,0_m131krws,0_5407xm9j/a.m3u8

然而,尽管其他HLS / m3u8网址正常工作(example of an HLS stream that does work),它们似乎从未在Chromecast上加载。

它与CORS无关,因为它们确实具有适当的CORS头。

我注意到它们在根HLS清单文件中有单独的音频组。

当我将它连接到自定义接收器应用程序时,我得到以下日志:

enter image description here

相关位(我认为):在0和cast.player.api.ErrorCode.NETWORK/315(我认为是第一个结果)中找不到ID3和ADTS标头

这些是完全有效/有效的HLS URL。他们完美地在iOS和桌面上的Safari中播放,以及VLC。

有什么我需要做的事情(在我的发送者应用程序或我的接收器应用程序中),以启用像音轨这样的东西? The docs seem to indicate something about that

我也发现这个谷歌问题,一个人有类似的问题,但解决了它,我无法理解。 https://issuetracker.google.com/u/1/issues/112277373

如何在Chromecast上正确播放此网址?我要在代码中做些什么吗?

chromecast google-cast hls google-cast-sdk hls.js
1个回答
3
投票

这已经有一个解决方案here但我会添加这个答案,以防有人查找确切的错误消息/代码。

问题在于hlsSegmentFormat被初始化为TS用于多路复用段,但是当前默认为具有备用音轨的HLS的打包音频。

解决方案是拦截CAF LOAD请求并设置正确的段格式:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// intercept the LOAD request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.LOAD, loadRequestData => {
            loadRequestData.media.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.TS;
            return loadRequestData;
});
context.start();

资料来源:Google Cast issue tracker

© www.soinside.com 2019 - 2024. All rights reserved.