LINUX.ORG.RU

[MPEG-TS]анали на валидность без декодирования


0

1

Есть устройство, которое зависает, если приходит «корявый» видео-поток. Появилась мысль не отдавать испорченные пакеты на декодирование. Сижу, курю спеки по TS, PES и ES, но что-то ничего, что там могло бы указаывать на невалидность потока не нахожу.

Кто-нибудь знает, это вообще возможно? Может, какие альтернативные мысли имеются.

★★

Есть устройство, которое зависает, если приходит «корявый» видео-поток.

Ты уверен, что поток корявый и проблема не в самом устройстве? То есть, не виснет ли оно от хорошего потока.

baverman ★★★
()
Ответ на: комментарий от baverman

Уверен. Параллельно vlc'шка запущена - в ней картинка просто замирает, потом подсыпается и дальше идет.

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Попробуйте в VLC посмотреть журнал, возможно там будут какие-то понятные Вам сообщения (Меню-Инструменты-Сообщения: Уровень детальности сообщений)

Eshkin_kot ★★
()
Ответ на: комментарий от kulti

Уверен. Параллельно vlc'шка запущена - в ней картинка просто замирает, потом подсыпается и дальше идет.

Скорее всего просто теряются пакеты. Это вполне нормальное явление, и если железка виснет от такого, то её надо выкидывать.

Deleted
()
Ответ на: комментарий от Eshkin_kot

Хм... Совсем об этом забыл(я запускаю просто vcl -vvv) Но чо-т никак не пойму откуда vlc этот лог сыпет:

[0x96eaf7c] ts demux warning: invalid header [0xce:bf:af:50] (pid: 320)

kulti ★★
() автор топика

анали?
жуть жуть жуть

ktk ★★★★
()
Ответ на: комментарий от kulti

Это уже проверили - данные идут.

А пакеты точно все доходят? Потому как симптомы очень похожи именно на потери пакетов: картинка замирает, так как плеер некоторое время ждёт, что потерянный пакет может всё-таки дойти (при этом новые пакеты складываются в кеш), а затем недождавшись продолжает декодирование без пакета (при этом картинка ненадолго «рассыпается»).

Deleted
()
Ответ на: комментарий от Deleted

Ага, на потерю пакетов и у железяки такая реакция. Но тогда бы и vlc на discontinuity ругалась, а не на invalid header какой-то...

kulti ★★
() автор топика

- у TS потока есть error bit. не смотрел?

- а sync byte (0x47) во всех пакетах присутствует?

anonymous
()
Ответ на: комментарий от anonymous

Ага, с этими все хорошо. Пытаюсь смотреть sync-байты в PES, но, видимо, неправильно это делаю. Я считаю, то Payload это и есть PES для видео-пидов.

kulti ★★
() автор топика

Ага! Почти докопался.

В общем пока поток нормальный, то почти всегда Packet start code prefix = 0x000001, но иногда проскакивает 0x075000. Что это за фигня - пока хз.

Когда поток хреновый, то всякая фигня там валиться, как и в vlc

kulti ★★
() автор топика
Ответ на: комментарий от kulti

[0x96eaf7c] ts demux warning: invalid header [0xce:bf:af:50] (pid: 320)

http://git.videolan.org/?p=vlc.git;a=blob;f=modules/demux/ts.c#l1655

1649     /* FIXME find real max size */
1650     /* const int i_max = */ block_ChainExtract( p_pes, header, 34 );
1651 
1652     if( header[0] != 0 || header[1] != 0 || header[2] != 1 )
1653     {
1654         if( !p_demux->p_sys->b_silent )
1655             msg_Warn( p_demux, "invalid header [0x%02x:%02x:%02x:%02x] (pid: %d)",
1656                       header[0], header[1],header[2],header[3], pid->i_pid );
1657         block_ChainRelease( p_pes );
1658         return;
1659     }

Eshkin_kot ★★
()
Ответ на: комментарий от Eshkin_kot

Спасибо, я уже нашел =) Остаолько только понять, что за 0x075000 вместо 0x000001

kulti ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.