2011-07-19 159 views
0

我使用RTP进行视频流式传输。使用RTP进行VLC流式传输

在接收端我越来越喜欢这个包...

(我打印1个字节值(INT))

包1:128-161-26-121-188-65 -147-141-132-103-00-00-71-00-70-18 ......

分组2:128-161-26-122-188-144-229-107-132 -103-00-00-71-64-71-48 .......

我需要知道I帧的IDR开始的位置。 我知道前12个字节是RTP头。 但我不知道71(第12个字节)和其他值代表什么。

是否为NAL标题?

任何想法?

谢谢

回答

0

我假设您正在传输H264媒体。如果RTP头部为12个字节,则NAL从第13个字节开始。您应该解析RFC 3984中提到的标头,并将有效载荷传递给解码器。

您可以查看一些实现以供参考,例如FFMpeg的源代码。

1

在12字节的标题之后,RTP有效负载启动。

有效负载的第一个字节是NAL单元头。它包含三个部分:

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

RFC 3984

F:1位 forbidden_​​zero_bit。 H.264规范声明值为 1作为语法违规。

NRI:2位 nal_ref_idc。值为00表示NAL 单元的内容未被用于重构用于图片间预测的参考图片。这样的NAL单元可以被丢弃而不冒险参考图片的完整性。值大于00的值表示需要解码NAL单元以保持参考图片的完整性。

类型:5位 nal_unit_type。该组件指定1的表7-1中定义的NAL单元有效载荷类型 ,并在本备忘录后面进行说明。有关所有当前定义的NAL单元类型及其 语义的 引用,请参阅1中的第7.4.1节。

的有效载荷类型,由至少显著5个比特定义的32个可能的值,都列在表1中:

Type Packet Type name      Section 
    --------------------------------------------------------- 
    0  undefined         - 
    1-23 NAL unit Single NAL unit packet per H.264 5.6 
    24  STAP-A Single-time aggregation packet  5.7.1 
    25  STAP-B Single-time aggregation packet  5.7.1 
    26  MTAP16 Multi-time aggregation packet  5.7.2 
    27  MTAP24 Multi-time aggregation packet  5.7.2 
    28  FU-A  Fragmentation unit     5.8 
    29  FU-B  Fragmentation unit     5.8 
    30-31 undefined         - 

两个你提到的两个数据包的是P帧。对于I帧,NAL单元类型应该是5,所以在你的情况下,第12个字节将是0x75。 P帧的NAL单元类型为1