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流数据的更多相关文章
- 课堂/会议同屏教学解决方案之RTSP/RTP over UDP组播解决方案
问题 在之前的博客<EasyIPCamera实现Windows PC桌面.安卓Android桌面同屏直播,助力无纸化会议系统>我们描述了一套基于EasyIPCamera的同屏功能,但是这个 ...
- (转)VLC播放RTP打包发送的.264文件
VLC播放RTP打包发送的.264文件 1,要有一个发送RTP包的264文件的服务器; 具体代码如下: rtp.h #include <WinSock2.h> #pragma commen ...
- 多媒体开发之rtp 打包发流---同网段其他机子sdp 播放不了
(1) (2) (3) -------------author:pkf ------------------time:2015-1-6 后面发现是connection 的server 地址是指定的 导 ...
- ffmpeg rtp rtmp udp 推流命令
推组播 组播地址指的范围是224.0.0.0—239.255.255.255 ffmpeg -re -i chunwan.h264 -vcodec mpeg2video -f mpeg2video u ...
- 通过 UDP 发送数据的简单范例
package j2se.core.net.udp; import java.io.IOException;import java.net.DatagramPacket;import java.net ...
- DirectSound播放PCM(可播放实时采集的音频数据)
前言 该篇整理的原始来源为http://blog.csdn.net/leixiaohua1020/article/details/40540147.非常感谢该博主的无私奉献,写了不少关于不同多媒体库的 ...
- Kcptun 是一个非常简单和快速的,基于KCP 协议的UDP 隧道,它可以将TCP 流转换为KCP+UDP 流
本博客曾经发布了通过 Finalspeed 加速 Shadowsocks 的教程,大家普遍反映能达到一个非常不错的速度.Finalspeed 虽好,就是内存占用稍高,不适合服务器内存本来就小的用户:而 ...
- 项目总结22:Java UDP Socket数据的发送和接收
项目总结22:Java UDP Socket数据的发送和接收 1-先上demo 客户端(发送数据) package com.hs.pretest.udp; import java.io.IOExcep ...
- Java使用UDP发送数据到InfluxDB
最近在做压测引擎相关的开发,需要将聚合数据发送到InfluxDB保存以便实时分析和控制QPS. 下面介绍对InfluxDB的使用. 什么是InfluxDB InfluxDB是一款用Go语言编写的开源分 ...
随机推荐
- 网页JavaScript
用法. JavaScript一般用于 head , body , </html> 之后. 格式<script language="javascript"> ...
- 网页调用QQ聊天
把下面的复制到地址栏里,QQ号为你要聊天的人的qq号,如果你没有登录你自己的qq,首先会调出qq登录窗体. tencent://message/?uin=QQ号
- 如何在sqlserver建立新用户并关联相应的数据库
我们经常需要在数据库上建立有权限的用户,该用户只能去操作某个特定的数据库(比如该用户只能去读,去写等等),那么我们应该怎么在sqlserver上设置呢?下面的步骤有点长,只要一步一步跟着设置就行 方法 ...
- 怎么用C#获取Scenario step在specflow里
公司最近在用specflow 这种BDD的模式,但PM还是想把case再存进TestManager里面一份儿一遍后期集成TestManager 自动runcase用.所以我们需要获取每个scenari ...
- winform托盘时,要运行一个实例,解决办法
需求:winform应用程序,当隐藏到托盘时,再次运行exe程序,让其只运行一个实例,并且把窗口从托盘中显示出来 应用程序名可以通过下面代码,获取到: Process current = Proces ...
- KM算法专题
原文:http://972169909-qq-com.iteye.com/blog/1184514 题目地址:这里. 1)求图中所有环的总长度(环的长度不唯一)的最小值.当无法得到完备匹配时说明环不存 ...
- jQuery中对未来的元素绑定事件
对未来的元素绑定事件不能用bind, 1.可以用live代替,但是要注意jquery的版本,根据官方文档,从1.7开始就不推荐live和delegate了,1.9里就去掉live了. 2.推荐用on代 ...
- 简单实用 “易忘” 的SQL 语句语法,新老皆宜
--创建数据库 create database 数据库名 on primary ( name='数据库名_data', filename='数据库储存路径', size=数据库初始大小(MB), ...
- ASP.NET MVC 4.0的Action Filter
有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你自定义创建action过滤器.Action过滤器是自定义的Attributes,用来 ...
- C 语言字符 和字符串输出
int main(void){ char ch; char str[80]; printf("Input a string: "); //先输入字符串 gets(str);/ ...