> 
> I am trying to figure out where the problme is in my modified 
> testRTSPClient.cpp. The concerned line of code are the following:
> 
> 
> void continueAfterSETUP(RTSPClient* rtspClient, int resultCode, char* 
> resultString) {
>   ...
> 
>   scs.framer = H264VideoStreamDiscreteFramer::createNew(env, 
> scs.subsession->readSource());

You don’t need this.  Generally speaking, a “H264VideoStreamDiscreteFramer” is 
used only if you are about to transmit H.264 video, not if you’ve just received 
it.  (And a “H264VideoStreamFramer” would be wrong, because that’s used only to 
parse a H.264 video byte stream, not discrete NAL units (which is what you 
have).)

The problem is that - for H.264 - the NAL units that you feed into a 
“MPEG2TransportStreamFromESSource” must each begin with a 4-byte ‘start code’ 
(0x00 0x00 0x00 0x01).  Therefore, you need a new “FramedFilter” subclass - 
that you would write - that prepends this ‘start code’ to each NAL unit, before 
passing it to “MPEG2TransportStreamFromESSource”.  I.e., you need:

        scs.subsession->readSource() => your-filter-that-adds-a-start-code => 
MPEG2TransportStreamFromESSource
and then
        sink->startPlaying()
as before.

ALTERNATIVELY (and MUCH simpler), you can modify 
“testH264VideoToTransportStream.cpp” to change the “inputFileName” variable from
        “in.ts”
to
        “stdin”
and then just run
        openRTSP -v rtsp://url | your-modified-testH264VideoToTransportStream
to get a Transport Stream file named “out.ts”.  I.e., just pipe the stdout from 
“openRTSP -v” to your modified “testH264VideoToTransportStream”.


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