首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gstreamer-1.0的H264 RTP流

gstreamer-1.0的H264 RTP流
EN

Stack Overflow用户
提问于 2016-07-09 23:56:01
回答 1查看 4.3K关注 0票数 2

我尝试从一个带有相机模块的Raspberry 3到一个视频标签生成一个H264 RTP流。

使用以下代码启动流

代码语言:javascript
复制
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

然后,我提供了一个带有视频标签的简单网页:

代码语言:javascript
复制
<video id="videoTag" src="h264.sdp" autoplay>
        <p class="warning">Your browser does not support the video tag.</p>
</video>

src引用以下SDP文件:

代码语言:javascript
复制
v=0
m=video 5000 RTP/AVP 96
c=IN IP4 192.168.0.51
a=rtpmap:96 H264/90000

当我加载网页时,什么都不会发生,js控制台完全是空的。

因此,我尝试使用VLC查看流,并得到以下错误:

代码语言:javascript
复制
[00007efd80c03ea8] es demux error: cannot peek
[00007efd80c03ea8] es demux error: cannot peek
[00007efd80c03ea8] live555 demux error: no data received in 10s, aborting

我认为根本没有UDP通信,所以我在远程计算机上测试了它:

代码语言:javascript
复制
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/

现在很明显,我需要两个端口,一个来流数据,并建立RTP控制协议。但是,我不知道如何使用gstreamer来实现它。

最糟糕的是当我跑的时候:

代码语言:javascript
复制
gst-inspect-1.0 | grep -i rtcp

我什么也得不到。

如何使用gstreamer-1.0启动视频流到使用RTP协议的网页内的视频标记?

更新

使用视频this作为gstreamer视频caused并删除gdppay (它导致无效的RTP有效负载错误),我能够使用VLC和gstreamer代码从远程客户端查看视频流:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2016-07-11 07:30:27

首先,您需要提供更多的信息:哪个浏览器(尝试chrome,也可以说safari有更好的流支持)。

对于SDP,我认为您错过了它的h264的信息吗?是的,gdppay仅适用于内部"GStreamer专用“流(gdp意味着"GStreamer数据协议”,其他人没有人理解:)。

如果您真的希望GStreamer流RTSP,您可以使用gstreamer rtsp服务器实现 -这是在单独的回购,并被纳入一些包在Ubuntu中,例如。

如果您只想要rtp,那么您正在正确地执行它--正如您所看到的,这种方法适用于例如vlc。但是,是什么使您认为sdp将在HTML5中工作(我只是问我没有关于这方面的最新信息)?

您也可以用netcat来测试它--这对于这种调试是很好的。您可以这样伪造rtp客户端:

代码语言:javascript
复制
nc -u -l 5000 

这会把交通倒掉。

我读过这里,HTML5中的rtp/rtsp有问题,但是谁知道现在它可能已经起作用了。

您可以尝试hls -它通常用于流,并有更好的支持int GStreamer现在1.6和进一步的版本..。(提示:使用hlssink)。

这里有一些js用于处理hls:https://github.com/dailymotion/hls.js

你也可以尝试ogg/vorbis/theora之类的东西(听起来很疯狂,但你可以试一试,我在某个地方读到它适合流媒体)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38287334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档