Страница 1 из 3

MJPEG server

СообщениеДобавлено: 27 авг 2015, 00:39
holmes
Прошивка 1.07.002.
Не могу запустить видео на ядре по-умолчанию (HD).
Переключил на ядро SD. Запускаю RTMP - работает. А вот MJPEG server вообще не работает. То есть в админке флеш плеер ничего не кажет, черный.
VLC не может подключиться.
Что делать?
Я бы хотел получить кадры видео в программе на C#, библиотека есть для этого удобная. Не хочу писать плагин к гстримеру.

Re: MJPEG server

СообщениеДобавлено: 27 авг 2015, 22:40
holmes
Может кто-нибудь напишет если у кого-то работает MJPEG?

Re: MJPEG server

СообщениеДобавлено: 01 сен 2015, 23:30
realizator
holmes писал(а):Может кто-нибудь напишет если у кого-то работает MJPEG?

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

Re: MJPEG server

СообщениеДобавлено: 05 сен 2015, 16:45
holmes
В том-то и дело что думаю дело не во флеше. VLC тоже не показывает MJPEG.
Хочу получить на виртурилке MJPEG сервер, как например на вэб камере. Возможно такое?

Re: MJPEG server

СообщениеДобавлено: 05 сен 2015, 19:56
Gol
holmes писал(а):В том-то и дело что думаю дело не во флеше. VLC тоже не показывает MJPEG.
Хочу получить на виртурилке MJPEG сервер, как например на вэб камере. Возможно такое?


Да собссно штатная цепочка из админки и работает, прям вот щас проверил. В админке да, не пашет почему-то, но если в браузере открыть http://<ip_железки>:8888 то показывает текущий кадр, обновлять страницу приходится (браузеры некорректно конец кадра в потоке обрабатывают).

gst-launch -e v4l2src always-copy=false chain-ipipe=true ! capsfilter caps=video/x-raw-yuv,format='(fourcc)'NV12,width=640,height=480,framerate='(fraction)'30 ! dmaiaccel ! dmaienc_mjpeg qValue=40 copyOutput=false outputBufferSize=0 fixTimestamp=true ! tcpserversink port=8888 sync=false


Если разрешение 1280x720 поставить то стартует но быстренько дохнет, поток там нехилый получается. Можно с буферами поиграться, мож поможет. Я MJPEG вообще не рассматриваю как видео, если честно . "MJPEG это не видеопоток, это способ убить канал" (с) :-)

UPD> Можно включить децимацию для HD режима, т.е. понижение fps. В элементе v4l2src добавить параметр decimate=2, тогда будет 15 фпс и отлично пашет MJPG в 1280x720.

Re: MJPEG server

СообщениеДобавлено: 06 сен 2015, 02:10
holmes
Да, кадр в браузере получить удалось, спасибо (теперь знаю что оно в каком-то смысле работает), но ни VLC ни моя программа поток не читают. Похоже гстример как-то нестандартно формирует поток.
Я даже HttpWebRequest'ом не могу получить сырые данные чтоб распарсить BASE64 кадр вручную. Получаю ошибку "Сервер нарушил протокол. Section=ResponseStatusLine". Попробую перейти на TcpSocket...

Re: MJPEG server

СообщениеДобавлено: 06 сен 2015, 14:38
holmes
Окончательно убедился что гстример делает неправильный MJPEG. Перепробовал кучу софта который читает IP камеры - ни одна софтина ничего не показала. Видимо поэтому и в админке флэш плеер ничего не показывает.
В общем тут надо копать в сторону разбирательства с настройками гстримера. Думаю если бы виртурилка из коробки могла становиться еще и IP камерой это сильно облегчило бы жизнь многим разработчикам.

Re: MJPEG server

СообщениеДобавлено: 06 сен 2015, 15:34
Gol
holmes писал(а):Окончательно убедился что гстример делает неправильный MJPEG. Перепробовал кучу софта который читает IP камеры - ни одна софтина ничего не показала. Видимо поэтому и в админке флэш плеер ничего не показывает.
В общем тут надо копать в сторону разбирательства с настройками гстримера. Думаю если бы виртурилка из коробки могла становиться еще и IP камерой это сильно облегчило бы жизнь многим разработчикам.

В админке флеш плеер всё прекрасно показывал пока я сам что-то не сломал :-) И кстати всё приличные IP камеры стримят в H264, с чем виртурилка прекрасно и справляется. Кстати в админке флеш плеер специально MJPEG парсит. Раньше работало а ща да, не пашет почему-то.

VideoNet, к примеру
Изображение

UPD> Кстати, если поток MJPEG в файл записать - VLC его прекрасно показывает
UPD> А гстример десктопный прекрасно показывает MJPEG поток с виртурилки :-) Вот жопой чую - где-то байтик какой-нить всё портит в остальных приложениях
UPD> О! Открылся поток через VLC! Ща перепроверю и если всё ок сскину цепочку

В общем, ключевым элементом оказался multipartmux, без него VLC поток не хочет кушать. В штатной прошивке его нету, так что придётся добавить ручками (в SDK собрать gst-plugins-good, включив пункт "multipart") ну или скачать уже собранный файлик и скопировать его в /usr/lib/gstreamer-0.10

Цепочка на борту
Код: Выделить всё
gst-launch -e v4l2src always-copy=false chain-ipipe=true decimate=2 ! capsfilter caps=video/x-raw-yuv,format='(fourcc)'NV12,width=1280,height=720,framerate='(fraction)'30 ! dmaiaccel ! dmaienc_mjpeg qValue=50 copyOutput=false fixTimestamp=true ! multipartmux ! tcpserversink port=8888 sync=false


Цепочка на десктопе (для приёма гстримером)
Код: Выделить всё
gst-launch-0.10 tcpclientsrc host=192.168.1.61 port=8888 ! multipartdemux ! jpegdec ! autovideosink


Приём на VLC - тупо "Открыть URL", ввести tcp://192.168.1.61:8888

Re: MJPEG server

СообщениеДобавлено: 06 сен 2015, 20:19
holmes
Скопировал файл куда сказано, добавил multipartmux в цепочку.

VLC показывает. Моя программа - нет (используется библиотека AForge).

При попытке посмотреть на win7 гстримером - ошибка.

Код: Выделить всё
C:\gstreamer\1.0\x86_64\bin>run

C:\gstreamer\1.0\x86_64\bin>gst-launch-1.0 tcpclientsrc host=192.168.1.7 port=88
88 ! multipartdemux ! jpegdec ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstTCPClientSrc:tcpclientsrc0: Intern
al data flow error.
Additional debug info:
gstbasesrc.c(2812): gst_base_src_loop (): /GstPipeline:pipeline0/GstTCPClientSrc
:tcpclientsrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...


Тут идеи окончательно кончились...

Re: MJPEG server

СообщениеДобавлено: 06 сен 2015, 20:43
Gol
holmes писал(а):Скопировал файл куда сказано, добавил multipartmux в цепочку.
VLC показывает. Моя программа - нет (используется библиотека AForge).


Попробовал Simple Player из сэмплов AForge, ругается "Сервер нарушил протокол". Без понимания протокола дальше не продвинемся. Чего ему нужно от сервера? Штудируй доки по афоржу.

UPD> "By the way, did you try adding useUnsafeHeaderParsing option to your config file? see documentation of MJPEGStream class)("

UPD> Попробовал ffmpeg (точнее, ffplay), вроде норм

UPD> Ну т.е. понятно - сервер отдаёт тупо стрим в сокет, а клиент твой пытается именно по HTTP брать, вот тут и затык. Надо читать сокет и брать байтики, HTTP нафиг не нуна. "useUnsafeHeaderParsing" по идее должен помочь, только я хз где его прописывать.


UPD> Вот тут смотри метод private void WorkerThread( ) https://aforge.googlecode.com/svn-histo ... GStream.cs , как раз понятно почему не пашет

UPD> Вот ещё на эту тему (как отключить парсинг некорректного заголовка) https://social.msdn.microsoft.com/Forum ... etfxnetcom