LINUX.ORG.RU

Исследование потока с китайского видеорегистратора

 , ,


0

2

Приветствую спецов! Возникла проблемка, надеюсь, смогу тут найти подсказку, в каком направлении копать. Краткая предыстория ниже (осторожно, многобукав).

Задача: вывод куда-нибудь (да хоть в mplayer) видеопотока с дешёвого китайского четырёхканального h264-видеорегистратора с целью просмотра в реальном времени и последующей его записью.

Проблема: регистратор вещает в своём собственном формате. Просмотреть картинки с камер можно только через специальную виндовую прогу (DVRemote.exe) либо через EI7 с какой-то гнилой ботвой на ActiveX. Записываются файлы с него тоже в непонятном и мало изученном (но, как я понял, популярном в подобных регистраторах) формате с расширением .irf. Кругом засада...

Что уже сделано: с помощью wireshark'а на регистраторе обнаружено приложение cgi-bin, которое выдаёт поток, а так-же исследованы его (приложения) параметры. С помощью функции проводной акулы «Follow stream» записаны сеансы общения через 80й порт (на иных портах активности не наблюдалось) между родным ПО и регистратором.

Таким нехитрым образом были обнаружены посылки управления (переключение каналов, управление PTZ и т.д.), разобрать которые не составило труда. Далее отбирались те tcp-потоки, в которых был запрос GET к этому cgi-скрипту и ответ HTTP/1.0 200 OK; Content-type: video/h264. Затем в двоичном редакторе происходило разделение заголовков http и, собственно, потока, получившиеся файлы были сохранены на диск в формате «как есть» (raw) и скормлены mplayer'у. Без особого успеха...

Но в один прекрасный момент был записан фрагмент, в котором видно проскакивающие кадры одной из камер в перемешку с синим video-loss-экраном (два канала не подключены) и сильными помехами (очевидно, следствие подмешивания в поток каких-то служебных данных либо мультиплексирование сигналов со всех четырёх каналов в этот единый поток). Данный фрагмент доступен для загрузки тут, 2.3 мб: http://tfsoft.org.ua/~twister/dvr_captured_sample.h264

Конкретные вопросы: насколько велики шансы за разумный период времени извлечь нормальный видеопоток из этой каши? По сути, всё управление (переключение каналов, управление трансфокатором и фокусом камер) уже есть, осталось лишь картинку получить.

Если я правильно понимаю, мне нужно обнаружить записи Sequence Parameter Set и Picture Parameter Set, чтоб иметь представление о потоке, но как и где их искать? Во внутренностях h264 не шарю почти ничего...

P.S.: Можно, разумеется, выкинуть этот регистратор и использовать pci-плату с выводом видео через video4linux, но для этого нужно будет очень далеко тянуть провода от аналоговых камер (одна из которых весьма специфична  — радиационно-стойкая, потому вариант с заменой на IP-камеры не рассматривается). Да и чисто из спортивного интереса было-бы неплохо решить эту задачку, не так-ли? ;)

★★

Да и чисто из спортивного интереса было-бы неплохо решить эту задачку, не так-ли? ;)

Не так

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

я в свое время нашел у китайцев программу под android для просмотра данных с видеорегистратора, а её в свою очередь можно достаточно быстро декомпилировать. фрагмент посмотрел, на мой не похож. в фрагменте есть интересные слова «UwSdOUM», стоит посмотреть на них.
другой анонимус

anonymous
()

Если я правильно понимаю, мне нужно обнаружить записи Sequence Parameter Set и Picture Parameter Set, чтоб иметь представление о потоке, но как и где их искать? Во внутренностях h264 не шарю почти ничего...

ты неправильно понимаешь. :) Тебе надо получить из каши mpeg4 поток - а он там есть, если бегло глянуть в дамп. Но есть ещё кучка хрени. Остаётся понять как именно откусить ненужное.

решал подобное с китайской веб-камерой - пара дней мата и всё ок :)

MKuznetsov ★★★★★
()

Товарищ выше правильно говорит: искать начало кадров, вычленять, смотреть, что есть в остатке, и как это можно использовать. В принципе, задача осиливаемая, если сишечку знаешь и libavformat/libavcodec можешь использовать.

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

Сишечку знаю конечно, либы, думаю, осилю :) Благодарю за совет, попробую поковырять в этом направлении.

А SPS/PPS что, вообще не при делах?

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

либо мультиплексирование сигналов со всех четырёх каналов

Судя по тому, как картинка сползает вниз, скорее всего это. Обычно есть настройка, чтобы один канал только принимать - её бы найти-включить, дальше будет проще =) И наверно пакеты в wiresharke как-то странно немного ловить. Там скорее всего обычный GET запрос на какой-нить URL. В худшем случае rtsp.

ffmpeg в зубы и могу только удачи пожелать. Сам с h264, правда c ip-камерами, намучился где-то год назад... В итоге в одном случае дожал ffmpeg, в другом на vlc склепал.

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

Особо ни чем не могу помочь. Из моего опыта программухи с использованием ffmpeg может помочь следующее. По дефолту там стоит автодетект параметров потока. Я уже не помню как он это делает, но суть в том что на битых файлах (или равках) эта хрень сбоит. Можно попробовать указать кодек вручную и указать оффсет.

Но проще с параметрами играть в gstreamer, там пайплайны конструируются из коммандной строки. Всём там непонятно, доки дурацкие, но по туториалам из инета поймёшь.

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