> This stream is H264 AVC format. I am delivering single NAL units
> (With AVC start codes) to H264VideoStreamDiscreteFramer

No!  You MUST NOT include 'start codes' (i.e., 0x00 0x00 0x00 0x01) in the NAL 
units that you feed to a "H264VideoStreamDiscreteFramer".  I don't know how 
much clearer I (and the LIVE555 code) can be about this!

> from a
> Device subclass which in turn feeds to a H264VideoRTPSink;
[...]
> all is well in delivery except when the NAL's look like MPEG NALS 
> 00 00  xx xx. (warning nal type:0)

FYI, you may be using an out-of-date version of our software.  If so, please 
upgrade.


> You had mentioned in a 
> previous question there should be no start codes, however the 
> decoder (client side) certainly requires it for immediate play.

That's irrelevant!  We're not talking about feeding NAL units to a client; 
we're talking about feeding them to a "H264VideoStreamDiscreteFramer", which in 
turn gets fed to a "H264VideoRTPSink", which in turn get transmitted within RTP 
packets (which according to the IETF-defined payload format for H.264, MUST NOT 
include start codes).  This all happens at the *sender* end - i.e., the server. 
 Once again, the NAL units that you feed to a "H264VideoStreamDiscreteFramer" 
MUST NOT include start codes.


> Are the start codes somehow reconstructed client side with a
> proper setup?

The *receiver* end - i.e., the client - receives NAL units that have been 
packed into RTP packets.  Once again, according to the IETF-defined standard 
payload format for H.264, these NAL units DO NOT include start codes.  Instead, 
the receiving client receives - from the RTP demultiplexor - a sequence of 
discrete NAL units, each with their size defined.  (I.e., the receiving client 
doesn't need (and doesn't get) start codes, because instead it knows the size 
of each NAL unit.)

If the receiver also uses the LIVE555 software, then it would use a 
"H264VideoRTPSource", which (like all "FramedSource" subclasses) delivers a 
sequence of 'frames', each with its own length ("frameSize").  In this case, 
each such 'frame' is a H.264 NAL unit (without a start code).  These NAL units 
would then be fed to a decoder.  If the decoder needs a start code in front of 
each NAL unit, then you would insert it there - i.e., when you feed it to your 
decoder.  If, however, the decoder doesn't need a start code - i.e., if the NAL 
unit lengths are enough for the decoder - then you don't need to insert one 
when you feed it to your decoder.  I.e., it depends on your decoder.


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/

_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to