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 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...
随机推荐
- 电脑用bat脚本给手机批量自动安装apk文件 autoInstall.bat
------创建这个文件autoInstall.bat 内容如下: @ECHO off @REM 将adb.exe添加到PATH中ECHO 初始化…@SET PATH=%PATH%;%CD%\Adb@ ...
- Linux下载软件
.yum yum install tree yum install telnet 直接安装与更新 .查询软件是否装上 rpm -qa tree telnet .查询软件包的内容 rpm -ql tre ...
- [HDU1693]Eat the Trees
Description: 给出n*m的方格,有些格子不能铺线,其它格子必须铺,可以形成多个闭合回路.问有多少种铺法? Hint: \(n,m<=12\) Solution: 与原来单回路那题转移 ...
- Win7系统 mstsc远程桌面连接失败,提示“您的凭据不工作” 或者“无法连接到远程计算机”的问题。
WIN7 mstsc远程桌面连接其他电脑,提示"您的凭据不工作xxxxxxx"的问题. 或者提示: 本机通过mstsc远程桌面连接服务器,我们按照下面的步骤来逐一排查: 本机配置以 ...
- Ubuntu下无法输入中文问题解决
首先是要安装了中文输入法,下面以搜狗为例. 从system settings 进入language support ,在keyboard input method system 中是看不到自己安装的搜 ...
- Python-copy()与deepcopy()区别
http://blog.csdn.net/qq_32907349/article/details/52190796 学习过程中发现copy()和deepcopy()这对好基友实在是有点过分,搞的博主就 ...
- 关于git的使用记录总结
1.解决Windows下git换行符报警问题 git config --global core.autocrlf false 2.撤销add的文件退出暂存区 git reset --mixed 3.g ...
- echarts相关的可视化数据
echarts使用步骤: 1)设置一个容器,该容器用来放图形,一定要给容器设置高度: 2)初始化echarts实例,语法:var aa = echarts.init(DOM); 例如: echar ...
- vmware提示请卸载干净再重新安装的解决办法
结论:删掉 HKEY_LOCAL_MACHINE\\SOFTWARE\Wow6432Node\VMware, Inc. 就可以了. ----------------------------- ...
- elastic-job详解(二):作业的调度
JobScheduler是elastic-job作业调度的关键类,也是起始类,在包com.dangdang.ddframe.job.lite.api下.调度任务的执行需要包含两大步骤:任务的配置和任务 ...