2016-07-09 67 views
1

Ich versuche, einen H264 RTP-Stream von einem Raspberry Pi 3 mit einem Kameramodul zu einem Video-Tag zu machen.H264 RTP-Stream mit gstreamer-1.0

Verwendung des folgenden Codes zum Starten des Streamings

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 

Dann stelle ich eine einfache Webseite mit einem Video tag:

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

Das src verweist auf die folgenden SDP-Datei:

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

Wenn ich die Webseite lade passiert nichts und die js Konsole ist komplett leer. So

Ich habe versucht, den Stream mit VLC zu sehen, und bekam die folgende Fehlermeldung:

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

Ich dachte, dass es keine überhaupt UDP-Kommunikation gewesen war, also ich getestet es von einem entfernten Rechner:

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 empfangene UDP-Pakete. Also habe ich recherchiert vorwärts und fanden diese:

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

Nun ist es klar, dass ich zwei Ports eine Daten streamen und RTP Control Protocol zu etablieren. Allerdings habe ich keine Ahnung wie ich das mit gstreamer machen kann.

Am schlimmsten ist, wenn ich laufen:

gst-inspect-1.0 | grep -i rtcp 

ich nichts.

Wie kann der Videostream mit gstreamer-1.0 zu einem Video-Tag innerhalb einer Webseite mit dem RTP-Protokoll gestartet werden?

Update

Mit videotestsrc als gstreamer videosoruce und Entfernen gdppay (ungültig RTP Payload Fehler verursacht) konnte ich den Video-Stream von einem Remote-Client mit VLC und mit diesem gstreamer Code anzuzeigen :

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

Warum denkst du, dass der Browser einen RTP-Stream abspielen wird? Es gibt eine begrenzte Auswahl an Support-Formaten für HTML5-Video und H.264 über RTP gehört nicht dazu. –

Antwort

0

Zuerst müssen Sie weitere Informationen zur Verfügung zu stellen: welche Browser (Chrom versuchen, auch eine bessere Streaming-Unterstützung haben Safari gesagt wird) ..

Zum SDP Ich denke, Sie fehlen die Informationen, dass seine h264? Und ja, gdppay ist nur für interne "GStreamer only" -Streaming (gdp bedeutet "GStreamer Data Protocol", die niemand sonst versteht :)).

Wenn Sie wirklich möchten, dass GStreamer RTSP streamt, können Sie gstreamer rtsp server implementation verwenden - dies ist in separaten Repo und ist in einigen Paketen in Ubuntu zum Beispiel enthalten.

Wenn du nur rtp willst, machst du es richtig - wie du siehst funktioniert das zum Beispiel mit vlc .. aber was lässt dich denken, dass der sdp in HTML5 funktioniert (ich frage nur, dass ich nicht auf dem neuesten Stand bin) Infos dazu)

Sie können dies auch mit netcat testen - es ist gut für diese Art von Debugging. können Sie fälschen rtp-Client auf diese Weise:

nc -u -l 5000 

, die den Verkehr aus Dump wird.

Ich las here, dass es Probleme mit RTP/RTSP in HTML5, aber wer weiß, vielleicht jetzt ist es schon arbeiten ..

Sie können HLS versuchen - die in der Regel für das Streaming verwendet wird, und hat viel bessere Unterstützung int GStreamer in diesen Tagen 1.6 und weitere Versionen .. (Hinweis: Verwenden Sie hlssink).

Hier haben Sie einige js für die Verarbeitung von HLS: https://github.com/dailymotion/hls.js

Sie können auch ogg versuchen/Vorbis/Theora und solche Sachen (klingt verrückt, aber man kann ihm einen Schuss geben, ich habe irgendwo gelesen, dass seine geeignet für Streaming) ..