PTP Payload Format for MPEG-4 Elementary Stream(YC)
2009-04-08 17:40
344 查看
PTP Payload Format for MPEG-4 Elementary Stream(YC)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://volvet.blogbus.com/logs/7986021.html1. 说明本文的目的是描述MPEG4 Video ES在RTP中的传输格式,本文的主要内容参考了RFC-3016和RFC-3640,写作本文是为了帮助理解这两篇RFC的内容。如果描述有与这两篇RFC不一致的地方,应该以RFC为准。2. MIME Format在RFC-3016和RFC-3640中,建议MPEG4 ES的信息描述遵循MIME的格式,关于MIME格式的详细信息,请参考RFC-2045和RFC-2046。3. RTP Payload Format(1) Global Structure+---------+-----------+-----------+---------------+
| RTP | AU Header | Auxiliary | Access Unit |
| Header | Section | Section | Data Section |
+---------+-----------+-----------+---------------+RTP Header 就是RTP协议所定义的RTP信息格式AU Header Section , Auxiliary Section , Access Unit Data Section 就是 RTP 的Payload从MPEG4 Encoder输出的每个Packet , 被称为 Access Unit , 简写成 AU , AU Header就是描述 AU信息的标准格式。Auxiliary Section 是用来描述一些辅助信息的,在RFC中, 这个结构没有被定义,可以由用户来自定义这块内容,也可以完全忽略。Access Unit Data Section 就是MPEG Encoder的输出内容(2) RTP Header中与MPEG4 Payload相关的部分Payload Type (PT) 关于RTP Payload的类型 应该定义MPEG4类型, 这部分应该由RTP协议来定义, 于本文无关。Marker Bit (M) 如果RTP Payload 是完整的1个或多个 AU ,M = 1 ; 如果RTP Payload 是AU的碎片( Fragment , 意指一个AU 被分割成多个 RTP Packet的Payload ) , 只有最后一个 碎片的 M = 1, 其他碎片的 M = 0 。(3) The AU Header Section
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- .. -+-+-+-+-+-+-+-+-+-+
|AU-h-length|AU-header|AU-header| |AU-header|padding|
| | (1) | (2) | | (n) | bits |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- .. -+-+-+-+-+-+-+-+-+-+
AU-h_length 就是 AU-Header_Length , specifies the length in bits
of the immediately following AU-headers, excluding the padding bits.
AU Header , 每个AU Header 是与 Access Unit( 或者是 AU Fragment) 相对应的。
Padding Bits 是为了让 AU Header Section的长度(bits) 是 8的整数倍(4) AU Header的格式
+---------------------------------------+
| AU-size |
+---------------------------------------+
| AU-Index / AU-Index-delta |
+---------------------------------------+
| CTS-flag |
+---------------------------------------+
| CTS-delta |
+---------------------------------------+
| DTS-flag |
+---------------------------------------+
| DTS-delta |
+---------------------------------------+
| RAP-flag |
+---------------------------------------+
| Stream-state |
+---------------------------------------+AU-Size : 就是指 与AU Header 对应的那个 Access Unit 的长度 , in octets 。如果在RTP包中的Payload是AU Fragment, AU-Size 也应该是完整的AU的长度,不应该是Fragment的长度,在接受段, 可以看接受到的AU的长度是不是跟AU Header中定义的AU-Size一致, 来判断这个AU是一个完整的单元 还是只是碎片。并且可以通过这个字段来判断接受到Access Unit是不是完整。AU-Index : 就是 Access Unit 或者 AU Fragment的serial number。相邻的两个AU(Fragment) , 应该是AU-Index[n+1] = AU-Index+ 1。如果一个RTP Packet 中包含多个Access Unit , 那第一个AU Header必须有AU-Index字段,接下来的几个AU-Header则不允许有AU-Index字段,而是用AU-Index-Delta字段来取代。AU-Index-Delta : AU-Index-Delta是根据上一个AU-Index的值来计算当前的AU-Index。计算公式为 AU-Index[n+1] = AU-Index+ AU-Index-Delta + 1 , 所以通常情况下 , AU-Index-Delta应该是零, 如果AU-Index-Delta的值不是零,则说明在RTP Packet封装的时候使用了Interleave模式, 关于Interleave模式, 我们以后再来解释。CTS-Flag : 1 表示接下来的数据是CTS , 0 表示没有CTS
CTS : the composition time stamp 。
DTS-Flag : 1 表示接下来的数据是DTS , 0 表示没有DTS
DTS: the decoding time stamp
RAP-Flag: 1 表示对应的 Access Unit 是一个 Random Access Unit , 也就是所谓的 key-packet 。
如果 对应的是 Access Unit Fragment , 那么只有第一个Fragment的RAP-Flag的值是1, 其他Fragment的值应该是 0。
Stream-state : 表示编码器状态。如果编码器状态改变,这个值+1。
RFC中没有明确说明这个状态指那些内容, 我估计应该是resolution , fps, bps 等参数的改变吧 。(5) The Auxiliary Section
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- .. -+-+-+-+-+-+-+-+-+
| auxiliary-data-size | auxiliary-data |padding bits |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- .. -+-+-+-+-+-+-+-+-+这部分内容没有定义, 如果有用户数据 , 可以考虑把用户数据放入Auxiliary Section。(6) Access Unit
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- .. -+-+-+-+-+-+-+-+-+
| AU(1) | AU(2) | AU(3) | … | AU(n)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- .. -+-+-+-+-+-+-+-+-+所以Access Unit 就是 MPEG4 编码器的输出了。4. 关于RTP Packet的封装RTP Payload允许装载1个或多个完整的Access Unit也允许装载1个Access Unit Fragment禁止把完整的Access Unit和 Access Unit Fragment 封装在同一个RTP Packet中。 禁止把多个Access Unit Fragment 封装在RTP Packet 中 。通常来说 , RTP Packet的顺序应该跟Access Unit的顺序一致 , 除非是Interleave模式下 。 关于 Interleave模式请参看 相关的RFC , 这里就不多做阐述了 。Reference[1] RFC-3016[2] RFC-3640[3] ISO/IEC 14496 Part 2[4] RFC-2045[5] RFC-2046[6] RFC-1889[7] RFC-3550
相关文章推荐
- PTP Payload Format for MPEG-4 Elementary Stream
- RTP Payload Format for Transport of MPEG-4 Elementary Streams over http
- RTP Payload Format for Transport of MPEG-4 Elementary Streams over http
- RTP Payload Format for Transport of MPEG-4 Elementary Streams over http
- RTP Payload Format for the 1998 Version of ITU-T Rec. H.263 Video (H.263+) [RFC2429]
- RFC 4749 - RTP Payload Format for the G.729.1 Audio Codec
- RTP Payload Format for Opus Speech and Audio Codec
- 应用程序共享(RTP Payload format for Application and Desktop Sharing)
- Invalid number format for port number
- Request format is unrecognized for URL unexpectedly ending in '\xx'问题解决方案
- for the problem ImportError: cannot import name symbol_database 'text_format'
- Office 2007 File Format MIME Types for HTTP Content Streaming
- String Format for Double [C#]
- NSDateFormatter中dateFormat --- 日期格式含义。
- String Format for Double [C#]
- A new image format for the Web
- Caused by: java.lang.NumberFormatException: For input string: "${jdbc.initialSize}"
- 论文笔记:Sparse Matrix Format Selection with Multiclass SVM for SpMV on GPU
- Caused by: java.lang.NumberFormatException: For input string: "undefined"
- Compressed Format For Linux