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中,

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

时间: 2024-07-29 08:14:04

gstreamer让playbin能够播放rtp over udp流数据的相关文章

(转)VLC播放RTP打包发送的.264文件

VLC播放RTP打包发送的.264文件 1,要有一个发送RTP包的264文件的服务器; 具体代码如下: rtp.h #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #define PACKET_BUFFER_END (unsigned int)0x00000000 #define MAX_RTP_PKT_LENGTH 1400 #define DEST_IP "172.18.191.194"

多媒体开发之rtp 打包发流---同网段其他机子sdp 播放不了

(1) (2) (3) -------------author:pkf ------------------time:2015-1-6 后面发现是connection 的server 地址是指定的 导致播放不了,然后用wireshark capture了一下一大堆udp的数据出来了,也不是端口问题,和rtsp的头问题 如果是rtsp发包,包头会带一个特定帧4个字节的符号: framingHeader[0] = '$'; framingHeader[1] = streamChannelId; //

rtp、udp、tcp协议

OSI七层模型: 应用层:文件传输,电邮,文件服务等.HTTP,Telnet,DNS, FTP等协议 表示层:数据格式化,代码转换,数据加密等 会话层:解除或建立与别的接点的联系 传输层:提供端到端的接口   TCP UDP  RTP 网络层:为数据包选择路由    IP ICMP RIP 数据链路层:传输有地址的帧以及错误检测功能 物理层:以二进制数据形式在物理媒体上传输数据 TCP/IP五层协议 应用层: 传输层: 网络层: 数据链路层: 物理层: RTP协议详解: RTP协议层次: 下图是

Send H264/AAC file by RTP over UDP

1.安装一些必要的调试工具 sudo apt-get install vlcsudo apt-get install vlc-nox 2.Send H264 file by RTP over UDP https://github.com/hmgle/h264_to_rtp 原文地址:https://www.cnblogs.com/dong1/p/10259380.html

如何在IE浏览器播放RTSP或RTMP流(RTSP/RTMP OCX控件)

好多开发者一直苦恼于如何在IE浏览器环境下,构建低延迟的RTSP或RTMP播放,对于RTSP流来说,好多公司通常的做法是把RTSP转RTMP,然后分发到RTMP服务器,然后服务器转http-flv出来,浏览器直接播放http-flv流,亦或通过flash控件直接播放RTMP流,还有就是,转hls流出来,缺点是hls流延迟更大. 以上方案未尝不可,如果对播放体验和延迟要求更高,最简单的做法是直接在IE浏览器下加载activex控件,扩展了ocx控件,用于IE浏览器下的低延迟RTMP或RTSP播放.

C# 播放H264裸码流

要播放H264裸码流,可以分拆为以下三个工作: 1.解码H264裸码流获取YUV数据 2.将YUV数据转换为RGB数据填充图片 3.将获取的图片进行显示 要完成工作1,我们可以直接使用海思的解码库,由于海思的解码库是C++的动态库,要完成在C#中进行调用可以参考海思h264解码库这篇文章,介绍的很详细.但是对于该博文只介绍了一种帧解码的方法,并没有介绍真正实用的流式解码方法.自己根据解码库的参考文档写了一份C#版的流式解码算法. //初始化 // 这是解码器输出图像信息 hiH264_DEC_F

通过 UDP 发送数据的简单范例

package j2se.core.net.udp; import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetSocketAddress;import java.util.Scanner; /** * 通过 UDP 发送数据的简单范例 */public class Sender { public static void main(Str

(转)基于RTP的H264视频数据打包解包类

最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打包.解包的文档和代码.功夫不负有心人,找到不少有价值的文档和代码.参考这些资料,写了H264 RTP打包类.解包类,实现了单个NAL单元包和FU_A分片单元包.对于丢包处理,采用简单的策略:丢弃随后的所有数据包,直到收到关键帧.测试效果还不错,代码贴上来,若能为同道中人借鉴一二,足矣.两个类的使用说明如下(省略了错误处理过程): DWORD H264SSRC ; CH264_RTP_PACK pack ( H264S

DirectSound播放PCM(可播放实时采集的音频数据)

前言 该篇整理的原始来源为http://blog.csdn.net/leixiaohua1020/article/details/40540147.非常感谢该博主的无私奉献,写了不少关于不同多媒体库的博文.让我这个小白学习到不少.现在将其整理是为了收录,以备自己查看. 一.DirectSound简介 DirectSound是微软所开发DirectX的组件之一,可以在Windows 操作系统上录音,并且记录波形音效(waveform sound).目前DirectSound 是一个成熟的API ,