google-cast - v3 Google Cast 接收器是否会自动解析 hls 主播放列表中的替代音轨,还是必须在发送器中定义它们?

标签 google-cast http-live-streaming

我正在尝试让多音频 HLS 流在 v3 Google Cast 自定义接收器应用上运行。流的主播放列表指的是多个不同分辨率的视频再现和两个替代音轨:

#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="de",NAME="TV Ton",DEFAULT=YES, AUTOSELECT=YES,URI="index_1_a.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="de",NAME="Audiodeskription",DEFAULT=NO, AUTOSELECT=NO,URI="index_2_a.m3u8"
#EXT-X-STREAM-INF:AUDIO="aac",BANDWIDTH=383000,RESOLUTION=320x176,CODECS="avc1.4d001f, mp4a.40.2",CLOSED-CAPTIONS=NONE
index_0_av.m3u8
...more renditions
#EXT-X-STREAM-INF:AUDIO="aac",BANDWIDTH=3697000,RESOLUTION=1280x720,CODECS="avc1.4d001f, mp4a.40.2",CLOSED-CAPTIONS=NONE
index_6_av.m3u8

视频在发送器和接收器应用程序中都能正常播放,我可以在发送器应用程序中看到两个音轨,但在转换到接收器时,没有用于更改音轨的控件。

当访问 AudioTracksManager 的 getTracks() 方法时,同时拦截 LOAD 消息,如下所示......

playerManager.setMessageInterceptor(
  cast.framework.messages.MessageType.LOAD, loadRequestData => {
    loadRequestData.media.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.TS
    const audioTracksManager = playerManager.getAudioTracksManager();
    console.log(audioTracksManager.getTracks())
    console.log('Load request: ', loadRequestData);
    return loadRequestData;
  });

我收到一条错误消息:

Uncaught Error: Tracks info is not available.

也许不相关,但 super 奇怪:我可以 console.log 请求的媒体属性并查看其轨道属性(具有预期的 1 个视频和 2 个音频轨道的数组),但是,如果我尝试访问LOAD 消息拦截器我未定义。

我目前还无法查看 iOS 发送器代码,因此我尝试消除接收器端的错误源。事情是这样的:

我始终假设接收器在加载 HLS 播放列表时会自行识别替代音轨。这个假设是否正确,或者 AudioTracksManager 只能访问先前在发送者应用程序中定义的轨道?

我在 Google Cast 引用资料中找不到对此的明确说明...

最佳答案

好吧,我觉得自己在这上面花的时间很愚蠢,但我终于能够回答我自己的问题了。我没有意识到我在错误的位置访问了 AudioTracksManager - 即在 LOAD 消息拦截器中而不是在 PLAYER_LOAD_COMPLETE 事件监听器中(因为它已正确记录 here )

将我的逻辑放入此事件监听器后,我能够访问并以编程方式设置我的音轨。

所以回答我原来的问题:是的,接收器应用程序会自动识别 HLS 播放列表中的替代音轨。

关于google-cast - v3 Google Cast 接收器是否会自动解析 hls 主播放列表中的替代音轨,还是必须在发送器中定义它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54534043/

相关文章:

ios - ChromeCast后台视频播放支持iOS

audio - 如何将 AUDIO 组与 VIDEO 流结合并使用 ffmpeg 生成新的 .ts 文件?

ffmpeg - hls.js - 如何增加预加载的缓冲区大小

android - Android 上的 JWPlayer 6 多语言

powershell - FFMPEG HLS 多个音轨不同步

google-cast - Chromecast : How to clear receiver cache

android - 在 "Currently playing"转换屏幕中设置文本颜色样式

android - 如何通过转换控制接口(interface)捕获 UIMediaController 点击

javascript - 带有 m3u8 url 的 Chromecast SDK

ios - HLS 冗余流和不良网络导致 AVPlayer 行为奇怪