0

カスタム CAF レシーバーを作成しました。オーディオ トラックを切り替えようとすると、レシーバー プレーヤーは最初の要求に対してのみ適切に動作します。他のリクエストを作成しようとすると、レシーバー側で正しい EDIT_TRACK_INFO_REQUEST (正しいオーディオ TrackId を持つ) を確認できますが、オーディオは変更されません。

異なるアセットを使用して、Web/IOS/ANDROID 送信者で同じ動作を複製します。

誰か提案はありますか?前もって感謝します。

- -追加の詳細:

Smooth Streaming マニフェスト オーディオ トラック スニペット、言語が 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;
          }
        }
    }
...}

しかし、それを正しく処理することはできません。これについて何か提案はありますか?

内部テストでは、同じ動作をするこのクリアストリーミングも使用しました。

どうもありがとう。

4

0 に答える 0