Спустя столько времени решил вернуться в эту тему и поделиться своей новостью. Может, для многих это уже и не новость, но я только сегодня раскопал-таки, как заставить свой телик воспроизводить ВСЕ звуковые дорожки с возможностью их переключения пультом телевизора (для любого видеофайла!). Всё оказалось до банальности просто (почти

).

Сразу хочу предупредить, что версия HMS у меня 1.21.2 - я пробовал обновиться на последнюю, но там транскодер
hmsmpeg совсем по-другому работает со звуковыми дорожками, а именно - из-за обновления ключей командной строки нового
ffmpeg недоступен ключ
-newaudio, которым я добавлял все звуковые дорожки. Я пробовал разобраться с новыми ключами, но с наскока не получилось, потому я откатился на версию 1.21.2. В ней работает всё, что мне надо.
1. Я не тестировал на стандартных профилях транскодирования, потому что у меня давно используется для всего контента доработанный мною профиль, который я назвал "Фильмы (основной)+AUDIO". В нем была небезуспешно предпринята попытка добавлять в транскодированный файл все звуковые дорожки, вот только при стандартных для SONY W5500 настройках телик все-равно видел не все, а только две из дорожек. Код профиля ниже:
Code: Select all
var
iAudioStreamNo, i, nAudio, nPos: Integer;
sParams, sTransParamNew, sCurrAudio, sTransVideoParams: string;
begin
nAudio:=mpAudioStreams;
if mpInternetItem then
TranscodingParams := HmsTranscodingProfileParams('Интернет-телевидение')
else if mpSubItemsCount > 0 then
TranscodingParams := HmsTranscodingDvdParams
else begin
sTransVideoParams := HmsTranscodingVideoParams;
if nAudio > 1 then begin
nPos:= mpAudioStreamNo ;
sParams := HmsTranscodingInputParams + sTransVideoParams
+ HmsTranscodingMapParams(mpAudioStreamNo)
+ ' "<OUTPUT FILE>" ';
for i:=0 to nAudio-1 do begin
if i<>nPos then begin
sTransParamNew:=ReplaceStr(HmsTranscodingMapParams(i),'-map 0:0','');
sTransParamNew:=ReplaceStr(sTransParamNew,'-vstreamid 1','');
sParams := sParams + sTransParamNew
+ HmsTranscodingAudioCodecParams(cfgTranscodingAudioBitrate, false)
+ ' -newaudio';
end;
sParams:=ReplaceStr(sParams,'-vstreamid 1','-map 0:0');
end;
for i:=2 to 29 do begin
sParams := ReplaceStr(sParams, '-astreamid '+IntToStr(i), '-map 0:'+ IntToStr(i-1));
end
end
else begin
sParams := HmsTranscodingInputParams + sTransVideoParams
+ HmsTranscodingMapParams(mpAudioStreamNo);
end;
TranscodingParams := sParams;
end;
end.
Еще раз хочу напомнить, что с версией 1.22 и выше данный код НЕ работает - ключ -newaudio больше не воспринимается транскодером ffmpeg
Я нашел только возможность включить сразу все дорожки с перекодированием, но если в файле 6 дорог, и 5 из них уже в АС3, а одна в DTS, то я не вижу никакого смысла повторно перекодировать 5 из них. А вот наличие ключа -newaudio давало отличную возможность добавлять каждую дорожку с нужными параметрами: если это уже был АС3 или МП2-3, то он просто копировался в выходной файл, если же что-то из того, что телик напрямую не понимает (например, тот же DTS), то добавляются параметры транскодирования.
2. Конечно, все возможные комбинации форматов и расширений я раньше не проверял - на это надо уйму времени. Просто периодически, наскоками, пытался включить что-то новое и проверить, как будет идти воспроизведение. И вот сегодня произошло чудо: я в очередной раз сменил в настройках устройства в пункте "Транскодер" опцию "Формат файла (контейнер)" со стандартного MPEG (DVD) на MPEGTS, и начал менять расширение для транскодированного файла (пункт "Файлы, субтитры", опция "Расширение").
Только расширение надо не руками туда набирать, а жимнуть на кнопку с вопросительным знаком и выбрать нужный тип из раскрывшегося списка. В этом случае сразу меняется и опция "MIME-тип".
3. В общем, при выборе расширения
m2t произошло чудо - телик наконец-то нормально воспринял поток MPEGTS и, самое главное, стал переключать аудиодорожки!

Правда, почему-то по-умолчанию не всегда выбирается та, которая задана в файле, но для меня это уже мелочь, не стоящая внимания.

Звук переключается, перемотка работает - что еще надо?
Так что если у кого-то до сих пор присутствует проблема со звуковыми дорожками, то пробуйте воспользоваться моим набором: сдублируйте профиль траскодирования "Фильмы (основной)", переименуйте его, например, в "Фильмы (основной)+AUDIO", скопируйте туда мой код (выше) и сохраните профиль, сбросьте настройки ТВ в дефолтные (только же не настройки не самого телика, а в HMS настройки устройства!

), затем выберите новый профиль как профиль по-умолчанию, контейнер смените на MPEGTS, а расширение файла - на m2t (при этом MIME-тип должен стать video/vnd.dlna.mpeg-tts). Всё. По крайней мере, у меня так всё заработало
Если у кого будут вопросы - чем смогу, помогу.
HMS 1.21.2 + Sony KDL32W5500, Win7 x64 Ultimate, Core2Duo E8500 3.16GHz, 8GB RAM, ATI Radeon 4870HD 512MB + NVIDIA GeForce GT 440 1GB (hybrid PhysX)