0

我们创建了一个自定义 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

非常感谢。

4

0 回答 0