2016-07-09 3 views
1

카메라 모듈이있는 Raspberry Pi 3에서 H264 RTP 스트림을 비디오 태그로 만들려고합니다.H264 RTP 스트림 (gstreamer-1.0 포함)

I 비디오 태그 간단한 웹 페이지를 제공

다음
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 

스트림 시작하려면 다음 코드를 사용 :

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

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

src가 다음 SDP 파일을 참조에게

웹 페이지를로드 할 때 아무 일도 일어나지 않으며 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 

수신 한 UDP 패킷. 그래서 나는 앞으로 연구하고 이걸 발견 :

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

지금은 내가 데이터를 스트리밍하고 RTP 제어 프로토콜을 설정하는 2 개 포트를 필요 것이 분명합니다. 그러나 나는 어떻게 내가 gstreamer로 그것을 할 수 있는지 모른다.

모두의 최악의 내가 실행하면

gst-inspect-1.0 | grep -i rtcp 

내가 아무 것도 얻을 수 없습니다.

gstreamer-1.0으로 비디오 스트림을 RTP 프로토콜을 사용하여 웹 페이지의 비디오 태그에 어떻게 시작할 수 있습니까?

갱신

있는 GStreamer의 videosoruce로 videotestsrc를 사용하고 내가 VLC와 원격 클라이언트에서 비디오 스트림을 볼 수 있었다 gdppay이 (가 무효 RTP 페이로드 오류가 발생) 제거하고이 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 over RTP의 지원 형식에는 제한이 있으며 RTP는 그 중 하나가 아닙니다. –

답변

0

먼저 당신은 더 많은 정보를 제공해야합니다 브라우저를 (또한 사파리 더 나은 스트리밍 지원을 가지고 있다고, 크롬 시도) ..

SDP에서는 h264 정보가 누락 된 것 같습니다. 예 gdppay는 내부 "GStreamer 전용"스트리밍을위한 것입니다 (gdp는 "GStreamer Data Protocol"을 의미하므로 아무도 이해하지 못합니다).

GStreamer가 RTSP를 스트리밍하게하려면 gstreamer rtsp server implementation을 사용할 수 있습니다. 이것은 별도의 저장소에 있으며 예를 들어 우분투의 일부 패키지에는 포함되어 있지 않습니다.

방금 ​​rtp를 원한다면이 방법은 vlc와 같이 작동합니다. 그러나 sdp가 HTML5에서 작동 할 것이라고 생각하게 만드는 이유는 무엇입니까? (나는 단지 최신이 없다고 묻고 있습니다. 이것에 관한 정보)?

netcat을 사용하여 이것을 테스트 할 수도 있습니다. 이러한 종류의 디버깅은 정상입니다. 할 수 있습니다 가짜 RTP 클라이언트이 방법 :

nc -u -l 5000 

트래픽을 덤프합니다. 보통 스트리밍에 사용하고 더 나은 지원 INT를 가지고하는 -

나는

당신은 HLS를 시도 할 수 있습니다 ..이 HTML5에서 RTP/RTSP 문제가 있지만 누가 아마도 지금은 이미 작동하고 알고 here 읽기 GStreamer 요즘 1.6 및 추가 버전 .. (힌트 : hlssink 사용). 여기

당신은 처리 HLS에 대한 몇 가지 JS 있습니다 https://github.com/dailymotion/hls.js

또한 시도 할 수 있습니다 OGG/보비스/테오 라 (Theora)와 같은 물건 (미친 소리,하지만 당신은, 어디 선가을위한 자사에 적합한 읽을 그것에게 기회를 줄 수 스트리밍) ..

관련 문제