gstreamer让playbin能够播放rtp over udp流数据

Posted rlandj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gstreamer让playbin能够播放rtp over udp流数据相关的知识,希望对你有一定的参考价值。

最近一段时间在研究传屏低延迟传输相关的一些东西。本来想使用gstreamer来验证下rtp over udp传送h264 nal数据相关

的,结果发现竟然不能用playbin来播放rtp的数据!诚然,这也有其原因,因为rtp需要一些带外数据,这是不能简单通过流

来检查的,然而也没有手段简单传入sdp给playbin,让其正常工作。没有办法,在gstreamer-devel和https://bugzilla.gnome.org

bug管理平台上搜了一圈,有人碰到类似的问题,但是没有完整的解决方案,于是完善了rtpsrc的插件,可以支持类似下面的播放:

gst-launch-1.0 playbin uri="rtp://10.9.44.117:5000?media=video&clock-rate=90000&encoding-name=H264&payload=96&do-retransmission=true&latency-ms=50&rtp-profile=1&rtx-host=192.168.31.141&rtx-port=5006"

 这样子感觉方便了不少,直接可以通过uri 查询参数把配置信息传递给udpsrc ,构造caps参数,对,没错,新插件rtpsrc的作用

就是起一个桥梁作用,本质还是利用udpsrc和rtpbin一起能协同工作,构造后大致的pipeline类似下面这样:

// RTP receiver (example)
// receives h264 encoded RTP video on port 5000, RTCP is received on  port 5001.  
// the receiver RTCP reports are sent to port 5005
//-----------------------RtpSrc-------------
//|            .-------.      .----------. |   .---------.   .-------.   .-----------.
//| RTP        |udpsrc |      | rtpbin   | |   |h264depay|   |h264dec|   |xvimagesink|
//| port=5000  |      src->recv_rtp recv_rtp->sink     src->sink   src->sink         |
//|            ‘-------‘      |          | |   ‘---------‘   ‘-------‘   ‘-----------‘
//|                           |          | |-------------------------    
//|                           |          |     .-------.            |    
//|                           |          |     |udpsink|  RTCP      | 
//|                           |    send_rtcp->sink     | port=5005  |
//|            .-------.      |          |     ‘-------‘ sync=false |
//| RTCP       |udpsrc |      |          |               async=false|
//| port=5001  |     src->recv_rtcp      |                          |
//|            ‘-------‘      ‘----------‘                          | 
//------------------------------------------------------------------|

 

代码已经以补丁的形式,提交到了bugzilla,能不能被合并,或者什么时候被合并进主分支,我不太清楚,但是它至少是可以正常工作的,

有这方面需求的同仁,可以移步这里:https://bugzilla.gnome.org/show_bug.cgi?id=703111 ,去合并进入自己的gstreamer sdk中,

应该能使您的生活更轻松一些。

 

以上是关于gstreamer让playbin能够播放rtp over udp流数据的主要内容,如果未能解决你的问题,请参考以下文章

Gstreamer Gstreamer中通过UDP(RTP)远程播放MP3

Gstreamer 中的playback插件

gstreamer 仅播放视频

GStreamer playbin 多音轨切换是如何实现的?

C++ gstreamer函数使用总结

gstreamer开发之--- 常用element