RTP推流及验证
[时间:2018-07] [状态:Open]
[关键词:rtp,rtcp, ffmpeg,ffplay,sdp,h264,mp2,ts,推流]
近期在学习有关RTP/RTCP的资料,发现看了很多资料,还是不如搭建一个RTP推流端和接收端。这样可以加深些理解,
从我目前的获得信息来看,RTP是位于传输层的协议,其可以基于UDP、TCP等协议传输,通常使用较多的是UDP,主要为了降低延时等。
RTP支持的负载格式一般是分开的,也就是说音频和视频是通过独立的RTP协议传输的。RTP支持H264、HEVC、AAC等常见音视频的格式(更详细的RTP支持格式可参考RTP profile),其广泛应用于视频会议及IP电话中。
为了直观点,我们还是直接用FFmpeg模拟一个RTP推流端,然后用ffplay作为客户端播放之。
先说明下我用的FFmpeg版本是v4.0,我们全程将仅使用ffmpeg和ffplay两个可执行程序。
RTP推送h264流及验证方法
ffmpeg中的RTP muxer仅支持一个流作为输入,比如推送h264流可以使用下面命令:
./ffmpeg -re -stream_loop -1 -i zhen_h264+mp2.ts -vcodec copy -an -f rtp rtp://10.10.50.90:9999 > h264.sdp
可使用下面命令验证推流情况:
./ffplay -protocol_whitelist "file,rtp,udp" h264.sdp
实际上ffmpeg内部RTP默认使用UDP协议发送数据,所以可以指定单播或者组播地址。
上述命令生成的sdp文件内容如下:(对于RTP协议,sdp作为重要的流描述信息,是必须存在的)
SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 10.10.50.90
t=0 0
a=tool:libavformat 58.11.100
m=video 9999 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z01AHpZWBaHpKEAAAPpAAB1MIQ==,aO48gAA=; profile-level-id=4D401E
这里解释下上述参数的意义:
-re
该参数表示按照实际帧率发送,否则按照最快速度发送数据(视具体主机性能而定)-stream_loop -1
表示循环播放,这里的是数字-1(不是字母L),本地文件串流结束后直接从头开始-vcodec copy
/-acodec copy
表示复制视频或者音频,不做转码-vn
/-an
表示禁用视频或音频```````
RTP推送mp2流及验证方法
推送音频流命令如下:
./ffmpeg -re -stream_loop -1 -i zhen_h264+mp2.ts -acodec copy -vn -f rtp rtp://10.10.50.90:9999 > mp2.sdp
可使用下面命令验证推流情况:
./ffplay -protocol_whitelist "file,rtp,udp" mp2.sdp
所生成的sdp文件格式如下:
SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 10.10.50.90
t=0 0
a=tool:libavformat 58.11.100
m=audio 9999 RTP/AVP 14
b=AS:128
RTP推送mpegts流及验证方法
参考了下wiki及ffmpeg源码发现,还有一个rtp_mpegts的muxer,可以支持推送mpeg-ts流(这也是我能找到的RTP唯一支持的容器格式)。
验证下命令如下,首先推流端:
./ffmpeg -re -stream_loop -1 -i zhen_h264+mp2.ts -vcodec copy -acodec copy -f rtp_mpegts rtp://127.0.0.1:9999
接收端就简单了,给个IP地址和端口就可以播放了:
./ffplay rtp://127.0.0.1:9999
小结
从上面三个实例可以看出,正常接收rtp需要一个sdp后缀的文件作为描述信息,否则客户端无法获知音频或视频信息。所以要学习并理解RTP协议,除了协议本分,还包括其负载的分包和sdp文件格式。
参考资料
RTP推流及验证的更多相关文章
- ffmpeg应用笔记
官网 http://ffmpeg.org/ 应用手册 http://ffmpeg.org/documentation.html 雷霄骅专栏 https://blog.csdn.net/leixiaoh ...
- EasyPusher/EasyDarwin支持H.265 RTSP/RTP直播推流与分发播放
前言描述 随着大屏时代和高清时代的到来,人们已经不再满足于VGA.CIF这种小分辨率了,取而代之的是720P.1080P.4K级的视频传输,虽然我们国家的基础带宽一直在上升,但普遍情况下,传输高清视频 ...
- rtp rtcp rtsp sip协议了解方法
vlc有个串流功能 可以流各种推流 方便拉取. 能够方便抓包查看协议. 1.菜单媒体->流 打开对话框 分别可以选择本地文件 关盘文件 网络流 捕获设备做流化处理. 2. 选择 串流->新 ...
- Centos7 搭建Nginx+rtmp+hls直播推流服务器
1 准备工具 使用yum安装git [root~]# yum -y install git 下载nginx-rtmp-module,官方github地址 // 通过git clone 的方式下载到服务 ...
- node.js实现国标GB28181流媒体点播(即实时预览)服务解决方案
背景 28181协议全称为GB/T28181<安全防范视频监控联网系统信息传输.交换.控制技术要求>,是由公安部科技信息化局提出,由全国安全防范报警系统标准化技术委员会(SAC/TC100 ...
- ffmpeg rtp rtmp udp 推流命令
推组播 组播地址指的范围是224.0.0.0—239.255.255.255 ffmpeg -re -i chunwan.h264 -vcodec mpeg2video -f mpeg2video u ...
- wowza拉流和推流接口备忘
拉流接口地址:https://www.wowza.com/docs/stream-management-query-examples# 推流接口地址:https://www.wowza.com/doc ...
- ffmpeg强制使用TCP方式推流到EasyDarwin开源流媒体服务器进行直播
我们的EasyDarwin目前部署在阿里云的服务器上面,运行的效果是非常好的,而且无论是以TCP方式.还是UDP的方式推送,都可以非常好地进行直播转发: 但并不是所有的用户服务器都是阿里云的形式,有很 ...
- 直播推流端弱网优化策略 | 直播 SDK 性能优化实践
弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...
随机推荐
- VeeamOne(Free Edition 9.5 )-安装与配置
---恢复内容开始--- Veeam ONE则主要用于监控平台之用,可以监控Veeam Backup & Replication的备份及同步情况,也可以监控VMware vSphere虚拟化平 ...
- 2019-1-11 SQL语句汇总——聚合函数、分组、子查询及组合查询
- [MySQL] MySQL联表查询的执行顺序优化查询
SELECT t4.orgName, t3.projectName, t3.Partner, t1.type, COUNT(DISTINCT t1.imei) AS count FROM `t_tem ...
- CF871D Paths
link 题意: n个点的无向图,若$\gcd(x,y) \neq1$则$(x,y)$有边,统计$1\sim n$构成的无向图两两点对最短路是之和是多少(两点不连通最短路记为0)?$n\leq ...
- Java笔记(五)泛型
泛型 一.基本概念和原理 泛型将接口的概念进一步延申,“泛型”的字面意思是广泛的类型. 类.接口和方法都可以应用于非常广泛的类型,代码与它们能够操作 的数据类型不再绑定到一起,同一套代码可以应用到多种 ...
- Scrapy基础(二)————Scrapy的安装和目录结构
Scrapy安装: 1,首先进入虚拟环境 2,使用国内豆瓣源进行安装,快! pip install -i https://pypi.douban.com/simple/ scrapy 3,特殊情 ...
- Tomcat安装与环境变量的配置
Tomacat的下载 去Tomcat官网下载,我使用的是apache-tomcat-7.0.78的版本. 安装 下载完成之后,我们解压缩到相应的目录.这里我解压缩到d盘下面 1.然后去配置系统的环 ...
- BZOJ2702 : 金融风暴
求出离每个点最近的关键点,然后用二维ST表回答正方形最大值. 将关键点分为上下两部分,以上为例: 从上到下依次考虑每一行,记录每一列往上最近的关键点的距离,那么最优决策具有单调性,可以分治求解. 时间 ...
- 在npm上发布一个自己的包
1.首先你要在npm上创建一个账号,这里需要输入邮箱的,注意激活邮箱否则无法publish自己的包 2.在本地创建一个文件夹,输入npm init初始化项目,这里是我使用npm init创建的pack ...
- Qt控制台例子
功能:实现通过命令行方式保存文件 #include <QCoreApplication> #include <iostream> #include <QString> ...