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 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...
随机推荐
- ES搜索社区
好问题 1.比如我要索引的条目为“33分钟侦探”,我想在用户输入“3”.“33”.“三三”.“三十三”.“三十三分钟”等的情况下都命中该条目,请问有没有什么好的方式实现? PS:使用的是ansj分词器 ...
- BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)
BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...
- go defer笔记
1.函数中return xxx非原子指令 2.函数返回过程:先给返回值赋值:再调用defer:最后回到调用函数中 即:返回值 = xxx; defer; return; 3.多个defer调用顺序类似 ...
- 最近在学习python,做了一道人机大战的题目,分享一下,虽然可能有些麻烦,但是每个人思维是不同的。
#题目如下:1:人和机器进行猜拳游戏写成一个类,首先选择角色:1 曹操 2张飞 3 刘备,然后选择的角色进行猜拳:1剪刀 2石头 3布 玩家输入一个1-3的数字 : 1 import random c ...
- LINUX配置Django
django项目: 依赖包[root@web01 ~]# yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-d ...
- 生成缓存文件cache file
生成缓存文件cache file class Test{ public function index(){ $arrConfig = Array( 'name' => 'daicr', 'age ...
- java-----任意进制间的转换
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Sy ...
- Vue(十九)Vuex
Vuex 1. 简介 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 简单来说,用来集中管 ...
- springboot上传文件并检查图片大小与格式
@PostMapping(value = "/uploadDriverImage") public JsonResVo uploadDriverImage(@RequestPara ...
- 前端工程化系列[03]-Grunt构建工具的运转机制
在前端工程化系列[02]-Grunt构建工具的基本使用这篇文章中,已经对Grunt做了简单的介绍,此外,我们还知道了该如何来安装Grunt环境,以及使用一些常见的插件了,这篇文章主要介绍Grunt的核 ...