Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

h264 NAL parser

Cristina_Gil
Beginner
1,002 Views

Hello,

I want to get the h264 NAL header before its sent to the IPP decoder function, I get for a camera an RTP+H264 stream, with the following values:

I skip 12bytes of the RTP header, but the next byte which I think it should be the NAL header begins by 0 (forbidden_zero_bit) but I get 7C (1111 1100)

10.. .... = Version: RFC 1889 Version (2)

0... .... = Marker: False

..0. .... = Padding: False

...0 .... = Extension: False

.... 0000 = Contributing source identifiers count: 0

Payload type: DynamicRTP-Type-96 (96)

Sequence number: 23252

Timestamp: 868956473

Synchronization Source identifier: 0xcbd5dcba (3419790522)

Payload: 7C05FFE5F98EB9B5AED78E67EB3C2A941606A7CCD179710B...

So my first byte its a hex "7C", 1111100b i read i have to parse it with hexadecimal values:

NAL_forbidden = headerStart(0) And &H80 --> i get a zero
NAL_nri = (headerStart(0) >> 5) And &H3 --> i get a 3
NAL_type = headerStart(0) And &H1F --> --> i get a 28

[1.] But i dont really dont know why i have to parse with those values.. i know its a silly question.. could anyone tell me why??

[2.] And then i always get FU packets.. could it be correct?

[3.] I want to decode the h264, so which IPP library do i need?

Thanks for your help!

0 Kudos
4 Replies
jmichelet
Beginner
1,002 Views

Hello,

It looks like your stream includes some fragmented H.264 frames, using the FU-A markers. So prior to decode it using the IPPs, you should consider defragmenting it into 'pure' NALs, as described in the RFC3984 document (http://www.faqs.org/rfcs/rfc3984.html).

Regards,

J. Michelet

0 Kudos
Cristina_Gil
Beginner
1,002 Views

Thanks jmichelet!!!

I have to concatenate the FU-A payload units before i send them to the decode. But how can i know the FU-A payload size??

I have the same problem with IDR, non-IDR NAL units,, how can i know the size so i can split the rtp padding??

0 Kudos
jmichelet
Beginner
1,002 Views

Hello,

Since the UDP header contains the datagram length, by carefully removing the RTP header length (its length may vary, as described in the RFC 3550), you easily get the rtp payload length.

J. Michelet

0 Kudos
Cristina_Gil
Beginner
1,002 Views

Hello,

From SDP message I get packetization mode 1 so I will have in FU-A IDR images type I and in FU-A non-IDR type I and P (I also have baseline profile) and so on. Please correct me if im wrong:

A RTP message could have many NAL units

A FU-A unit only have a part of the NAL unit

In the standard ISO/IEC 14496 part 10:

slice_layer_without_partitioning_rbsp( ) {

slice_header()

slice_data()

rbsp_slice_trailing_bits( )

}

So, its only ONE slice header and MULTIPLE pictures coded in ONE slice data??

If this is true, I have to parse the slice data in order to get each picture, havent i?

Thanks in advance for your help.

0 Kudos
Reply