LG LD750 - транскодированный файл обрывается

Конфигурации устройств, советы по использованию
Sulako
Posts: 7
Joined: Sun Feb 27, 2011 12:41 am

LG LD750 - транскодированный файл обрывается

Post by Sulako »

Настраиваю HMS для работы с LG LD750, пытаюсь одолеть транскодирование.

Симптомы:
при запуске файла через папку "транскодирование", с любым профилем транскодирование запускается 4-5 раз. Выставил "показывать консольное окно", так оно несколько раз появляется и исчезает, и только потом идет воспроизведение.
Это бы ничего, ведь после этого начинает показывать, в свойствах видно MPEG2/DOLBY DIGITAL.
Перекодирование проходит довольно быстро, FPS 100-200.
Но через какое то время после начала (время различается от пары секунд до нескольких минут) - происходит одно из трех:
- либо выскакивает сообщение "устройство отключено, повторите попытку" и выкидывает из видеоплеера;
- либо появляется надпись "Загрузка" и висит до тех пор пока не истечет таймаут;
- либо воспроизведение снова начинается с самого начала файла.
Также, через какое то время (закономерности не выявил) после начала воспроизведения снова появляется окно транскодера и опять начинает перекодировать, иногда прямо много раз моргает.

Что пробовал:
-заменил сетевой кабель. (вряд ли дело в нем, т.к. видео, не требующее транскодирования, воспроизводится нормально) Пинговал телик - потерь нет.
-выставил максимальный размер файла в 32 000 000 000 байт.
-поставил позиционирование chunked и по времени
-ставил закрытие соединения через 60 и 600 секунд
-менял DLNA 1.5 и DLNA 1.0
-пробовал перекодировку на других видео. То же самое.
-проверил воспроизведение на Playstation3 с тем же профилем. Ничего не обрывается, транскодирование запускается только 1 раз.
-места на диске для транскодирования достаточно, да и ролик небольшой

Куда еще копать - не знаю. У кого все нормально работает, поделитесь настройками пожалуйста.
th0r

Re: LG LD750 - транскодированный файл обрывается

Post by th0r »

Очень похожая проблема. Телек - LG 37LE5500. Я так понимаю, пробуете транскодировать профилем TsMuxer без перекодировки видео, да?
Я пробовал траскодировать матрешку (mkv) с dts-ной дорогой. Скорость получал тоже порядка 100 fps и наблюдал примерно те же проблемы: проигрывает секунд 10, потом стопорится, затем еще секунды 3 - опять стопорится и т.д. При запуске фильма с телека, в логе в hms видно, что транскодирование несколько раз начинается заново (на глаз, раза 3). После этого перекодировка идет исправно, но несмотря на это, телек все-равно запинается. Пробовал все это вчера вечером, и не успел проверить одну гипотезу - хочу стравить результирующий m2ts-файл телеку по usb. Если сможет съесть - проблема в dlna, если нет - значит что-то не так с самим файлом...
Sulako
Posts: 7
Joined: Sun Feb 27, 2011 12:41 am

Re: LG LD750 - транскодированный файл обрывается

Post by Sulako »

Для пробы запускал flv и rm ролики (видеоклипы). Хотя цель вообще то на лету переделывать DTS в AC3 на HD фильмах.
Пробовал также другие серверы - из всех только с TVersity транскодинг пошел влет, без малейших затыков. Но TVersity практически не настраивается - хочет переделывать вообще все подряд, а мне это не надо. Вот разве что PS3 Media Server еще можно погонять, тонкая настройка там есть, но с наскоку заставить работать не вышло.

Пробовал транскодировать в разные форматы (vob, ts, m2ts, mkv, даже mpeg1, с кодеками от mpeg1 до x264). Везде одно и то же - перекодировка начинается несколько раз, в это время телик несколько раз моргает (сначала показывает неизвестный формат, потом нужный с размером 0х0, и только потом уже то что надо, а иногда вместе этого теряет соединение).
Где-то посреди воспроизведения, может запустить файл заново, на разных местах. Также ни с того ни с сего, когда перекодировка уже завершилась и телик играет файл, перекодировка может снова запуститься.
Перекодировка в avi не прокатила, что в общем понятно - индекс там в конце файла. К ts/m2ts у телика неприязнь - не хочет перематывать и готовые файлы.
Уже перекодированные файлы из временной папки играет на ура, а вот на лету - ну никак. Есть подозрения что дело все таки в том как телик разговаривает с сервером, ведь с Tversity все гладко, даже не моргает при запуске - сразу хватает поток. Как бы подслушать их обмен и сравнить c HMSным... wireshark перехватывает очень много чего, но попакетно совсем ничего не понятно - обрывки каких то xml, http и двоичные данные.

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

Есть еще идейка - может, обрыв происходит после того как заканчивается транскодирование, причина правда неясна. Хочу попробовать ограничить скорость транскодирования до реального времени. Опция -re у ffmpeg чего то не захотела это делать.
Sulako
Posts: 7
Joined: Sun Feb 27, 2011 12:41 am

Re: LG LD750 - транскодированный файл обрывается

Post by Sulako »

Транскодирование со скоростью реального времени тоже не помогает. Пришлось добавить транскодер ffmpeg - hmsmpeg не понимает нужную опцию. Телик долго тупил перед запуском, потом начал проигрывать и проиграл файл до конца, но получилось только с одним файлом, на остальных опять обрывы. Видимо повезло.
th0r

Re: LG LD750 - транскодированный файл обрывается

Post by th0r »

А я вчера попробовал то, что планировал. Создал 3 файла: 1) test_transcoded.m2ts; 2) test_byhands.m2ts; 3) test_byhands.ts. Все они создавались из 200-метрового куска фильма в матрешке, видео в h264, profile 4.1, 4 reframes, 1920x1080 (т.е., идеальная hd-дорога), аудио - DTS 768.
1-ый файл - это данный кусок, транскодированный hms-ом (режим тестового транскодирования) при помощи профиля TsMuxer, т.е. аудио там перекодировано в AC3 448.
2 и 3 куски - это то же самое, но аудио перекодировано и контейнер сменен ручками (аудио - в eac3to, контейнер - в tsMuxerGUI).
Затем попробовал проиграть их на телеке через hms: поведение всех 3 файлов одинаковое - все запинаются спустя несколько секунд.
Скинул куски на флэшку и попробовал воспроизвести с нее: телек не увидел *.m2ts файлов, а только *.ts. Сменил расширение всех файлов на *.ts - все проигрались без запинки. Правда, перемотать ни один из них телек не смог.
Вывод: косяк не в самом процессе транскодирования, а в том, как hms общается в телеком. Так что, есть подозрение, что без изменения исходников hms-а с LG-ками ее не подружить...
Sulako
Posts: 7
Joined: Sun Feb 27, 2011 12:41 am

Re: LG LD750 - транскодированный файл обрывается

Post by Sulako »

Решил проверить предположение и убрать транскодирование вообще.

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

Добавил ее как транскодер и сделал профиль с его использованием.
Сделал TSMuxer-ом небольшой файл .ts на 5 минут.
Попробовал его на телике через сеть в оригинале. Хорошо открылся, хорошо пошел, но к моему удивлению - внезапно начал воспроизводиться с самого начала. Похоже, с ts контейнером вообще все плохо.
Тогда взял файл mkv. Тоже небольшой, 10 мин/50мб.
В оригинальном режиме проигрался через сеть без проблем до конца. Применил к нему профиль с копированием.
Проверил тестовым транскодированием - все работает, файл копируется, если не ограничивать скорость - за секунду-две.
Попробовал на телике.
И что же? да то же самое. Многократный запуск "транскодера", и воспроизведение с начала или потеря соединения где то в середине.
Повторил на других рабочих файлах в разных форматах - mpg, mp4, vob, m2ts. Mime-тип менял соответственно. Картина та же, только mp4 вообще отказался работать.

Не знаю, кто виноват, HMS или LG, но выход вижу только один - пробовать другие серверы. Очень жаль, буду ждать обновления HMS и прошивки на телике, может что поменяется.
Sulako
Posts: 7
Joined: Sun Feb 27, 2011 12:41 am

Re: LG LD750 - транскодированный файл обрывается

Post by Sulako »

Спасение утопающих - дело рук самих утопающих.
Перепробовал кучу серверов, либо настроек недостаточно для реализации задуманного, либо все то же самое c обрывами.
Взялся за документацию по UPnP-AV (DLNA это то же самое, только с некоторыми ограничениями). Там все оказалось до безобразия просто, HTTP GET и все дела.
Нашел приличный сниффер (SmartSniff), cобрал из палочек и веточек (Intel UPnP SDK, Apache, PHP, FFMpeg) подобие медиасервера и начал копать.

Итак.

HMS в общем то ни при чем, это все инженеры LG.
В чем проблема с транскодируемыми файлами? Казалось бы, ну попросил телик файл, ну мы запустим транскодер и потихоньку начнем ему ему отдавать результат, а он пусть потихоньку проигрывает. Так делает PS3, наверное, так делают другие телики и медиаприставки, но не наш ТВ.

Вот мы выбираем на телике файл. Он сразу же делает несколько запросов к нему - и именно из-за этого мы видим что транскодирование запускается несколько раз.
Первые два запроса - в начало файла, третий - куда-то в середину а то и в конец, за несколько мегабайт до указанной в Content-length длины.
Запрос данных с середины/конца происходит для всех форматов - MPEG TS/PS, avi, mkv, mp4, wmv, asf, и прочих. Есть два исключения - это raw MPEG-1 и raw MPEG-2, их телик сразу проигрывает. К сожалению, в них невозможно вставить звук.

И неважно, что отсутствует заголовок Accept-Range - вот дай мне файл с середины и все тут. А нет еще этого места в файле, скоро будет, но пока нет.
Что делать? Скажешь ему 416 Requested Range Not Acceptable - обижается, и говорит - недопустимый файл.
А что если сделать вид что все хорошо, отправить корректные заголовки (206 Partial Content, правильный Content-Range, все дела), а самих данных не давать, завершить соединение? Удивительно, но телик поймет. Нет - ну и не надо, главное что заголовки правильные.

Через несколько (10-15) секунд после выбора файла происходит запрос ContentDirectory на описание файла, и затем - еще серия запросов к файлу. В этот момент начинается собственно воспроизведение, до этого момента висит надпись "загрузка". На этот момент получено около мегабайта данных файла - видно сниффером.
Телик снова 2 раза просит файл с начала, с середины, а также отступив немного от начала.
Во время воспроизведения также иногда происходят запросы к началу файла и к середине - видимо к текущему месту. C чем это связано - пока не разобрался.

Кстати, а вот скажем, транскодер добрался до отметки 10 мб, и тут телик попросил файл начиная с 9 мб - мы то быстренько отдадим ему 1 мегабайт, а что дальше? Завершим соединение? Телик обидится и выскочит в список файлов. Нужно подождать, пока транскодер не сделает еще, а до тех пор держать соединение. Как появились в файле данные - отошлем их.

Таким вот образом я добился корректного воспроизведения еще не готового файла. Я специально ограничил скорость до реального времени, так что транскодирование завершалось секунд за 10 до конца воспроизведения. Проверено многократно, обрывов и вылетов нет.
Поразительно, но пауза и перемотка тоже работали, несмотря на то, что отдавался файл в ts формате. Конечно, если попытаться перемотать файл в несуществующее место - происходил обрыв и выкидывало в список файлов, но отмотать чуть назад или в начало - это можно. Однако, если сделать перемотку - файл не проигрывался до конца.
Также, телик проигрывает столько времени сколько будет указано при запросе ContentDirectory. Сказано там 1 минута - одну минуту играть и будет, даже если отдавать полуторачасовой файл.

Все это хорошо, скажете вы, но что же делать?
К сожалению, пока ничего полезного предложить не могу (кроме использования TVersity, это единственный сервер с которым все пошло гладко, вот только транскодинг не получается настроить как хочется). Буду копать дальше.

Думаю сделать что нибудь вроде прокси-сервера, который будет показывать все содержимое HMS и отдавать файлы телику так как он хочет.
Конечно, лучше бы выяснить, что нужно добавить в HMS для корректного воспроизведения. Но пока я не готов точно сказать, в чем же дело.

Как минимум, стоило бы при запросе файла, который в данный момент транскодируется, не прерывать транскодирование чтобы тут же начать его заново, а прочитать и вернуть существующие данные.
А на запрос несуществующих данных - делать вид что они существуют, отдавать правильные заголовки, но сами данные либо не давать, либо ждать, пока они появятся.
Sulako
Posts: 7
Joined: Sun Feb 27, 2011 12:41 am

Re: LG LD750 - транскодированный файл обрывается

Post by Sulako »

Всем, у кого наблюдается то же самое с HMS и LGTB (обрывы при транскодировании). (Если не наблюдается - я рад за вас)
Таки сделал прокси. Разговаривает с HMS и телевизором так, как хочется им обоим.
Это конечно костыль, и неплохо бы чтобы HMS сам умел правильно работать с ТВ, но пока не умеет - выкручиваемся как можем.
На моем LG LD750 - помогает, теперь могу транскодировать на лету. Поможет ли вам - не могу сказать :) Поможет - хорошо, не поможет - очень жаль.

Использование:

1) Скачайте прокси: http://narod.ru/disk/11844316001/hmsproxy.zip.html
2) распакуйте, запустите. В списке должен автоматически выбраться HMS.
Если это не произошло - выберите его из списка.
Eсли в списке пусто - нажмите Поиск.
Если и после этого не находит - в HMS на закладке Сервер разрешите подключения для IP вашего компьютера, уберите неиспользуемые интерфейсы.
3) Укажите порт и размер буфера в памяти. Порт не должен быть занят, размер буфера должен быть не менее 30 мб, чем больше тем лучше.
4) Нажмите запуск.
5) На телевизоре заходите в сервер HMS Proxy. Внутри будет все содержимое HMS. Нетранскодируемые файлы - будет отдавать HMS, транскодируемые - будут идти через прокси.

Ограничения:
- забудьте про перемотку. Все, что доступно телевизору - это буфер в памяти прокси, размер его вы задаете, и буфер самого телевизора, около 20 мб. Ну можно чуть перемотать назад или вперед в пределах буфера, но если вылезете за границу существующих данных - будут ошибки (такие как запуск воспроизведения заново, "устройство отключено", "недопустимый файл", и даже перезагрузка телевизора).
- желательно надолго не ставить на паузу (транскодирование в HMS может сильно убежать вперед, возможно, соединение изза этого прервется)
- Невозможна одновременная работа с 2 устройствами. (точнее, невозможна одновременная обработка двух и более запросов на разные транскодируемые файлы). Буфер один, так что ничего не выйдет.

Если возникает ошибка "недопустимый файл":
в HMS на закладке "транскодер" поставьте макс. размер 32 гб (тв не понимает файлы размером больше), также можно поставить галочку "расчет размера по продолжительности".
Прокси ничего особенного не делает с содержимым файлов, если в результате транскодирования получился непроигрываемый теликом файл - он его и не проиграет. Поиграйтесь с настройками транскодера, проверьте, проигрывает ли ТВ полученный файл. Если все равно не получается - пишите, попробуем найти проблему.
shs
Posts: 1
Joined: Fri May 13, 2011 3:50 pm

Re: LG LD750 - транскодированный файл обрывается

Post by shs »

При запуске hmsproxy пишет: Failed to set data for 'TranscodeRexEx'
Потом в списке HMS не находит, при выходе - Access violation и не дает выйти, только снятием процесса.
Sulako
Posts: 7
Joined: Sun Feb 27, 2011 12:41 am

Re: LG LD750 - транскодированный файл обрывается

Post by Sulako »

обновление: http://narod.ru/disk/13049774001/hmsproxy.exe.html

и еще, в следующей версии HMS будет работать с LGTV нормально, без костылей.
Post Reply