具有独立音轨的 HLS 解决方案
根据最新日志中的信息,所选段格式与流中使用的实际格式不匹配。流使用AAC
in MPEG-TS
而 Cast SDK 尝试将其解析为打包音频。
A reply https://issuetracker.google.com/issues/70031250#comment17Cast 问题跟踪器上显示HlsSegmentFormat
默认为MPEG2_TS
如果流是多路复用的并且MPEG_AUDIO_ES
否则。
针对 CAF 接收器的建议解决方案是拦截加载请求并使用以下命令覆盖段格式loadRequestData.media.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.TS
。稍微修改一下的例子:
<html>
<head>
</head>
<body>
<cast-media-player id="player"></cast-media-player>
<script type="text/javascript" src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
</script>
<script>
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();
</script>
</body>
</html>
原始来源 https://issuetracker.google.com/issues/70031250#comment21
另一个例子 https://stackoverflow.com/questions/54534043/does-v3-google-cast-receiver-parse-alternative-audio-tracks-from-an-hls-master-p/54536239
CORS解决方案
The Google Cast 参考 https://developers.google.com/cast/docs/media为您提供解决方案:
如果您在 Cast 设备上播放流时遇到问题,则可能是 CORS 的问题。使用公开可用的CORS代理服务器测试您的流
公开可用的代理的问题在于,由于带宽问题,它们强制执行大小限制,因此您可以自己制作或使用开源代理。如果应用程序在移动设备上运行,您也可以将其设为本地服务器。
当前的流不受 DRM 保护。如果他们添加 CDN 身份验证或使用 DRM 保护流,这将变得更加复杂或完全不可能。
关于 CORS 标头,您必须确保支持预检请求:客户端可能会发送一个OPTIONS
首先检查 CORS 支持(包括允许的方法和标头)。
您的流还必须支持 HTTP 范围请求,这意味着必须授权和公开适当的标头。
预检请求配置示例https://enable-cors.org https://enable-cors.org:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST,OPTIONS
Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range
Access-Control-Expose-Headers: Content-Length,Content-Range
您至少需要允许:GET
, OPTIONS
, the Content-Type
and Range
标头,并公开Content-Length
,Content-Range
。删除重复的标头(如果由远程服务器提供)。