>            framer = H264VideoStreamFramer::createNew
>                (*env, subsession->readSource (), 
> True/*includeStartCodeInOutput*/);
> 
>            MPEG2TransportStreamFromESSource* tsFrames =
>                MPEG2TransportStreamFromESSource::createNew (*env);
>            tsFrames->addNewVideoSource(framer, 5/*mpegVersion: H.264*/);

Your problem here is your use of "H264VideoStreamFramer".  That class is 
intended to be used when reading from a *byte stream* that contains a sequence 
of H.264 NAL units - e.g., from a file.  That's why it's used in the 
"testH264VideoToTransportStream" demo application, whose code you used as a 
model.

Unfortunately, because you are using a RTSP/RTP client, the input source is 
*not* a byte stream.  Instead, it is a sequence of discrete H.264 NAL units - 
one at a time.  Because of this, the data from your RTSP/RTP stream - i.e., 
"subsession->readSource()" - should *not* be fed into a "H264VideoStreamFramer".

Instead, *in principle*, you could just feed "subsession->readSource()" 
directly into your "MPEG2TransportStreamFromESSource" (via the 
"addNewVideoSource()" call).  Unfortunately, however, there's a problem with 
this: The H.264 NAL units that come from the RTP source (i.e., from 
"subsession->readSource()") do not have a 4-byte 'start code' (i.e., 0x00 0x00 
0x00 0x01) at the front, but that data that you feed into a 
"MPEG2TransportStreamFromESSource" needs to have these start codes.

Therefore, you will need to write your own subclass of "FramedFilter" that adds 
a 4-byte 'start code' to each input frame, and use an instance of this class - 
instead of "H264VideoStreamFramer" - in front of "subsession->readSource()".


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

_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to