⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc3016_5.c

📁 rfc3016中文版, rfc3016中文版
💻 C
📖 第 1 页 / 共 3 页
字号:
   注意:当一个RTP负载携带了多个VOP时,第一个VOP后的VOP时间戳在解码时通过计算得到。
该操作仅当RTP包标志位为1且RTP负载开始符合起始码时才是必须的。 (见3.1节时间戳和标志
位)
   (5) 建议一个视频包组成一个RTP包进行发送。视频包的大小应该按如下方式来决定,即,结
果RTP包大大小不得超过路径MTU的大小。
   注意:规则(5)不适用于以下场合,编码器配置禁止视频包(通过将VOL头中的
resync_marker_disable设置为1),或者编码工具不支持视频包。在此情况下,一个VOP可能得
经过在任意字节位置进行分片后才能发送。
   视频包从VOP头或视频包头开始,后面紧接着是motion_shape_texture(),以 
next_resync_marker()或next_start_code()结束。
3.3 MPEG-4视觉码流组包示例
   Figure 2所示为按照3.2描述标准产生的RTP包的例子。
   (a)例表示包含了配置信息的MPEG-4视觉码流中第一个RTP包或随机访问点。根据规则 (1),
视觉对象序列头应位于RTP负载的开始处,视觉对象头和视频对象层头(VO header, VOL header)
之前。3.2中定义的分片规则保证了从visual_object_sequence_start_code开始的配置信息通常
都位于RTP负载的开始位置,RTP接收端可通过检查RTP负载的头32位字段是否是
visual_object_sequence_start_code来检测随机访问点。
   (b)是另一个包含配置信息的RTP包例子。它同(1)的区别为该RTP包在VOP中的配置信息后还包
含有视频包。由于配置信息长度很短(一般为数十字节),一个RTP包如果仅含有配置信息会造
成系统开销的上升,因此配置信息和其后的GOV和/或(部分)VOP可以打包到同一个RTP包中,如此
例中所示。
   (c)是RTP包中包含了Group_of_VideoObjectPlane(GOV)的例子。根据规则(1),GOV位于RTP
负载的开始位置。一个仅有GOV字段的RTP包大小只有7个字节,这是对RTP/IP头开销的极大浪费。
因此后续的VOP(或部分地)可以如本例所示打到同一个RTP包中。
   (d)例中,一个视频包被打包到一个RTP包中。当网络中包丢失率很高时推荐采用该方法。甚
至当包含有VOP头的RTP包被丢弃时其它RTP包还可通过使用视频包头中的HEC信息进行解码。无需
任何额外的RTP头字段。
   (e)例为多个视频包打在一个RTP包中的情况。 在底层网络速率很低时这种组包方式可高效地
节约RTP/IP头开销。不过,由于一个RTP包的丢失会导致将多个视频包同时丢失,这种方法会降
低丢包恢复率。一个RTP包中理想的视频包数目和RTP包长度可通过丢包率和底层网络传输的比特
率来决定。
   (f)示例为在VOL头中将resync_marker_disable设置为1从而禁止使用视频包。在此情况下,
一个VOP可按照任意字节位置分为多个RTP包。比如将一个VOP按照固定长度进行分片。这种编码
配置方法和RTP分片可应用于能提供极低错误率保证的网络。另一方面,由于它的丢包恢复率很
差,建议不要在error-prone环境中使用。
Figure 3 所示为按3.2规则建立的RTP包。
按照(a)中将一个头分片到多个RTP包不仅造成RTP/IP头开销增加,也导致了错误恢复能力
的下降。因此在规则(3)中禁止这样做。
当将多个视频包串联到一个RTP包中时,VOP头或video_packet_header()不应放到RTP负载
的中间。基于错误恢复的目的,(b)中的组包方法违反了规则(2)。比较该例同图2中的例6,尽管
两者都是把两个视频包映射到两个RTP包中,其丢包恢复率却不一样。即是说,假设第二个RTP
包丢失了,图3例(b)中两个视频包都将丢失,而在图2例(d)中仅丢失视频包2。
    +------+------+------+------+
(a) | RTP  |  VS  |  VO  | VOL  |
    |header|header|header|header|
    +------+------+------+------+

    +------+------+------+------+------------+
(b) | RTP  |  VS  |  VO  | VOL  |Video Packet|
    |header|header|header|header|            |
    +------+------+------+------+------------+

    +------+-----+------------------+
(c) | RTP  | GOV |Video Object Plane|
    |header|     |                  |
    +------+-----+------------------+

    +------+------+------------+  +------+------+------------+
(d) | RTP  | VOP  |Video Packet|  | RTP  |  VP  |Video Packet|
    |header|header|    (1)     |  |header|header|    (2)     |
    +------+------+------------+  +------+------+------------+

    +------+------+------------+------+------------+------+------------+
(e) | RTP  |  VP  |Video Packet|  VP  |Video Packet|  VP  |Video Packet|
    |header|header|     (1)    |header|    (2)     |header|    (3)     |
    +------+------+------------+------+------------+------+------------+

    +------+------+------------+  +------+------------+
(f) | RTP  | VOP  |VOP fragment|  | RTP  |VOP fragment|
    |header|header|    (1)     |  |header|    (2)     | ___
    +------+------+------------+  +------+------------+

     图2 – RTP组包的MPEG-4视觉码流示例
    +------+-------------+  +------+------------+------------+
(a) | RTP  |First half of|  | RTP  |Last half of|Video Packet|
    |header|  VP header  |  |header|  VP header |            |
    +------+-------------+  +------+------------+------------+

    +------+------+----------+  +------+---------+------+------------+
(b) | RTP  | VOP  |First half|  | RTP  |Last half|  VP  |Video Packet|
    |header|header| of VP(1) |  |header| of VP(1)|header|    (2)     |
    +------+------+----------+  +------+---------+------+------------+

   图3 – 禁止RTP组包的MPEG-4视觉码流示例

4. MPEG-4音频码流的RTP组包
本节规定了MPEG-4音频码流的RTP组包规则。MPEG-4音频流必须通过LATM工具进行格式化,
然后基于LATM的流将按照下面三节的描述映射到RTP包上。
4.1 RTP包格式
基于LATM的流由一个包含了一个或多个音频帧的audioMuxElements序列组成。一个完整或
部分完整的audioMuxElement可直接映射到一个RTP负载上,无需删除任何audioMuxElement语法
元素 (见图4)。每个audioMuxElement的第一个字节应该位于RTP包第一个负载所在的位置。
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC   |M|     PT      |       sequence number         |RTP
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           timestamp                           |Header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           synchronization source (SSRC) identifier            |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|            contributing source (CSRC) identifiers             |
|                             ....                              |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|                                                               |RTP
:                 audioMuxElement (byte aligned)                :Payload
|                                                               |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               :...OPTIONAL RTP padding        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
             图4 – 一个MPEG-4音频RTP包
为了对audioMuxElement进行解码,必需得在其后通过带外方法指明muxConfigPresent。当
SDP用于此指示时,MIME参数"cpresent“就对应了muxConfigPresent信息。(见5.3节).
muxConfigPresent: 如果该值为1(带内模式),audioMuxElement应包括一个指示位
"useSameStreamMux"并且可能包括一个音频压缩配置信息"StreamMuxConfig"。
UseSameStreamMux位表示是否前一帧中的StreamMuxConfig元素也应用于本帧。如果
useSameStreamMux位指示要使用前一帧的StreamMuxConfig,而前一帧已经丢失,则将无法对当
前帧进行解码。因此,在带内模式下,StreamMuxConfig元素应根据网络条件重复传输。相反,
如果muxConfigPresent设为0(带外模式),StreamMuxConfig元素需要通过带外方式传输。如果是
SDP,则要使用MIME参数"config" (见5.3节).
4.2 MPEG-4音频中RTP头字段的使用
   负载类型(PT): 为这种新的包格式分配RTP负载类型超出了本文的范畴,不在此赘述。特
定类型应用程序的RTP框架应该负责为编码分配负载类型,如若不能则应该通过带外信令协
议(如,H.245,SIP等)在动态范围内选择一个负载类型。在为可伸缩流动态分配RTP负载类
型时,应该为每一层分配不同的值。这些值应按层依赖关系的强弱顺序进行分配,最基本的
层拥有最小的值。
   标志位(M): 标志位指出了audioMuxElement范围。置为1说明RTP包包含有完整的   
audioMuxElement或audioMuxElement分片的最后一片。
   时间戳: 时间戳表示RTP包中第一个音频帧的采样时间。从安全角度出发,建议时间戳从一个
随机值开始。除非指定使用带外方式,时间戳的分辨率设为缺省值90KHz。
   顺序号: 为了更加安全,顺序号应从一个随机初始化值开始,每发送一个RTP数据包加1。
   其它头字段的使用遵照RFC 1889 [8]。
4.3 MPEG-4音频码流分片
	建议每个RTP包中只放一个audioMuxElement。如果audioMuxElement的大小保持得足够小,
使得RTP包的大小不超过路径MTU的大小,则没有问题。否则就得将audioMuxElement分片到多个
包中。
5. MPEG-4视听流MIME类型注册
   接下来的几节描述了MPEG-4视听流的MIME类型注册。MPEG-4视觉流的MIME类型注册和SDP使用
在5.1和5.2节中描述,而MPEG-4音频流的MIME类型注册和SDP用法在5.3和5.4中描述。
5.1 MPEG-4视觉MIME类型注册
   MIME媒体类型名: video
   MIME子类型名: MP4V-ES
   必需的参数: none
   可选参数:
      rate(速率): 该参数仅用于RTP传输。表示RTP头时间戳字段的分辨率。如果未指定该参数
则使用缺省值90000(90KHz)。
      profile-level-id(框架级别ID): 一个表示Table G-1 of ISO/IEC 14496-2 [2][4]定义
的MPEG-4视觉框架和级别值的十进制数 (profile_and_level_indication)。该参数可用于性能
交换或事务建立过程中以表示MPEG-4视觉框架和MPEG-4视觉编码器能达到的级别组合。如未指定
该参数,则采用缺省值1。
      Config(配置): 该参数用于表示相应MPEG-4视觉流的配置。不应用于表示性能交换过程中
的编码能力。它是一个16进制形式的8位字节串,可表示ISO/IEC14496-2 [2][4][9]6.2.1小节中
定义的MPEG-4视觉配置信息。该配置信息可按照MSB(最高有效位)优先原则直接映射到8位字节
串。配置信息的第一位应位于第一个8位组的MSB。该参数表示的配置信息应和相应的MPEG-4视觉
流的配置信息相同,除了first_half_vbv_occupancy和latter_half_vbv_occupancy,如果存在,
那么它在MPEG-4视觉流内重复的配置信息方面有所不同。(见ISO/IEC14496-2的6.2.1小节“开始
编码”).
      关于该参数的用法示例如下:
        -  MPEG-4 Visual Simple Profile/Level 1:
            Content-type: video/mp4v-es; profile-level-id=1
        -  MPEG-4 Visual Core Profile/Level 2:
            Content-type: video/mp4v-es; profile-level-id=34
        -  MPEG-4 Visual Advanced Real Time Simple Profile/Level 1:
            Content-type: video/mp4v-es; profile-level-id=145
   已发行规范:
      MPEG-4视觉流规范参见ISO/IEC 14469-2 [2][4][9]。RTP负载格式在RFC 3016中描述。
   编码考虑:
      视频位流必须参照MPEG-4视觉规范(ISO/IEC 14496-2)产生。一个视频位流是二进制数据,
必须编码为可按非二进制传输(对于Email,Base64编码就已经足够了)。该类型也定义为通过RTP
传输。RTP包必须遵照RFG 3016定义的MPEG-4视觉RTP负载格式进行组包。
   安全性考虑:
      参见RFC 3016第6节。
   互操作考虑:
      MPEG-4视觉为视觉对象编码提供了大量丰富的工具集。为了高效地实现标准,也为特定的
应用提供了MPEG-4视觉工具子集。这些子集称做'Profiles',限制了实现一个编码器所需要的工
具集的大小。为了控制计算复杂性,每个Profile分为若干级别。Profile@Level组合如下:
?	一个编解码器开发者,负责实现所需的标准子集,维护和相同组合内其它MPEG-4设备
的相互作用。
?	检查MPEG-4设备是否符合标准 ('一致性测试')。
      视觉流应同参数"profile-level-id"中规定的MPEG-4视觉Profile@Level兼容。
      发送方与接收方的互操作性,通过在MIME内容中指定参数"profile-level-id",或者通过
协调性能交换/声明过程将该参数设为相同值来实现。
   使用该媒体类型的应用:
      视听流和会议工具,Internet消息和电子邮件应用。
   附带信息: 无
   联系人及其邮件地址:
      RFC 3016作者(见第8节)。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -