当前位置: 首页 > article >正文

GB28181协议下的RTP传输

1. RTP协议概述

RTP(Real-Time Transport Protocol)基于RFC 3550,专为实时音视频传输设计,通常运行于UDP或TCP之上,结合RTCP实现质量控制。GB28181中主要封装方式:

  • PS封装:遵循ISO/IEC 13818-1,将音视频打包为PS包再封装为RTP负载,适用于复杂流场景(如多路复用)。
  • 基本流封装:直接封装H.264/H.265的NALU或G.711音频帧,减少协议开销。

2. 支持的音视频格式

视频编码
编码格式PS封装负载类型基本流负载类型规范文件关键特性
H.2649698 (FU-A分片)RFC 6184支持NALU分片(FU-A/FU-B)
H.2659698RFC 7798高压缩效率,需携带VPS/SPS/PPS
SVAC9620GB/T 25724-2017国标专用编码格式
音频编码
编码格式负载类型采样率帧长规范文件
G.711A88 kHz160字节ITU-T G.711
G.723.148 kHz30 ms帧ITU-T G.723.1
AAC动态分配16-48 kHz1024样本RFC 3640

3. 打包传输方式

PS封装流程
  1. 生成PS包
    • 每个PS包由系统头、PSM(Program Stream Map)和多个PES包组成。
    • 关键帧(如H.264 I帧)需携带SPS/PPS信息。
  2. RTP分片
    • PS包长度超过MTU时,按RFC 3984分片,使用分片标识(FU Indicator和FU Header)。
    • 示例:H.264 FU-A分片头部结构:
     FU Indicator (F|NRI|Type=28) → FU Header (S|E|Type) → NALU Payload
基本流封装
  • H.264/H.265:直接发送NALU或分片单元,无需PS层。
  • 音频:G.711每帧160字节,对应单个RTP包。

4. RTP传输模式

GB28181支持 UDPTCP 两种传输层协议,TCP分为 主动模式(Active)被动模式(Passive)

(1) RTP over UDP
  • 特点
    • 默认模式,低延迟但可能丢包。
    • 依赖RTCP反馈网络质量(如丢包率、抖动)。
  • SDP示例
  m=video 5004 RTP/AVP 96
  a=rtpmap:96 PS/90000
  a=fmtp:96 profile-level-id=420029; packetization-mode=1
(2) RTP over TCP
  • 协议规范:遵循RFC 4571,通过$分隔符标识数据块长度(格式:$[长度][数据])。
  • 传输模式
    • 主动模式(Active) :设备主动发起TCP连接。
    m=video 2000 TCP/RTP/AVP 96
    a=setup:active      // 设备主动连接
    a=connection:new    // 新建连接
  • 被动模式(Passive) :设备监听端口等待连接。
    m=video 3000 TCP/RTP/AVP 96
    a=setup:passive     // 设备被动等待
    a=connection:new
  • 适用场景
    • 主动模式:设备具备公网IP或直连能力(如专线网络)。
    • 被动模式:设备位于NAT后,需端口映射或反向代理。

5. RTCP协议功能

  • 质量控制:通过SR(Sender Report)和RR(Receiver Report)交换以下信息:

    字段说明
    丢包率接收端统计的丢包比例
    抖动(Jitter)数据包到达时间波动
    延迟端到端传输延迟
  • 同步机制:通过NTP时间戳和RTP时间戳对齐音视频流。

  • 带宽自适应:根据网络状况动态调整编码码率或分片策略。


6. SDP描述详解

关键字段
  1. 媒体行(m=
    • m=video 5004 RTP/AVP 96 → 视频流,UDP端口5004,负载类型96。
    • m=video 2000 TCP/RTP/AVP 96 → 视频流,TCP端口2000。
  2. 属性(a=
    • a=rtpmap:96 PS/90000 → 负载类型96对应PS封装,时钟频率90kHz。
    • a=fmtp:96 profile-level-id=420029 → H.264的SPS参数。
    • a=setup:active/passive → 指定TCP连接模式。
完整SDP示例(TCP被动模式)
v=0
o=34020000001320000001 0 0 IN IP4 192.168.1.100
s=GB28181 Stream
c=IN IP4 192.168.1.100
t=0 0
m=video 3000 TCP/RTP/AVP 96
a=setup:passive
a=connection:new
a=rtpmap:96 PS/90000
a=fmtp:96 streamtype=1; profile=1; sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM4yyA==
m=audio 3002 TCP/RTP/AVP 8
a=setup:passive
a=connection:new
a=rtpmap:8 PCMA/8000

7. 传输模式选择建议

模式延迟可靠性适用场景
UDP局域网、专线网络
TCP主动设备直连服务器(无NAT)
TCP被动设备位于内网(需端口映射)

8. 开发注意事项

  1. 分片处理:H.264/H.265大帧需分片传输,需正确处理FU-A头部标记(S/E位)。
  2. 时间戳同步:RTP时间戳需基于90kHz时钟(视频)或8kHz(音频),避免音画不同步。
  3. NAT穿透:TCP被动模式需配置端口映射或使用云网关。
  4. 错误恢复:TCP模式下需实现连接重试和断线重传机制。

http://www.kler.cn/a/559030.html

相关文章:

  • 《Head First设计模式》读书笔记 —— 命令模式
  • 如何在 SpringBoot 项目创建并使用 Redis 的详细介绍
  • 管道-过滤器、隐式调用、解释器架构风格对比
  • rpc和http的区别,为啥golang使用grpc 不使用http?
  • PAT 甲级 1091 Acute Stroke
  • 深度学习(5)-卷积神经网络
  • LangChain-基础(prompts、序列化、流式输出、自定义输出)
  • conda环境中运行“python --version“所得的版本与环境中的python版本不一致----deepseek并非全能
  • 怎么在Github上readme文件里面怎么插入图片?
  • rtconfig.cpython-313.pyc 在 .gitignore文件中写入 *.pyc 文件仍然没有被忽略?
  • Grok 3与GPT-4.5的“智能天花板”争夺战——谁才是大模型时代的算力之王?
  • Python常见面试题的详解16
  • Chrome 推出全新的 DOM API,彻底革新 DOM 操作!
  • 250223-Linux/MacOS如何跳过Miniconda的条款阅读,直接安装Miniconda
  • Docker部署 MongoDB及常用命令
  • java八股文之数据库
  • 超高清大图渲染性能优化实战:从页面卡死到流畅加载
  • 短剧源码搭建部署海外短剧系统
  • sql的索引与性能优化相关
  • 【新手初学】SQL注入之二次注入、中转注入、伪静态注入