CAF: изменение звуковых дорожек
Мы создали собственный приемник 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;
}
}
}
...}
Но мы не можем справиться с этим правильно, есть ли предложения по этому поводу?
Для внутреннего тестирования мы также использовали эту чистую потоковую передачу с таким же поведением - http://harmonic.e2e.purpledrm.com.edgesuite.net/Content/SS/VOD/yjO9VXw7-ElephantsDreamH264720p/ElephantsDream.ism/Manifest
Большое спасибо.