【网络通信 -- 直播】网络通信协议简介 -- RTP 协议的 H264 封包

【1】基本概念

NAL 单元 (Network Abstraction Layer Unit)

字段 长度 说明
F 1 位 forbidden_zero_bit,标记该 NAL 包是否出现错误,出错置 1,否则置 0
NRI 2 位 nal_ref_idc,值越大代表该 NAL 单元的重要程度越高
取值 00 时表示该帧不用于在重建参考图像的内部预测,可以丢弃
Type 5 位 nal_unit_type,指示 NAL 单元载荷类型

载荷结构 (Payload Structures)

  • Single NAL Unit Packet,一个 RTP 载荷中仅仅包含一个 NAL 单元
  • Aggregation Packet,将多个 NAL 单元聚合成一个 RTP 载荷
    • Single-Time Aggregation Packet type A (STAP-A)
    • Single-Time Aggregation Packet type B (STAP-B)
    • Multi-Time Aggregation Packet (MTAP) with 16-bit offset (MTAP16)
    • Multi-Time Aggregation Packet (MTAP) with 24-bit offset (MTAP24)
  • Fragmentation Unit,将一个 NAL 单元拆分成多个 RTP 包
    • FU-A
    • FU-B

分包模式 (Packetization Modes)

  • 单一 NAL 单元模式 (Single NAL unit mode),packetization-mode = 0 或者无此字段时缺省
  • 非交错模式 (Non-interleaved mode),packetization-mode = 1
  • 交错模式 (Interleaved mode),packetization-mode = 2
    • 单一分包和非交错模式用于通信系统,人与人对话交流的场景,因此必须考虑低时延,按照解码的顺序传递数据包
    • 交错模式的场景一般是对时延并不是特别敏感的场景,传递包的顺序也可以不按照解码顺序,因此交错模式下的包中都需要携带一个 DON (Decoding order number)

载荷类型、载荷结构与分包模式的对应关系

【2】打包方式

  • Single NAL Unit Packet

Single NAL Unit Packet,一个 RTP 载荷中仅仅包含一个 NAL 单元;

  • Aggregation Packet

Single-Time Aggregation Packet (STAP),具有相同 NAL 时间的聚合 NAL 单元,STAP-A 不具备 DON (Decoding order number),STAP-B 包含 DON (Decoding order number);

Multi-Time Aggregation Packet (MTAP),具有不同 NAL 时间的聚合 NAL 单元,MTAP16 即 NAL 单元时间戳偏移 (16 位),MTAP24 即 NAL 单元时间戳偏移 (24 位);

Aggregation Packet 打包规则

  • RTP 时间戳必须设置为所有聚合的 NAL 单元中的最早时间
  • 仅当所有聚合的 NAL 单元的 F 位为 0 时,F 域设置为 0,否则设置为 1
  • NRI 的值必须为所有聚合的 NAL 单元中的最大值
  • Type 域必须设置为下图所示类型

Single-Time Aggregation Packet (STAP)

STAP-A

STAP-B

Multi-Time Aggregation Packet (MTAP)

  • DONB (decoding order number base),必须包含第一个 NAL 单元的解码方向值 (decoding order number,DON);
  • DOND (decoding order number difference),与基准的差值
  • TS offset (timestamp offset),时间戳偏差值

MTAP16

MTAP24

  • Fragmentation Unit

注意,目前 Fragmentation Unit 仅用于单个 NAL 单元分片

优势,1. 将大数据包分片成小的数据包,有利于网络传输;2. 将单个 NAL 单元分片有利于前向纠错机制的应用;

FU-A (28)

FU-B (29)

FU indicator 格式

FU header 格式

字段 长度 说明
S 1 位 取值 1 标识分片 NAL 单元的起始
取值 0 非起始 NAL 单元
E 1 位 取值 1 标识分片 NAL 单元结束
取值 0 非终止 NAL 单元
R 1 位 保留位
Type 5 位 NAL 单元的载荷类型

参考致谢
本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。

【1】H264 的 RTP 格式封装

【2】RFC 6148

【3】RTP H264组包之单个NAL包和FU-A方式解析

【网络通信 -- 直播】网络通信协议简介 -- RTP 协议的 H264 封包相关推荐

  1. 【网络通信 -- 直播】网络通信协议简介 -- SRTP/SRTCP

    [网络通信 -- 直播]网络通信协议简介 -- SRTP/SRTCP [0]简介 安全实时传输协议 (Secure Real-time Transport Protocol,SRTP) 是在实时传输协 ...

  2. 【网络通信 -- 直播】网络通信协议简介 -- SSL/TLS 与 DTLS

    [网络通信 -- 直播]网络通信协议简介 -- SSL/TLS 与 DTLS [1]网络传输中加密的一般概念 对称密钥加密技术,加密过程和解密过程使用的是同一个密钥: 常见的对称加密算法有 DES.3 ...

  3. 【网络通信 -- 直播】FFMPEG 简介与常用命令总结

    [网络通信 -- 直播]FFMPEG 简介与常用命令总结 [1]FFMPEG 简介 FFmpeg,项目的名称来自 MPEG 视频编码标准,"FF"代表"Fast Forw ...

  4. H264视频传输、编解码----RTP协议对H264数据帧拆包、打包、解包过程

    H264帧需要通过RTP协议进行传输,这其中就涉及到H264数据帧的封包.拆包和解包等过程. RTP协议格式 下面是 RFC 3550 中规定的 RTP 头的结构: 0 1 2 3 40 1 2 3 ...

  5. android player通过rtp协议接收h264视频数据播放

    android recorder通过rtp发送h264视频数据给vlc播放 android player通过rtp协议接收h264视频数据播放 Android recorder通过rtp发送aac数据 ...

  6. RTP协议封装H264/H265/AAC

    <RTSP实时音视频传输介绍> 目录 一.前言 二.RTP基本格式介绍 1.RTP 固定头 2.RTP 扩展头 3.RTP 载荷 三.RTP封装H264 1.封装包类型 四.RTP封装H2 ...

  7. 22.1 网络编程:软件结构、网络通信协议、UDP与TCP协议、(网络编程三要素:协议、ip地址、端口号)、查看ip地址、检测网络是否连通、判断ip是否可用

    目录 网络编程 软件结构 网络通信协议 TCP/IP协议 协议分类 UDP TCP 网络编程三要素 协议 IP地址 列:查看本机ip地址 检查网络是否连通.判断ip是否可用 端口号 网络编程 软件结构 ...

  8. Java中的网络和TCP/IP协议

    网络和TCP/IP协议 一.网络通信协议 1.1 协议和七层模型 1.2 TCP/IP协议 二.网络通信的实现 2.1 TCP协议通信 2.2 UDP协议通信 前言: 有时候我们会不理解,我们在QQ上 ...

  9. 直播网络 的协议选择

    转自:http://www.cnblogs.com/ningskyer/articles/5534512.html 上篇我们讲述了如何让直播内容以"最短"路径从主播到观众上,传输层 ...

  10. rtp协议详解/rtcp协议详解

    1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍IP协议族中用于实时语音.视频数据传输的标准协议RTP( Real-time Transp ...

最新文章

  1. Centos7上yum安装mongodb(安装epel中的版本可能会比较老)
  2. git reset --hard HEAD
  3. 【机器学习】最近邻算法KNN原理、流程框图、代码实现及优缺点
  4. [转]C++中sleep()函数的使用
  5. Jar包部署-指定jsp打包配置
  6. react项目在ie空白解决
  7. MySQL性能优化 分区
  8. LDA主题模型简介及Python实现
  9. r语言如何下载carzip包本地安装_R语言安装R package的2种方法
  10. 观点 | 滴滴 AI Labs 负责人叶杰平教授:深度强化学习在滴滴的探索与实践+关于滴滴智能调度的分析和思考+滴滴派单和Uber派单对比
  11. NHibernate(一) 转自止于至善
  12. 如何在 5 分钟内成为游戏引擎的行家
  13. 基于百度的UidGenerator改造的全局唯一id生成器
  14. 2021年数学建模国赛湖北赛区推荐国奖名单
  15. MongoDB数据库的简介与安装步骤
  16. window10如何开启telnet
  17. 【主色提取】模糊C均值(FCM )聚类算法和彩色图像快速模糊C均值( CIQFCM )聚类算法
  18. Data Analysis - Day2 - Matplotlib 案例
  19. uClinux 内核编译常见错误及解决方法(zt)
  20. tyvj2032 升降梯上

热门文章

  1. C++ 第三课:常量转义字符
  2. Android dp2px
  3. 联通家庭宽带光猫DDNS设置
  4. 调色板类型、调色板模式、调色板压缩算法是什么意思?(调色板就是一个颜色的索引表)
  5. Molecular Contrastive Learning of Representations via Graph Neural Networks
  6. 高考全国卷导数题分类
  7. 自我怀疑的开发者:你够好吗?
  8. 2021年9月25日PMI认证考点考场安排
  9. CIM一套完善的消息推送框架
  10. mysql左链sql去重,MySQL数据库去重 SQL解决