我正在尝试让多音频 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/