2016-07-09 18 views
1

Я пытаюсь сделать поток RTP H264 с малины Pi 3 с модулем камеры на видеотег.H264 RTP поток с gstreamer-1.0

Используя следующий код для запуска потока

raspivid -t 0 -h 720 -w 1080 -fps 25 -hf -b 2000000 -o - | \ 

gst-launch-1.0 -v fdsrc \ 
      ! h264parse \ 
      ! rtph264pay \ 
      ! gdppay \ 
      ! udpsink host="192.168.0.11" port=5000 

Тогда я обеспечиваю простой веб-страницы с видео тэгом:

<video id="videoTag" src="h264.sdp" autoplay> 
     <p class="warning">Your browser does not support the video tag.</p> 
</video> 

СРК ссылается следующий SDP файл:

v=0 
m=video 5000 RTP/AVP 96 
c=IN IP4 192.168.0.51 
a=rtpmap:96 H264/90000 

Когда я загружаю веб-страницу, ничего не происходит, и консоль js полностью пуста.

Так что я попытался просмотреть поток с VLC, и получил следующее сообщение об ошибке:

[00007efd80c03ea8] es demux error: cannot peek 
[00007efd80c03ea8] es demux error: cannot peek 
[00007efd80c03ea8] live555 demux error: no data received in 10s, aborting 

Я думал, что там не было UDP связи на всех, поэтому я проверил это с удаленного компьютера:

gst-launch-1.0 udpsrc port=5000 \ 
       caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" \ 
       ! fakesink dump=true 

ans получил UDP-пакеты. Поэтому я исследовал вперед и нашел это:

https://cardinalpeak.com/blog/the-many-ways-to-stream-video-using-rtp-and-rtsp/

Теперь ясно, что мне нужно 2 порта один для потоковой передачи данных и установить протокол управления RTP. Однако я не знаю, как это сделать с помощью gstreamer.

Хуже всего, когда я бегу:

gst-inspect-1.0 | grep -i rtcp 

я ничего не получаю.

Как начать видеопоток с gstreamer-1.0 на видеотег внутри веб-страницы с использованием протокола RTP?

обновление

Использование videotestsrc как GStreamer videosoruce и удаление gdppay (это вызвало недопустимую ошибку полезной нагрузки RTP), я был в состоянии просматривать видеопоток от удаленного клиента с VLC и с этим GStreamer кодом :

gst-launch-1.0 udpsrc port=5000 \ 
       caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" \ 
       ! rtph264depay \ 
       ! avdec_h264 \ 
       ! autovideosink 
+0

Почему, по вашему мнению, браузер будет проигрывать RTP-поток? Существует ограниченный диапазон форматов поддержки для видео HTML5, а H.264 поверх RTP - не один из них. –

ответ

0

Прежде всего, необходимо предоставить больше информации: какой браузер (попробуйте хром, а также сафари, как говорят, лучшая поддержка потокового) ..

К SDP Я думаю, вам не хватает информации о том, что его h264? И да gdppay предназначен только для внутренней потоковой передачи «GStreamer» (gdp означает «Протокол данных GStreamer», который никто не понимает :)).

Если вы действительно хотите, чтобы GStreamer транслировал RTSP, вы можете использовать gstreamer rtsp server implementation - это отдельное репо и, например, включено в некоторые пакеты в Ubuntu.

Если вы хотите просто rtp, вы делаете это правильно - как видите, этот подход работает, например, с помощью vlc .. но что заставляет вас думать, что sdp будет работать в HTML5 (я просто прошу, чтобы у меня не было актуальных информация об этом)?

Вы можете проверить это также с помощью netcat - это прекрасно подходит для такого рода отладки. вы можете подделать РТП клиент таким образом:

nc -u -l 5000 

Какой будет сбрасывать трафик из.

Я прочитал here, что есть проблемы с RTP/RTSP в HTML5, но кто знает, может быть, сейчас он уже работает ..

Вы можете попробовать HLS - который обычно используется для потоковой передачи и имеет гораздо лучшую поддержку Int GStreamer в эти дни 1.6 и дальнейшие версии .. (подсказка: используйте hlssink).

Здесь у вас есть некоторые JS для обработки ЗОЖ: https://github.com/dailymotion/hls.js

Вы также можете попробовать OGG/Vorbis/Theora и такие вещи (звучит странно, но вы можете дать ему шанс, я где-то читал, что его подходит для потоковое).