Опыт настройки HMS и Sony W5500 + несколько вопросов

Post Reply
Alexander Great
Posts: 99
Joined: Wed Mar 10, 2010 9:24 am

Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by Alexander Great »

Здравствуйте, господа!
Хочу поделиться опытом 3-х недель колупания с медиа-сервером и телеком Sony. Возможно будет полезен владельцам и других телевизоров.
Итак. Дано:
1) Старый дохлый комп на котором хранится около терабайта фильмов, большинство из которых в MKV, и нужно все это проиграть. ;)
2) Более менее современный ноут на Core 2 Duo 8400, на который и установлен HMS.
3) Телек Сони W5500 на котором и хочется все это добро посмотреть, причем, что очень удивило: качество картинки, даже траснкодированной, через DLNA субъективно выше чем через HDMI кабель с компа. Из-за этого собственно и было принято решение начинать разбираться.
Затык первый: телевизор.
У Сони есть 3 ограничения на просмотр HD:
1) Контейнер должен быть m2ts
2) Видео поток должен быть закодирован в H264 с профилем 4.1
3) Самое досадное: разрешение картинки должно быть 1920х1080 или 1280х720
Как будем бороть?
Для MKV файлов с разрешением картинки 1920х1080 или 1280х720 используем профиль "Фильмы - TsMuxer", но с одной маааленькой доделкой.
Меняем строку профиля "Фильмы - TsMuxer" и профиля "Фильмы - DirectShow - TsMuxer"

Code: Select all

sVideoInfo := 'V_MPEG4/ISO/AVC, "%s", insertSEI, contSPS'
на

Code: Select all

sVideoInfo := 'V_MPEG4/ISO/AVC, "%s", level=4.1, insertSEI, contSPS'
Это помогает на 50-60% фильмов с профилем 5.1. На остальных картинка распадается и для них придется использовать транскодирующие профили.
Несмотря на то, что вышеуказанного процессора явно хватает для транскодирования в реальном времени фильмов в 720р, происходит следующее: кодирование начинается со скоростью 50-60 fps и плавно падает до менее 25 при загрузке процессора менее 30%. Не помогает даже повышение приоритета транскодера.
Как будем бороть?
Воспользовавшись советом на форуме, попробовал прикрутить профиль "Фильмы - CoreAVC". Это помогло, но держать в системе CoreAVC не имея видеокарты nVidia мне как-то недосуг. Я скопировал профиль "Фильмы - CoreAVC" и заменил в нем строку

Code: Select all

if not CheckResult(HmsDirectShowAddFilter('CoreAVC Video Decoder', 'Video Decoder')) then
на

Code: Select all

if not CheckResult(HmsDirectShowAddFilter('Microsoft DTV-DVD Video Decoder', 'Video Decoder')) then
с тем чтобы использовать встроенный в Windows 7 майкрософтовский декодер, который, кстати, великолепно работает на видеокарте ATI, поддерживая DXVA лучше Cyberlink-а и MPC. К сожалению, при использовании HMS, любой из вышеперечисленный декодеров работает в софт режиме, то есть на процессоре. Но это все равно существенно ускоряет траскодирование фильмов. Но есть одно но:
Затык третий: директ шоу.
Фильмы, имеющие ширину (именно ширину, высота кадра до лампочки) отличную от 1280 и 1920 не воспроизводятся при использовании директ шоу декодеров + ffmpeg. Никаких.
Как будем бороть?
Очевидно, что придется использовать для таких фильмов обычный транскодирующий профиль "Фильмы - (Основной)". На более низких, чем 720р, разрешениях он уже не тормозит.
Суммируя, получается, что приходится использовать 3 профиля по такому алгоритму:

Code: Select all

if res=1280x720 or res=1920x1080 then "Фильмы - TsMuxer - Level 4.1" elsif (width=1280 and height < 720) or (width=1920 and height < 1080) then "Фильмы - Microsoft DTV-DVD Video Decoder" else "Фильмы - (Основной)"
Вопрос первый: как этот делитантский алгоритм реализовать, чтобы профили выбирались автоматически?
Вопрос второй: почему при использовании транскодера hmsmpeg (он же ffmpeg, как я понял) скорость кодирования неприемлемо падает, хотя явно процессор не нагружен на все 100?
Вопрос третий (животрепещущий): может все же есть какая-то возможность надурить телевизор, чтобы смотреть HD с высотой кадра не 720 и не 1080 без перекодирования? Хотя ответ я на него и так знаю. ;)
Вопрос четвертый (feature request): Непонятно почему, если в настройках HMS я снимаю галку "Русские названия папок", все равное часть надписей остается по русски, например "интервал 10 мин", "первая звуковая дорожка" и тд. Ну просто я предпочитаю, чтобы все было на каком-то одном языке. ;) Лучше на англ.
И еще кусочек опыта: использовать битрейты траскодера выше 8 мегабит нету никакого смысла, в большинстве случаев получите buffer underflow, а если 8 мегабит все же маловато ffmpeg сам немного поднимет битрейт.
Отдельно, хотел бы выразить благодарность авторам программы: спасибо! Особенно нравится, как реализована поддержка ДВД.
miks69

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by miks69 »

Огромное спасибо, уважаемый Alexander Great!
Наконец-то все проблемы воспроизведения HD фильмов на Sony W5500 собраны в одном месте и даны реальные понятные советы как с ними бороться.
По первой проблеме все понятно и результат 100% для фильмов со стандартным разрешением.
Не могли бы вы подробнее пояснить по второй проблеме, т.е. по прикручиванию профиля "Фильмы - CoreAVC" для случаев, когда (width=1280 and height < 720) or (width=1920 and height < 1080)? Какой mime-type в этом профиле надо указывать? Можно ли указать использование этого профиля для конкретного фильма? Т.е. будет ли он перекрывать настройку профиля для типа файлов *.mkv? Или этот вопрос уже к авторам?
Если удастся настроить, то по моим оценкам эти две проблемы закрывают 90% случаев разных вариантов HD фильмов.
Alexander Great
Posts: 99
Joined: Wed Mar 10, 2010 9:24 am

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by Alexander Great »

Здравствуйте! Рад, что наконец получил фидбек!

2 miks69

Хитрость в том, что я не настраивал вызов отдельного профиля для mkv, а оставил все настройки выбора профиля и майм тайпов по умолчанию для "Телевизор Sony 1920x1080". Ведь получается, что выбор профиля, в нашем случае, зависит не от формата файла, а только от разрешения! Я просто отсортировал "Все фильмы" по колонке "Размер кадра" и назначил им вручную профили транскодирования, по алгоритму, который я описал в первом посте. Для автоматизации этого процесса, я попробую написать свой профиль, который в зависимости от размера кадра, будет вызывать другие, из трех мной описанных профилей, по той же схеме. Но для этого мне явно понадобится помощь разработчиков. Если удастся, его можно будет назначить по умолчанию для ВСЕХ файлов. Это перекроет 95% файлов, я думаю. Не перекроется только экзотика типа: MPEG 2 в MKV файле, или avi с xvid-ом в разрешении 1280х720. В моей обширной коллекции, таких фильма только 2, для них можно назначить профиль вручную. ;) Отдельная песня DVD, по они все идут спокойно вообще без транскодирования, поэтому пофиг какой профиль им назначен. Особенно радует что телек поддерживает LPCM.
Еще, все это можно значительно упростить, если ответить на следующие вопросы:

1) Почему, ну почему, фильмы в mkv с шириной кадра не 1280 и не 1920 сносят башню профилю "Фильмы - CoreAVC", или любому аналогу с декодером, основанном на директ шоу? Ведь они же прекрасно воспроизводятся любым плеером, использующим те же кодеки, в винде!
2) Почему падает скорость кодирования hmsmpeg при неполной загрузке процессора? Тогда можно было бы отказаться от профилей, использующих директ шоу.

И по ходу:
1) Было пару раз, что воспроизведение неожиданно прерывалось с сообщением "Playback not available" при использовании опции "Транскодирование без использования диска". Объем буфера 128мег, прерывалось при достижении воспроизведением как раз отметки в 128мег. Проявляется не систематически, не зависит от типа файла.
2) Объясните мне пожалуйста, кто такой "No monotone timestamps" при использовании опции "Оригинальная звуковая дорожка, если сжатие одно и то же"? Я хочу оригинальный звук! Тем более, что при перекодировании звука, в очень тихих моментах, звук вообще пропадает. Понимаю, что это особенность ffmpeg, но может можно как-то побороть?
3) Сюда же, было бы неплохо предусмотреть возможность вывода оригинального звука не только в случае AC3. Поясню: телевизор поддерживает mp3, ac3 и lpcm. То есть в этих трех случаях, хотелось бы, чтобы включалась "Оригинальная звуковая дорожка". Но это только в случае, если будет решен пункт 2. Сейчас, я для avi файлов вручную выбираю "Не транскодировать звук". Не критично, но и не особо хочется мучаться.
4) Зачем нужна опция "Создание ссылок продолжения просмотра в папке транскодирование"? Ну да... Ссылки создаются. Но не всегда. И создаются непонятно куда. Я смотрю фильм больше часа. Получаю ссылку на 1мин 45сек от начала. :shock: Очень неудобно. :roll:

Спасибо всем заранее, за ответы, или дельные мысли по теме! :D
Alexander Great
Posts: 99
Joined: Wed Mar 10, 2010 9:24 am

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by Alexander Great »

Вот че то такое набросал.

Code: Select all

begin
begin
if ((mpWidth = 1280) and (mpHeight = 720)) or ((mpWidth = 1920) and (mpHeight = 1080))then 
HmsTranscodingProfileExecute('Ôèëüìû - TsMuxer')
else if ((mpWidth = 1280) and (mpHeight < 720)) or ((mpWidth = 1920) and (mpHeight < 1080))then
HmsTranscodingProfileExecute('Microsoft DTV-DVD Video Decoder') 
else
HmsTranscodingProfileExecute('Ôèëüìû (îñíîâíîé)')
end.
Пока не тестировал вообще! Радость в том, что хоть выполнилось без ошибок. ;)
miks69

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by miks69 »

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

а пока продолжаю разбираться как мне настроить транскодинг для случая с нестандартной высотой кадра.
у меня такая история получается:
CoreAVC мне тоже использовать не резон, т.к. на железе, где крутится HMS, нет аппаратной поддержки NVIDIA, да и сам CoreAVC как выяснилось платный.
да и сам скрипт профиля у меня сначала выдавал ошибку при попытке подцепить CoreAVC, теперь я его перенастроил на использование Cyberlink:

Code: Select all

//  if not CheckResult(HmsDirectShowAddFilter('CoreAVC Video Decoder', 'Video Decoder')) then 
  if not CheckResult(HmsDirectShowAddFilter('CyberLink Video/SP Decoder (PDVD8)', 'Video Decoder')) then
    Exit;
Он его цепляет, потом все равно отваливается по ошибке на вот этой строке:

Code: Select all

  if not CheckResult(HmsDirectShowConnectPin('Source', 'Video Decoder', sVideoPinName, '')) then 
    Exit;
говорит:
Ошибка выполнения: Ioeaea (eia: 80040216) - An object or name was not found.
пока не пойму в чем дело.

насчет идеи использовать 'Microsoft DTV-DVD Video Decoder':
у меня на этой машинке сейчас стоит Win Server 2003, т.к. там еще сайты разные крутяться, включая субд, пхп, и проч.
на семерку переводить эту машинку я пока не хочу.
также стоит там Win Media Player 10.
вопрос: если поставить WMP 12, я смогу использовать 'Microsoft DTV-DVD Video Decoder'?
и еще просьба: может выложишь работающий у тебя вариант скрипта для профиля "Фильмы - CoreAVC"?
Alexander Great
Posts: 99
Joined: Wed Mar 10, 2010 9:24 am

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by Alexander Great »

miks69 wrote: говорит:
Ошибка выполнения: Ioeaea (eia: 80040216) - An object or name was not found.
Вот-вот-вот! У меня тоже самое! НО! Это происходит только на фильмах с нестандартной шириной. На 1280 и 1920 все ок. Но только нужно запускать сразу с телевизора, при тестовом транскодировании, или отладке скрипта, все рушится!
miks69 wrote:вопрос: если поставить WMP 12, я смогу использовать 'Microsoft DTV-DVD Video Decoder'?
Дело в том, что вы просто не поставите отдельно WMP 12. ;) Он поставляется только в комплекте с семеркой. Но вариант с Сайберлинковским декодером тоже отличный и тоже у меня работает.
miks69 wrote:и еще просьба: может выложишь работающий у тебя вариант скрипта для профиля "Фильмы - CoreAVC"?
Не вопрос! Но я повторяю, я его не менял. Только заменил одну строку.

Code: Select all

if not CheckResult(HmsDirectShowAddFilter('CoreAVC Video Decoder', 'Video Decoder')) then
на

Code: Select all

if not CheckResult(HmsDirectShowAddFilter('Microsoft DTV-DVD Video Decoder', 'Video Decoder')) then
Попробуйте запустить непосредственно с телевизора, а не "Тестовое транскодирование". Оно у меня тоже падает.
Alexander Great
Posts: 99
Joined: Wed Mar 10, 2010 9:24 am

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by Alexander Great »

В общем получается такая петрушка:
это

Code: Select all

begin
if ((mpWidth = 1280) and (mpHeight = 720)) or ((mpWidth = 1920) and (mpHeight = 1080))
then
HmsTranscodingProfileExecute('Фильмы - TsMuxer')
else
if ((mpWidth = 1280) and (mpHeight < 720)) or ((mpWidth = 1920) and (mpHeight < 1080)) then
HmsTranscodingProfileExecute('Фильмы - CoreAVC')
else HmsTranscodingProfileExecute('Фильмы (основной)')
end.
...работало бы вообще без проблем, если бы удалось перед запуском фильма, автоматически менять mime type.

А то транскодирование запускается именно так как надо, но телек ждет MPEG2, а ему подсовывают AVC. В результате получается Playback not available. :(

Какой нибудь полезной функцайки типа SetMimeType я не нашел...

Может можно это как то запихнуть в "условия использования"? Или дать ему свойство "параметры"? Или я вообще захожу не с того конца?
Разработчики! Аууу!!! Помогите плиз! :oops:
miks69

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by miks69 »

вот такую переменную нашел - cfgTranscodingVideoMimeType, в описании написано - MIME-тип фильмов. мож подойдет?
Alexander Great
Posts: 99
Joined: Wed Mar 10, 2010 9:24 am

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by Alexander Great »

Ураааааааа!!! Я кажется нашел простое решение! :D

1) Настройка-Медиа ресурсы-Типы файлов
2) mkv-изменить-дополнительная проверка поддержки файлов
3) Добавить условие

Code: Select all

((mpWidth = 1280) and (mpHeight = 720)) or ((mpWidth = 1920) and (mpHeight = 1080))
профиль - "Фильмы - DirectShow - TsMuxer"
4) Добавить условие

Code: Select all

((mpWidth = 1280) and (mpHeight < 720)) or ((mpWidth = 1920) and (mpHeight < 1080))
профиль - "Фильмы - CoreAVC"

Все! У меня работает! Для остальных файлов применяется профиль по умолчанию - "Фильмы - (основной)"

PS Не забудьте про level=4.1 Читайте выше
miks69

Re: Опыт настройки HMS и Sony W5500 + несколько вопросов

Post by miks69 »

Так это же здОрово! Поздравляю! А что со сокростью транскодинга - справляется?

Я пока продолжаю бороться с настройкой профиля "Фильмы - CoreAVC".
Кодек CyberLink у меня не заработал - транскодинг отваливается с ошибкой (см.пред.пост).
После установки найденного в сети кодека CoreAVC 2.0 профиль заработал без ошибок, но картинка в виде цветных квадратиков и звука нет. Понимаю, что размер кадра после транскодинга не исправился, но где это настраивается не знаю. При этом скорость падает с 27 до 19 fps, а это означает, что видео будет торозить. Не понимаю, где собака порылась...

Вопрос на засыпку: какую версию HMS используете?
Post Reply