[Live-devel] H.264 streaming -- Not receiving all packets

Georges Côté gcote at matrox.com
Tue Mar 24 08:04:39 PDT 2009


If my H/W encoder is single-slice, am I doomed? Seems to be working well 
on a reliable network for 1080i @ 5 Mb/s. Anything higher (10 Mb/s) is 
not as stable but I haven't had time investigating why.

For the reference frames, the codec generates a buffer containing 3 NAL 
units (SPS, PPS and the reference frame) but since SPS and PPS NAL units 
are so small, I don't bother sending them by themselves. The other 
buffers contain 1 NAL unit also.

Thank you!

Georges

Ross Finlayson wrote:
>> The way I understand it and read the code the 
>> currentNALUnitEndsAccessUnit() method returning true marks the end of 
>> a frame not a a NAL unit. (remember NAL unit does not always equal 
>> frame).
>
> Yes, "currentNALUnitEndsAccessUnit()" should return True iff (if and 
> only if) the most recently-delivered NAL unit marks the end of a video 
> frame (i.e., a complete screen).
>
>
>> question; if you have a NAL unit that can't fit in the buffer 
>> provided in doGetNextFrame() can you hold on to the part of the NAL 
>> unit that didn't fit and pass it in the next time doGetNextFrame() is 
>> called?
>
> No.  Each NAL unit must fit completely in the output buffer (at the 
> server end), and the input buffer (at the receiving end).  (Our 
> software takes care of fragmenting a large NAL unit across several 
> *network* (RTP) packets, and reassembling at the receiver end, so you 
> don't need to concern yourself with this.  However, each NAL unit must 
> fit completely within an output (and input) buffer.
>
> Very large NAL units are not a good idea, because they get sent in 
> several consecutive RTP packets, and if any one of these packets gets 
> lost, then the whole NAL unit will (effectlvely) be lost.  Therefore, 
> if possible, you should reduce the size of your NAL units - e.g., 
> using slices.
>


More information about the live-devel mailing list