webrtc代码走读四(rtp包格式)
一、rtp包头格式
V:版本号,必须为2
P:填充位
X:扩展位,标志是否存在扩展
CC:CSRC个数
M:Mark标志位,标志是否是一帧的结束,音频帧几乎每个包都是一个完整的帧,所以M一般情况都等于1,视频包因为一帧比较大,会被分为几个包发送,最后一个包标志需要Mark一下。
sequence number:包序号,发送端指定一个起始序号(如果不指定则随机一个),然后每个包的序号依次递增;如果存在RTX,重发是此序号是rtx的序号。
Timestamp:时间戳,如果一个视频帧被分为几个包,则这个帧对应的几个包的时间戳是一样的;发送端可以指定一个起始时间戳。
Timestamp_offset_(如果不指定则随机一个),然后每个帧的时间戳等于起始时间戳加上采集时间戳timestamp_offset_ + capture_timestamp,详情可以看RTPSender::SendOutgoingData的实现
SSRC:同步源的唯一标识,每一个源(音频或者视频,文件)都必须要有一个唯一的标识码,用于区分不同的流。
CSRC:贡献源,列举此SSRC的资源是由多少个其他的资源(其他资源的SSRC)混合而来的。例如MCU混音之后就需要修改这个;最多只能表示15源。
如果存在RTP扩展则标志位X必须置为1,除了标准扩展外,WebRTC还有自己的扩展,所以服务端如果使用标准rtp解析库需要添加一下WebRTC的RTP扩展。扩展相关的文件有rtp_header_extensions.h和Rtp_header_extensions.cc。
一、rtp扩展头定义
RTPExtensionType
二、协议介绍
还没有理清各个扩展类型,如下三个扩展类型,找到对应的RFC协议,其余感觉是私有定义的。
kRtpExtensionTransmissionTimeOffset
含义:一个包相对于采集时间的偏移的滴答数
协议:RFC 5450 - Transmission Time Offsets in RTP Streams
- kRtpExtensionAudioLevel的rfc协议
含义:一帧音频数据的分贝值
协议:https://tools.ietf.org/html/rfc6465
代码实现函数:RTPSenderAudio::SendAudio
- kRtpExtensionTransportSequenceNumber的rfc协议】
- 含义:扩展序号,不管是第一次发送还是重发的包,此需要都会递增
draft-holmer-rmcat-transport-wide-cc-extensions-01
代码实现函数: RTPSender::UpdateTransportSequenceNumber
- kRtpExtensionAbsoluteSendTime
- 含义:一个包的绝对发送时间。
参数:RTPSender::SendToNetwork
视频帧方向:
- kRtpExtensionPlayoutDelay
- 含义:已经播放时长
RtpExtensionVideoContentType
含义:视频源是否是屏幕资源。
- kRtpExtensionVideoTiming
含义:记录视频编码开始,编码结束,打包完成,平滑发送等时间戳,不过这几个时间戳都是相对时间。
三、视频净荷格式
264 RTP打包格式:
webrtc 代码走读三(h264 rtp打包)_EveryDayOneHour的博客-CSDN博客
webrtc代码走读四(rtp包格式)相关推荐
- webrtc代码走读七(rtp包格式)
一.rtp包头格式 V:版本号,必须为2 P:填充位 X:扩展位,标志是否存在扩展 CC:CSRC个数 M:Mark标志位,标志是否是一帧的结束,音频帧几乎每个包都是一个完整的帧,所以M一般情况都等于 ...
- webrtc代码走读五(JitterBuffer)
一. 什么是JitterBuffer Jitter Buffer也叫做抖动缓冲区,它是实时音视频里面的一个重要模块,它对数据包丢失.乱序.延迟到达等情况进行处理,平滑的向解码模块输出数据包/帧,抵抗各 ...
- webrtc代码走读二十一(InterArrival::ComputeDeltas)
一.函数调用栈 internal::Call::DeliverRtcp ->RtpVideoSender::DeliverRtcp ->ModuleRtpRtcpImpl2::Incomi ...
- webrtc 代码走读六
一.呼叫流程图 webrtc的ICE符合rfc5245标准协议.该协议的链接为:https://tools.ietf.org/html/rfc5245 每个终端都有一系列传输地址(包括传输协议.IP地 ...
- webrtc代码走读:发送端NACK和FEC的packet压到队列走读
一.NACK发送端packet data和FEC的packet data push到packet队列函数调用栈 PacingController::ProcessPackets() ->Pack ...
- FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法
From: http://www.cnweblog.com/fly2700/archive/2012/02/23/319718.html RFC3984是H.264的baseline码流在RTP方式下 ...
- 用于MPEG-4视听流的RTP负载格式
MPEG-4的rtp协议封装 英文原版 RFC 3016:http://www.rfc-editor.org/rfc/rfc3016.txt 中文翻译: 组织:中国互动出版网(http://www.c ...
- 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...
贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学GUIZHOU UN ...
- H.264 视频的 RTP 载荷格式
本文是 IETF 的规范 RFC 6184 的一部分的翻译,该规范 地址.翻译这份文档,主要是为了编写一段用 RTP 传输 H.264 流的代码.本想在网上找一些文章完成任务了事的,但由于个人之前音视 ...
最新文章
- STL_set集合容器+map映照容器
- recurrence relation in parenthesis placing problem
- 如何修改数据库表或存储过程的所有者
- 池化层:最大池化MaxPool、平均池化AvgPool、自适应池化AdaptiveMaxPool区别--基于pytorch框架
- oracle基表恢复,查找V$PARAMETER 基表 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
- 4.聚合aggregate
- 设置环境变量ANDROID_SDK_HOME有什么用?
- 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
- Linux无root权限安装cuda9.1和cudnn7.05以及编译框架时无lcuda.so的问题
- Atitit 项目语言的选择 java c#.net php??
- 用正则表达式清除各类符号
- IDC运维工程师的基本要求
- 计算机无法访问网络位置,不能访问网络位置,详细教您怎么解决
- VBA快速转换数据格式,将CBOT结算价历史数据导入数据库(图文)
- C盘扩大 解决办法
- 【CSharp】延迟初始化(Lazy)
- C语言中静态变量的概念和用法
- 深度学习入门及深度学习学习路线
- addb %al,%al
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.2 AbstractFactory
热门文章
- 《匆匆那年》的你,还记得吗?数学中的那些有(hui)趣(se)的定理(2)——蝴蝶定理
- java中使用阿里云实现短信推送
- 时间超限怎么办:手把手教你打表法
- 华为云桌面为建筑行业BIM落地实施提供有力支撑
- 【论文阅读笔记 KDD2021】《Relational Message Passing for Knowledge Graph Completion》
- 5G NAS消息格式与元素
- WIN10系统如何关闭用户账户控制
- 贝肯斯坦界(Bekenstein bound)
- 5G时代,将为无人机通讯传输带来哪些新变化?
- [绍棠] freemarker声明变量