Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как засунуть mjpeg в udp?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
novartis
Всем добрый день.

Возникла задача передавать jpeg кадры по ethernet, и именно по udp, да так, чтобы эти кадры, как видео, потом можно было бы смотреть на Андроид устройстве распространенными приложениями (типа IPTV).
Не могу постигнуть, как это осуществить.
Как обернуть данные и подсунуть в кадр udp?

Несколько часов гуглил, дошел до Udp Multicast, но в голове уже каша.

Укажите верное направление.

Для начала хочу все это дело реализовать на Qt. Алгоритм такой: нажал кнопочку, программа читает jpeg фото и в цикле засылает ее по udp.
На андроиде стоит IPTV, в нем хочу прописать источник: udp://@192.168.1.6:1234
здесь 192.168.1.6 и 1234 - ip-адрес и порт компа, с которого отправляются udp-пакеты.

blackfin
Цитата(novartis @ Apr 2 2015, 23:24) *
Укажите верное направление.

RFC2435+RFC3550+RFC4566, и т.п.
monty
Цитата(blackfin @ Apr 3 2015, 10:10) *
/rfc/rfc4566.txt"]RFC4566[/url], и т.п.


Поддерживаю предыдущего оратора - RTP.
novartis
Спасибо за ответы, RTP - то, что нужно!
novartis
Все еще пытаюсь реализовать задачу.
Написал на qt приложение. Оно поднимает udp сервер.
Host ip=192.1.1.10. Client ip=192.1.1.20. Port=60000.
Формирую rtp пакеты. В rtp засовываю jpeg данные.
В wireshark мониторю трафик.
На ноуте поставил vlc.
В нем открываю url - rtp://192.168.1.20:60000.
В ответ выдается:
SDP required.
A description in sdp format is required to receive the rtp stream. Note that rtp://URIs cannot work with dynamic rtp payload format (26).

И еще в логе:
Unspecified payload format (26)
A valid sdp is needed to parse this rtp stream.

Что он хочет от меня?

Стал читать про sdp.
В результате (а вдруг получится?) перед каждым rtp пакетом с самым первым фрагментом jpeg добавил udp-sdp пакет с содержимым:
v=0
o=user 1111 22222 IN IP4 192.168.1.10
s=sessname
m=video 60000 RTP/AVP 29

Но vlc выдает теже ошибки, что и прежде.
Подскажите, куда копать, что я делаю не так.

blackfin
Цитата(novartis @ Apr 13 2015, 09:44) *
Стал читать про sdp.
В результате (а вдруг получится?) перед каждым rtp пакетом с самым первым фрагментом jpeg добавил udp-sdp пакет с содержимым:

Wiki: "RTSP-сообщения (например, в формате SDP) посылаются отдельно от мультимедийного потока. Для них используется специальный порт с номером 554."
ksv198
Цитата(novartis @ Apr 13 2015, 09:44) *
Все еще пытаюсь реализовать задачу.
...
Но vlc выдает теже ошибки, что и прежде.
Подскажите, куда копать, что я делаю не так.


Добрый день!
В вашем случае порядок действий такой:
-поднимаем TCP сервер для RTSP сессии на порту 554; слушаем его, отвечаем на запросы клиента по мере поступления;
минимально нужно реализовать OPTIONS, DESCRIBE, SETUP, PLAY, TEARDOWN;
-поднимаем UDP соединение для RTP потока mjpeg-ов (на каком порту договариваемся с клиентом на этапе SETUP); пример SDP описания (для этапа DESCRIBE):

s=RTSP/RTP stream from MyServer\r\n\
i=N/A\r\n\
t=0 0\r\n\
a=type:unicast\r\n\
a=control:*\r\n\
m=video 0 RTP/AVP 26\r\n\
a=control:track1\r\n\
a=cliprect:0,0,600,800\r\n

(изображение 800х600 тип mjpeg)

-поднимаем UDP соединение для RTСP соединения (на каком порту договариваемся с клиентом на этапе SETUP), дабы обмениваться с клиентом репортами;
-начинаем слать RTP пакеты с PayloadType=26, оформленные в соответствии с http://tools.ietf.org/html/rfc2435.

Неплохая статья на Хабре, сильно помогла мне: http://habrahabr.ru/post/117735/
VLC удалось уговорить показывать mjpeg поток.

А вот со звуком пока засада. Вроде бы всё просто -звук у меня не пожатый 16-разрядный PCM, тип 11, т.е.:

m=audio 0 RTP/AVP 11\r\n\
a=control:track1\r\n\
a=rtpmap:11 L16/8000/1\r\n

Оформляю RTP пакеты в соответствии с https://www.ietf.org/rfc/rfc2198.txt
VLC жрёт и не ругается, но воспроизводит вместо звука шипение. При этом в меню "Информация о кодеке" всё совпадает, с тем, что хочу передать.
Хотя если заграбить Wireshark - ом, то сборка RTP пакетов в файл и его последующее открывание в звуковом редакторе
дает хороший результат - слышу то, что отсылал.
Перечитал по кругу все касающиеся RFC уже раза 4, не помогает.
Может быть кто сталкивался, на что обратить внимание ещё?
novartis
Вот есть паблик камера
rtsp://96.10.1.168/axis-media/media.amp?videocodec=jpg&resolution=640x480
Вот прям такой адрес ввожу в vlc и он мне показывает видео.
В wireshark вижу только udp пакеты от камеры с mjpeg внутри.
Сейчас нет возможности подцепиться, но дома когда мониторил трафик - я не видел там каких либо пакетов rtsp.
Вечером еще трафик посмотрю.
Я к тому, что мне хотелось бы вообще не обрабатывать какие либо запросы от клиента. Только слать пакеты со стороны сервера и все.
ksv198
Цитата(novartis @ Apr 13 2015, 12:23) *
Вот есть паблик камера
rtsp://96.10.1.168/axis-media/media.amp?videocodec=jpg&resolution=640x480
Вот прям такой адрес ввожу в vlc и он мне показывает видео.
В wireshark вижу только udp пакеты от камеры с mjpeg внутри.
Сейчас нет возможности подцепиться, но дома когда мониторил трафик - я не видел там каких либо пакетов rtsp.

Ну как же так, вот чего мой VLC в отладочной консоли пишет:

Код
Opening connection to 96.10.1.168, port 554...
...remote connection opened
Sending request: OPTIONS rtsp://96.10.1.168/axis-media/media.amp?videocodec=jpg&
resolution=640x480 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.1.5 (LIVE555 Streaming Media v2014.05.27)

Received 143 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
CSeq: 2
Public: DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN
Date: Wed, 26 Apr 2006 17:16:28 GMT

Sending request: DESCRIBE rtsp://96.10.1.168/axis-media/media.amp?videocodec=jpg
&resolution=640x480 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.1.5 (LIVE555 Streaming Media v2014.05.27)
Accept: application/sdp

Received 74 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 400 Bad Request
CSeq: 3
Date: Wed, 26 Apr 2006 17:16:28 GMT

Opening connection to 96.10.1.168, port 80...
...remote connection opened
Requesting RTSP-over-HTTP tunneling (on port 80)

Sending request: GET /axis-media/media.amp?videocodec=jpg&resolution=640x480 HTT
P/1.1
CSeq: 1
User-Agent: LibVLC/2.1.5 (LIVE555 Streaming Media v2014.05.27)
Host: 96.10.1.168
x-sessioncookie: 9d11a52afc98d2bb30a948b
Accept: application/x-rtsp-tunnelled
Pragma: no-cache
Cache-Control: no-cache


После чего говорит, что не может открыть коннект, но это может быть из-за файерволов.
Так что вполне себе эта камера по RTSP отвечает
novartis
Цитата
rtsp://96.10.1.168/axis-media/media.amp?videocodec=jpg&resolution=640x480

rtsp://96.10.1.168/axis-media/media.amp?videocodec=jpeg&resolution=640x480 - опечатался в слове jpeg, может из-за этого не показывало видео.

Промониторил подключение к этой камере, да, действительно идет общение по RTSP протоколу. В первые разы проморгал их.
Придется возиться с rtsp. Спасибо!

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.