zoukankan      html  css  js  c++  java
  • 用实例分析H264 RTP payload

    用实例分析H264 RTP payload

    H264的RTP中有三种不同的基本负载(Single NAL,Non-interleaved,Interleaved) 应用程序可以使用第一个字节来识别。 在SDP中也说明了本次会话的属性 SDP 参数 下面描述了如何在 SDP 中表示一个 H.264 流: . m= 行中的媒体名必须是 video . a=rtpmap 行中的编码名称必须
      

    H264的RTP中有三种不同的基本负载(Single NAL,Non-interleaved,Interleaved)

    应用程序可以使用第一个字节来识别。

    在SDP中也说明了本次会话的属性

    SDP 参数
    下面描述了如何在 SDP 中表示一个 H.264 流:
    . "m=" 行中的媒体名必须是 "video"
    . "a=rtpmap" 行中的编码名称必须是 "H264".
    . "a=rtpmap" 行中的时钟频率必须是 90000.
    . 其他参数都包括在 "a=fmtp" 行中.
    如:
    m=video 49170 RTP/AVP 98
    a=rtpmap:98 H264/90000
    a=fmtp:98 profile-level-id=42A01E; packetization-mode=1; sprop-parameter-sets=Z0IACpZTBYmI,aMljiA==

    下面介绍一些常用的参数.
    3.1 packetization-mode:
    表示支持的封包模式.
    当 packetization-mode 的值为 0 时或不存在时, 必须使用单一 NALU 单元模式.
    当 packetization-mode 的值为 1 时必须使用非交错(non-interleaved)封包模式.

    当 packetization-mode 的值为 2 时必须使用交错(interleaved)封包模式.

    每个打包方式允许的NAL单元类型总结(yes = 允许, no = 不允许, ig = 忽略)
          Type   Packet    Single NAL    Non-Interleaved    Interleaved
                           Unit Mode           Mode             Mode
          -------------------------------------------------------------

          0      undefined     ig               ig               ig
          1-23   NAL unit     yes              yes               no
          24     STAP-A        no              yes               no
          25     STAP-B        no               no              yes
          26     MTAP16        no               no              yes
          27     MTAP24        no               no              yes
          28     FU-A          no              yes              yes
          29     FU-B          no               no              yes
          30-31  undefined     ig               ig               ig

    这个参数不可以取其他的值.

    3.2 sprop-parameter-sets: SPS,PPS
    这个参数可以用于传输 H.264 的序列参数集和图像参数 NAL 单元. 这个参数的值采用 Base64 进行编码. 不同的参数集间用","号隔开.


    3.3 profile-level-id:
    这个参数用于指示 H.264 流的 profile 类型和级别. 由 Base16(十六进制) 表示的 3 个字节. 第一个字节表示 H.264 的 Profile 类型, 第三个字节表示 H.264 的 Profile 级别:

    3.4 max-mbps:
    这个参数的值是一个整型, 指出了每一秒最大的宏块处理速度.

    Rtp payload的第一个字节和264的NALU类似

    +---------------+
    |0|1|2|3|4|5|6|7|
    +-+-+-+-+-+-+-+-+
    |F|NRI| Type    |
    +---------------+

    F: 1 个比特.

    forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.

    NRI: 2 个比特.

    nal_ref_idc. 取 00 ~ 11, 似乎指示这个 NALU 的重要性, 如 00 的 NALU 解码器可以丢弃它而不影响图像的回放. 不过一般情况下不太关心这个属性.

    Type: 5 个比特.

    nal_unit_type. 这个 NALU 单元的类型. 简述如下:
    0     没有定义
    1-23 NAL单元 单个 NAL 单元包.
    24    STAP-A   单一时间的组合包
    24    STAP-B   单一时间的组合包
    26    MTAP16   多个时间的组合包
    27    MTAP24   多个时间的组合包
    28    FU-A     分片的单元
    29    FU-B     分片的单元
    30-31 没有定义

    例子:

    0x5C=01011100 (F:0  NRI:10  Type:28) FU-A

    0x41=01000001 (F:0  NRI:10  Type:01)Single NAL

    0x68=01000100 (F:0  NRI:10  Type:08)Single NAL

    Single NAL Unit Mode :Type[1-23] packetization-mode=0

     

    对于 NALU 的长度小于 MTU 大小的包, 一般采用单一 NAL 单元模式.
    对于一个原始的 H.264 NALU 单元常由 [Start Code] [NALU Header] [NALU Payload] 三部分组成, 其中 Start Code 用于标示这是一个 NALU 单元的开始, 必须是 "00 00 00 01" 或 "00 00 01", NALU 头仅一个字节, 其后都是 NALU 单元内容.
    打包时去除 "00 00 01" 或 "00 00 00 01" 的开始码, 把其他数据封包的 RTP 包即可.

    Non-interleaved Mode:Type[1-23,24,28] packetization-mode=1

           Type=[1-23]的情况 参照 packetization-mode=0

    Type=28 FU-A

    +---------------+---------------+
    |0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |F|NRI| Type:28 |S|E|R| Type    |
    +---------------+---------------+

    S:开始标志

    E:结束标志 (与 Mark相同)

    R:必须为0

    Type:h264的NALU Type

    例:

    0x7C85=01111100 10000101 (开始包)

    0x7C05=01111100 00000101 (中间包)

    0x7C45=01111100 01000101 (结束包)

    Type=23  STAP-A

    0               1             2                 3
    |0 1 2 3 4 5 6 7|8 9 0 1 2 3 4|5 6 7 8 9 0 1 2 3|4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                          RTP Header                           |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |STAP-A NAL HDR |         NALU 1 Size           | NALU 1 HDR    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         NALU 1 Data                           |
    :                                                               :
    +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    |               | NALU 2 Size                   | NALU 2 HDR    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         NALU 2 Data                           |
    :                                                               :
    |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                               :...OPTIONAL RTP padding        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    转http://blog.csdn.net/zblue78/article/details/5948538

  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/lidabo/p/4482685.html
Copyright © 2011-2022 走看看