我们创建了一个自定义 CAF 接收器。当我们尝试切换音轨时,接收播放器仅在第一个请求时正常工作。如果我们尝试发出其他请求,我们能够在接收方看到正确的 EDIT_TRACK_INFO_REQUEST(带有正确的音频 TrackId),但音频不会改变。
我们在具有不同资产的 web/IOS/ANDROID 发件人上复制相同的行为。
有人有什么建议吗?提前致谢。
- -额外细节:
平滑流式处理清单音轨片段,请注意语言不遵循 RFC 规范
<StreamIndex Name="audio101_spa" Language="spa" Type="audio" Subtype="AACL" QualityLevels="1" Chunks="0" Url=".../QualityLevels({bitrate})/Fragments(audio101_spa={start time})">
<QualityLevel Bitrate="96000" Index="0" FourCC="AACL" SamplingRate="22050" Channels="2" BitsPerSample="16" PacketSize="4" AudioTag="255" CodecPrivateData="1390"/>
<StreamIndex Name="audio102_eng" Language="eng" Type="audio" Subtype="AACL" QualityLevels="1" Chunks="0" Url=".../QualityLevels({bitrate})/Fragments(audio102_eng={start time})">
<QualityLevel Bitrate="96000" Index="0" FourCC="AACL" SamplingRate="22050" Channels="2" BitsPerSample="16" PacketSize="4" AudioTag="255" CodecPrivateData="1390"/>
在接收端,实际上是在 PLAYER_LOAD_COMPLETE 上,我们对轨道进行自定义处理:
//custom RFC mapping from values that comes from
const tracksLabelsObj = {
"spa": { name: "Español", lang: "es" },
"eng": { name: "Inglés", lang: "en" },
"ita": { name: "Italiano", lang: "it" }
...}
我们执行音轨的映射和处理
for (i = 0; i < request.media.tracks.length; i++) {
trackLanguage = tracksLabelsObj[request.media.tracks[i].language];
if (((request.media.tracks[i].type == 'AUDIO') || (request.media.tracks[i].type == 'TEXT')) && (trackLanguage != undefined)) {
//change labels and code
request.media.tracks[i].name = trackLanguage.name;
request.media.tracks[i].language = trackLanguage.lang;
}
}
我们还基于文档建立了另一种处理此问题的方法,使用:
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.EDIT_AUDIO_TRACKS, request => {...
if (request.media != null) {
console.log("CHROMECAST: EDIT AUDIO TRACKS - Changing media tracks");
for (i = 0; i < request.media.tracks.length; i++) {
trackLanguage = tracksLabelsObj[request.media.tracks[i].language];
if (((request.media.tracks[i].type == 'AUDIO') || (request.media.tracks[i].type == 'TEXT')) && (trackLanguage != undefined)) {
//Cambio labels lingua
request.media.tracks[i].name = trackLanguage.name;
request.media.tracks[i].language = trackLanguage.lang;
}
}
}
...}
但是我们无法正确处理它,对此还有什么建议吗?
对于内部测试,我们还使用了这种具有相同行为的清晰流 - http://harmonic.e2e.purpledrm.com.edgesuite.net/Content/SS/VOD/yjO9VXw7-ElephantsDreamH264720p/ElephantsDream.ism/Manifest
非常感谢。