google-cast - v3 Google Cast 接收器是否会自动解析来自 hls 主播放列表的替代音轨,还是我必须在发送器中定义它们?
问题描述
我正在尝试让多音频 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;
});
我收到一条错误消息:
未捕获的错误:曲目信息不可用。
也许不相关,但超级奇怪:我可以 console.log 请求的媒体道具并查看它的轨道道具(一个具有预期 1 个视频和 2 个音频轨道的数组),但是,如果我尝试访问 LOAD 消息拦截器中的轨道属性我不确定。
我目前还无法查看 iOS 发送方代码,因此我尝试消除接收方端的错误源。事情是:
我一直假设接收器在加载 HLS 播放列表时会自行识别替代音轨。这个假设是否正确,或者 AudioTracksManager 是否只能访问先前在发送者应用程序中定义的轨道?
我在 Google Cast 参考中找不到明确的声明...
解决方案
好的,我花在这上面的时间感觉很愚蠢,但我终于能够回答我自己的问题了。我没有意识到我在错误的位置访问 AudioTracksManager - 即在 LOAD 消息拦截器中而不是在 PLAYER_LOAD_COMPLETE 事件侦听器中(因为它在此处正确记录)
将我的逻辑放入此事件侦听器后,我能够访问并以编程方式设置我的音轨。
所以回答我最初的问题:是的,接收器应用程序会自动从 HLS 播放列表中识别替代音轨。
推荐阅读
- mysql - 如何从 mysql(Xampp) 上的不同表中搜索数据。我正在使用 vb.net
- angular - 如何使用 Angular JS 生成访问令牌以访问合作伙伴中心 API?
- javascript - 刷新 vue 应用程序在开发和生产中出现“Cannot GET /route”错误,尽管设置
- java - 如何在 Selenium 中将文本转换为语音?
- laravel - 将值放入对象中并获得旧值的最佳方式
- python - 如何在 Yolo v3 中获取视频文件长度
- c++ - 比较 C++ 中的双精度,同行评审
- php - 未捕获的错误:在使用 __callStatic 时不在对象上下文中使用 $this
- java - Java 升级 8 到 11 导致 LDAPS 连接出现问题(连接或出站已关闭)
- spring-boot - Spring Boot 2.1.1 中缺少 AspectJ 依赖项