09|RTP & RTCP:如何正确地将视频装进RTP中?
李江
你好,我是李江。
在前面的课程中,我们详细地讲述了视频编码的原理以及预测编码和变换编码的知识。通过这些我们了解了视频编码的基本原理和步骤。同时,我们还用了一节课的时间深入探讨了 H264 的码流结构,相信你已经清楚了 H264 码流是什么样的,以及如何从码流中分离出一帧帧图像数据,并学会了如何判断这些帧的类型。
那么从这节课开始呢,我们就要进入视频传输和网络对抗部分了。我们会在视频编码码流的基础上,讲讲如何将码流打包成一个个数据包发送到网络上,并进一步讨论如何避免在发送的过程中引起网络拥塞,从而保证视频的流畅性。同时,我们会进一步在后面的课程中讲解如何在网络不断变化的时候做好视频码控算法,如何防止视频出现花屏,以及如何尽量减少视频卡顿等非常有难度的实际工程问题。
这些问题是视频开发过程中经常会遇到且迫切需要解决的重要问题。而解决这些问题的基础就是需要熟悉 RTP 和 RTCP 协议,也就是我们这节课的重点。
接下来我们会分别从 RTP 协议、RTCP 协议和 H264 的 RTP 打包方法这三个方面来展开这节课。首先让我们一起来认识一下 RTP 协议。
RTP 协议
RTP(Real-time Transport Protocol)协议,全称是实时传输协议。它主要用于音视频数据的传输。那它的作用是什么呢?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
RTP & RTCP协议在音视频数据传输中扮演着重要角色。RTP负责打包编码后的音视频数据进行传输,而RTCP则辅助RTP实现丢包重传和带宽预测等功能。RTCP报文包括发送端报告(SR)、接收端报告(RR)、RTP反馈报告(RTPFB)等,用于传递RTP包的传输统计信息。在实际工程中,H264码流可以通过单NALU封包方式、组合封包方式、分片封包方式进行RTP打包。这些方式根据NALU大小和RTP包大小的关系进行选择,允许混合使用。文章还强调了RTP & RTCP协议以及H264 RTP打包的基础知识和实际应用指导,为读者提供了全面的了解和实践指导。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《攻克视频技术》,新⼈⾸单¥59
《攻克视频技术》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(14)
- 最新
- 精选
- 狂奔的带刀蜗牛不超过1500主要是因为Udp协议的MTU为1500,超过了会导致Udp分片传输,而分片的缺点是丢了一个片,整包数据就废弃了
作者回复: 回答的很好
2021-12-10511 - 我有一条鱼想问一下RTCP协议如果也是基于UDP协议的话,怎么保证统计信息是正确的呢?所以RTCP是不是应该具体TCP协议?
作者回复: 像丢包率这种信息稍微丢一些问题不大,像NACK这种丢了有可能会造成重传慢了,是会有些影响。但一般只要不是非常大的丢包就没太大问题。一般不需要用TCP来传。
2022-01-2423 - 木希江哥,您这课程介绍的视频技术原理性都很详细,可以很好的理解视频原理性的东西,后面是否会带上部分代码逻辑的实现,原理跟实现还是有很长的路。
作者回复: 出发点是我觉得代码很多没有注释你很难看懂所以我想做一门课程让大家懂基本原理,之后看代码就会容易一些。这些原理在webrtc和ffmpeg 里面都有实现,只是光看代码很难看懂。我在想以后有时间我是不是可以直接讲讲里面的代码。可是最近太忙了。😭
2021-12-1063 - Geek_b8aa7brtp和rtcp是基于udp的,上面也提到实时场景一般用udp,但为什么rtmp是基于tcp的,我看很多音视频传输是基于rtmp的,不是说tcp会延时嘛?
作者回复: 因为使用udp的话,你就需要自己实现拥塞控制等QOS的策略了。这个东西是很难的。rtmp用在直播领域,对实时性要求没有rtc高。
2021-12-282 - louiertp 打包音频数据是怎么打包的呢,rtp 协议中如何和视频区分,两者一起传输的时候是怎么传输呢
作者回复: 通过payload type区分
2023-07-26归属地:北京 - weekend好像没有讲RTMP相关的,RTMP的区别是什么
作者回复: rtmp其实就是使用的flv的封装,并使用tcp传输。
2022-03-14 - Chris Zou老师,结合jitterbuffer那章来看,对于FU-A封包,一个NALU单元对应一个slice,一帧数据是有可能对应多个slice,也就是NALUT单元,每个slice都会有一次S起始位和E终止位?
作者回复: 是的
2022-01-23 - 王夏望请问对于不同帧,rtp包中的timestamp的差值是固定的还是变化的?
作者回复: 实时采集的话不一定是固定的。比如有时帧率是变化的
2021-12-122 - 晓龙记录下从视频从编码到传输分别经历了哪些格式: 一段视频 ->由多个Frame组成(I,B,P) 一个Frame -> 分为多个Slice 一个Slice -> 由多个MB组成 编码: Slice编码 -> MB分析 -> 熵编码 ->封装NALU 传输: NALU -> 由一个或多个RTP包组装传输2022-02-142
- accessory请问,RTP 头中的 16 位 sequence number 起始值为什么是随机的? 2 字节的能表示的范围是 [0, 2^16-1],超出这个范围后 sequence number 怎么处理,是从 0 重新开始,还是换一个随机数?2022-04-2911
收起评论