カスタム 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;
}
}
}
...}
しかし、それを正しく処理することはできません。これについて何か提案はありますか?
内部テストでは、同じ動作をするこのクリアストリーミングも使用しました。
どうもありがとう。