RTP协议与实战

RTP协议与实战一.前言二.RTP协议三.使用jrtplib发送RTP数据包

大家好,又见面了,我是你们的朋友全栈君。

一. RTP协议

        在实时音视频通话中,我们通常使用 UDP 作为传输层协议,使用 RTP 协议包荷载音视频数据,RTP(Real-time Transport Protocol)是一种在 Internet 上传输多媒体数据的应用层协议,它通常建立在 UDP 之上(也可以建立在 TCP 上)。UDP 协议没有序号等信息,而 RTP 协议可以补充许多音视频传输必要的信息,让音视频数据到达对端后可以重新组合完整,RTP 本身只保证实时数据的传输,并不能提供可靠传输保证,也没有流量控制,拥塞控制机制,它通常与 RTCP 配合使用以提供这些服务。

        RTP 协议格式如下,红色部分为 RTP 协议可选字段,RTP 协议最小为 12 byte。

RTP协议与实战

Version:RTP 协议版本号

P:填充标识,如果该位为 1,说明该 RTP 包末尾包含了一个或多个填充字节,最后一个字节的值表示填充的字节数(包含最后一个字节本身),一般在一些需要固定块大小的加密算法中才需要填充

X:扩展标识,如果该位为 1,说明有扩展头部信息(Extension header)

CC:CSRC Count,共享媒体源个数,一般用于混音和混屏中,例如某个音频流是混合了其它音频后的数据,那么其它音频源就是该音频源的 CSRC

M:Mark 标记位,对于不同的负载类型有不同含义,例如使用 RTP 荷载 H264 码流时,可以用该位标记是否为 NALU 的最后一个包

PT:Payload Type,负载包类型,接收端可以根据该信息查找相应的解码器进行解码,Payload Type 值对应的编解码类型参考该文档

Sequence number:序列号,每个 RTP 包序号递增加一,接收端根据序列号可以判断传输是否丢包,序列号初始值是随机的

Timestamp:相对时间戳信息,反映 RTP 数据包数据采样时间,一个帧的数据可能被分成多个 RTP 包发送,同一个帧的时间戳是相同的,不同帧的时间戳是不相同的,该值初始值是随机的,单位的含义与数据采样频率有关

SSRC:媒体源的标识,不同的 SSRC 标识不同的媒体源,例如不同用户的音频就属于不同的媒体源,具有不同的 SSRC

CSRC identifiers:共享媒体源列表,表示对 RTP 包内载荷起作用的媒体源,参见 CC 解释,CSRC 最多 15 个

Profile:RTP 扩展头部有两种类型,one-byte header 和 two-byte header,当 Profile = 0xBEDE 时表示使用 one-byte header,Profile = 0x1000 时表示使用 two-byte header,扩展头部个数由 Extension header length 决定

Extension header length:表示后面的 Extension header 共有几个字节,长度以 4 字节为单位,例如 length = 3 表示 Extension header 一共占 3*4=12 个字节

Extension header:具体的扩展头部,由 ID,L,data 组成,可以是 one-byte header 或者 two-byte header 组织方式

        one-byte header  格式如下,它由 ID,L,data 三部分组成。ID 和 L 分别占 4 bit,加起来等于 one-byte,ID 表示扩展头部 ID 标记,L 表示 extension data 所占字节数 -1,例如 L = 0 时实际 data 占一个字节,由于头部需要按 4 字节对齐,因此中间补充了 padding 数据,最后一个 extension header data 占 4 字节。

RTP协议与实战

        two-byte header 格式如下,它也是由 ID, L, data 三部分组成,不同之处在于 two-byte header 中 ID,L 各占一字节,而 L 表示 extension data 所占的字节数(不同于 one-byte header 需要减一)。

RTP协议与实战

        常见的 header extension ID 类型如下,关于具体某个扩展头部的含义可以参考 RFC 或者 webrtc 文档

enum RTPExtensionType : int {
  kRtpExtensionNone,
  kRtpExtensionTransmissionTimeOffset,
  kRtpExtensionAudioLevel,
  kRtpExtensionInbandComfortNoise,
  kRtpExtensionAbsoluteSendTime,
  kRtpExtensionAbsoluteCaptureTime,
  kRtpExtensionVideoRotation,
  kRtpExtensionTransportSequenceNumber,
  kRtpExtensionTransportSequenceNumber02,
  kRtpExtensionPlayoutDelay,
  kRtpExtensionVideoContentType,
  kRtpExtensionVideoTiming,
  kRtpExtensionFrameMarking,
  kRtpExtensionRtpStreamId,
  kRtpExtensionRepairedRtpStreamId,
  kRtpExtensionMid,
  kRtpExtensionGenericFrameDescriptor00,
  kRtpExtensionGenericFrameDescriptor = kRtpExtensionGenericFrameDescriptor00,
  kRtpExtensionGenericFrameDescriptor02,
  kRtpExtensionColorSpace,
  kRtpExtensionNumberOfExtensions  // Must be the last entity in the enum.
};

        如下是 Wireshark 抓取某路流的一个 RTP 数据包。

RTP协议与实战

二. 实战

使用JRTPLIB发送/接收RTP数据包

使用RTP包荷载H264码流

RTP扩展头部Audio Level的应用(mediasoup显示当前通话Speaker)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153980.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • scope=prototype有什么作用_prototype和单例模式

    scope=prototype有什么作用_prototype和单例模式@Scope(“prototype”)//多例模式

  • model.addattribute()的作用___attribute__()

    model.addattribute()的作用___attribute__()在前台用JS写的脚本方法,除了可以直接用在前台控件的属性中,还可以在后台运用。即在后台页面加载时,调用JS方法。语法格式有两种,如下:1.第一种写法:控件ID名.Attributes.Add(“事件名称”,“JS方法”);如:一个按钮控件Button1.Attributes.Add(“onclick”,“returnconfirm(‘确认?’)”);2.另一写法…

  • RF、GBDT、XGBoost面试级整理

    RF、GBDT、XGBoost面试级整理由于本文是基于面试整理,因此不会过多的关注公式和推导,如果希望详细了解算法内容,敬请期待后文。    RF、GBDT和XGBoost都属于集成学习(EnsembleLearning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性。  根据个体学习器的生成方式,目前的集成学习方法大致分为两大类:即个体学习器之间存在强依赖关系、必须串行生成的序列化方法

  • npm install 出错read ECONNRESET

    npm install 出错read ECONNRESET项目更新出错,需要重新从git上把项目拖出来,npm安装依赖时报错readECONNRESET,从网上查到了很多方式:npmconfigsetproxy=http://自己ip:端口,依旧readECONNRESET移除proxy,依旧readECONNRESET最后将registry中的https://registry.npmjs.org/替换成了http://registry.npmjs.org/npmconfigsetregistryhttp://registry

  • 数据库系统概论第五版 课后习题答案王珊

    数据库系统概论第五版 课后习题答案王珊第1章绪论1.试述数据、数据库、数据库系统、数据库管理系统的概念。答:(l)数据(Data):描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据…

  • axurerp8授权码最新_ue注册码

    axurerp8授权码最新_ue注册码Licensee:UniversityofScienceandTechnologyofChina(CLASSROOM)Key:DTXRAnPn1P65Rt0xB4eTQ+4bF5IUF0gu0X9XBEUhM4QxY0DRFJxYEmgh4nyh7RtLLicensee:IloveyouAxureKey:UChpuxwbDW6eAIaAf9UujEFSBwN3vpEz9snHv…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号