一、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包格式)相关推荐

  1. webrtc代码走读七(rtp包格式)

    一.rtp包头格式 V:版本号,必须为2 P:填充位 X:扩展位,标志是否存在扩展 CC:CSRC个数 M:Mark标志位,标志是否是一帧的结束,音频帧几乎每个包都是一个完整的帧,所以M一般情况都等于 ...

  2. webrtc代码走读五(JitterBuffer)

    一. 什么是JitterBuffer Jitter Buffer也叫做抖动缓冲区,它是实时音视频里面的一个重要模块,它对数据包丢失.乱序.延迟到达等情况进行处理,平滑的向解码模块输出数据包/帧,抵抗各 ...

  3. webrtc代码走读二十一(InterArrival::ComputeDeltas)

    一.函数调用栈 internal::Call::DeliverRtcp ->RtpVideoSender::DeliverRtcp ->ModuleRtpRtcpImpl2::Incomi ...

  4. webrtc 代码走读六

    一.呼叫流程图 webrtc的ICE符合rfc5245标准协议.该协议的链接为:https://tools.ietf.org/html/rfc5245 每个终端都有一系列传输地址(包括传输协议.IP地 ...

  5. webrtc代码走读:发送端NACK和FEC的packet压到队列走读

    一.NACK发送端packet data和FEC的packet data push到packet队列函数调用栈 PacingController::ProcessPackets() ->Pack ...

  6. FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法

    From: http://www.cnweblog.com/fly2700/archive/2012/02/23/319718.html RFC3984是H.264的baseline码流在RTP方式下 ...

  7. 用于MPEG-4视听流的RTP负载格式

    MPEG-4的rtp协议封装 英文原版 RFC 3016:http://www.rfc-editor.org/rfc/rfc3016.txt 中文翻译: 组织:中国互动出版网(http://www.c ...

  8. 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...

    贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学GUIZHOU UN ...

  9. H.264 视频的 RTP 载荷格式

    本文是 IETF 的规范 RFC 6184 的一部分的翻译,该规范 地址.翻译这份文档,主要是为了编写一段用 RTP 传输 H.264 流的代码.本想在网上找一些文章完成任务了事的,但由于个人之前音视 ...

最新文章

  1. STL_set集合容器+map映照容器
  2. recurrence relation in parenthesis placing problem
  3. 如何修改数据库表或存储过程的所有者
  4. 池化层:最大池化MaxPool、平均池化AvgPool、自适应池化AdaptiveMaxPool区别--基于pytorch框架
  5. oracle基表恢复,查找V$PARAMETER 基表 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
  6. 4.聚合aggregate
  7. 设置环境变量ANDROID_SDK_HOME有什么用?
  8. 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
  9. Linux无root权限安装cuda9.1和cudnn7.05以及编译框架时无lcuda.so的问题
  10. Atitit 项目语言的选择 java c#.net  php??
  11. 用正则表达式清除各类符号
  12. IDC运维工程师的基本要求
  13. 计算机无法访问网络位置,不能访问网络位置,详细教您怎么解决
  14. VBA快速转换数据格式,将CBOT结算价历史数据导入数据库(图文)
  15. C盘扩大 解决办法
  16. 【CSharp】延迟初始化(Lazy)
  17. C语言中静态变量的概念和用法
  18. 深度学习入门及深度学习学习路线
  19. addb %al,%al
  20. 23 DesignPatterns学习笔记:C++语言实现 --- 1.2 AbstractFactory

热门文章

  1. 《匆匆那年》的你,还记得吗?数学中的那些有(hui)趣(se)的定理(2)——蝴蝶定理
  2. java中使用阿里云实现短信推送
  3. 时间超限怎么办:手把手教你打表法
  4. 华为云桌面为建筑行业BIM落地实施提供有力支撑
  5. 【论文阅读笔记 KDD2021】《Relational Message Passing for Knowledge Graph Completion》
  6. 5G NAS消息格式与元素
  7. WIN10系统如何关闭用户账户控制
  8. 贝肯斯坦界(Bekenstein bound)
  9. 5G时代,将为无人机通讯传输带来哪些新变化?
  10. [绍棠] freemarker声明变量