攻克视频技术
李江
声网 Agora 视频专家
7494 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 19 讲
攻克视频技术
15
15
1.0x
00:00/00:00
登录|注册

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
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • 狂奔的带刀蜗牛
    不超过1500主要是因为Udp协议的MTU为1500,超过了会导致Udp分片传输,而分片的缺点是丢了一个片,整包数据就废弃了

    作者回复: 回答的很好

    2021-12-10
    5
    11
  • 我有一条鱼
    想问一下RTCP协议如果也是基于UDP协议的话,怎么保证统计信息是正确的呢?所以RTCP是不是应该具体TCP协议?

    作者回复: 像丢包率这种信息稍微丢一些问题不大,像NACK这种丢了有可能会造成重传慢了,是会有些影响。但一般只要不是非常大的丢包就没太大问题。一般不需要用TCP来传。

    2022-01-24
    2
    3
  • 木希
    江哥,您这课程介绍的视频技术原理性都很详细,可以很好的理解视频原理性的东西,后面是否会带上部分代码逻辑的实现,原理跟实现还是有很长的路。

    作者回复: 出发点是我觉得代码很多没有注释你很难看懂所以我想做一门课程让大家懂基本原理,之后看代码就会容易一些。这些原理在webrtc和ffmpeg 里面都有实现,只是光看代码很难看懂。我在想以后有时间我是不是可以直接讲讲里面的代码。可是最近太忙了。😭

    2021-12-10
    6
    3
  • Geek_b8aa7b
    rtp和rtcp是基于udp的,上面也提到实时场景一般用udp,但为什么rtmp是基于tcp的,我看很多音视频传输是基于rtmp的,不是说tcp会延时嘛?

    作者回复: 因为使用udp的话,你就需要自己实现拥塞控制等QOS的策略了。这个东西是很难的。rtmp用在直播领域,对实时性要求没有rtc高。

    2021-12-28
    2
  • louie
    rtp 打包音频数据是怎么打包的呢,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-12
    2
  • 晓龙
    记录下从视频从编码到传输分别经历了哪些格式: 一段视频 ->由多个Frame组成(I,B,P) 一个Frame -> 分为多个Slice 一个Slice -> 由多个MB组成 编码: Slice编码 -> MB分析 -> 熵编码 ->封装NALU 传输: NALU -> 由一个或多个RTP包组装传输
    2022-02-14
    2
  • accessory
    请问,RTP 头中的 16 位 sequence number 起始值为什么是随机的? 2 字节的能表示的范围是 [0, 2^16-1],超出这个范围后 sequence number 怎么处理,是从 0 重新开始,还是换一个随机数?
    2022-04-29
    1
    1
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部