Перейти к содержанию
    

как засунуть mjpeg в udp?

Всем добрый день.

 

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

Не могу постигнуть, как это осуществить.

Как обернуть данные и подсунуть в кадр udp?

 

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

 

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

 

Для начала хочу все это дело реализовать на Qt. Алгоритм такой: нажал кнопочку, программа читает jpeg фото и в цикле засылает ее по udp.

На андроиде стоит IPTV, в нем хочу прописать источник: udp://@192.168.1.6:1234

здесь 192.168.1.6 и 1234 - ip-адрес и порт компа, с которого отправляются udp-пакеты.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все еще пытаюсь реализовать задачу.

Написал на 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 выдает теже ошибки, что и прежде.

Подскажите, куда копать, что я делаю не так.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стал читать про sdp.

В результате (а вдруг получится?) перед каждым rtp пакетом с самым первым фрагментом jpeg добавил udp-sdp пакет с содержимым:

Wiki: "RTSP-сообщения (например, в формате SDP) посылаются отдельно от мультимедийного потока. Для них используется специальный порт с номером 554."

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все еще пытаюсь реализовать задачу.

...

Но 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, не помогает.

Может быть кто сталкивался, на что обратить внимание ещё?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот есть паблик камера

rtsp://96.10.1.168/axis-media/media.amp?videocodec=jpg&resolution=640x480

Вот прям такой адрес ввожу в vlc и он мне показывает видео.

В wireshark вижу только udp пакеты от камеры с mjpeg внутри.

Сейчас нет возможности подцепиться, но дома когда мониторил трафик - я не видел там каких либо пакетов rtsp.

Вечером еще трафик посмотрю.

Я к тому, что мне хотелось бы вообще не обрабатывать какие либо запросы от клиента. Только слать пакеты со стороны сервера и все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот есть паблик камера

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 отвечает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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. Спасибо!

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...