>   I've gotten H264 streaming to work, thanks to the live555 and old posts to 
> this list.
> Now, i am trying to add audio to the same stream.
> 
>   I've been reading through old posts in this list, and have gathered that to 
> have the audio and video taken together, that i must add both to the same 
> ServerMediaSession.

Yes.  (See, for example, how the "testOnDemandRTSPServer" demo application 
implements the streaming of audio+video substreams from a MPEG Program Stream: 
"testProgs/testOnDemandRTSPServer.cpp", lines 96-111


>   I've also read, for AAC, that i need to make a class (AACSMS) based on 
> 'ADTSAudioFileServerMediaSubsession' and provide the guts of 
> 'createNewStreamSource' and 'createNewRTPSink', which i have done.  I have 
> made 'AACSMS' inherit from 'OnDemandServerMediaSubsession' since it is a live 
> AAC source.  I have also created a class that acquires the live frames 
> 'AACLiveSource', a subclass of FramedSource, which is created within 
> 'createNewStreamSource'
> 
>   My question is how to put this all together correctly.  I have had to make 
> the AACSMS two 'create' members public in order to do this

Actually, it's sufficient to make them "protected:", because they're called 
only by their ancestor class "OnDemandServerMediaSubsession".


> , so i'm wondering if i've missed something in how to set this up.

Yes - note my comments below!

Once you've sorted this all out, I suggest that you begin by testing your 
server with our "openRTSP" command-line client.

Another 'gotcha' that you'll face will be time synchronization.  It's essential 
that when you set the "fPresentationTime" values for both audio and video 
(i.e., when you implement the two "doGetNextFrame()" virtual functions), that 
you set them to accurate values that are synchronized with each other.


> Also, is it OK for both Audio and Video to use the same 'GroupSock' ?

No!  They must use different "Groupsock" objects.  But you shouldn't be caring 
about this, because the "Groupsock" objects are created automatically from the 
"OnDemandServerMediaSubsession" code.  You don't need to deal with them 
yourself.

I.e., your code should *not* be creating "Groupsock" objects, and it should 
*not* be calling "createNewStreamSource()" and "createNewRTPSink()".  This is 
done automatically by "OnDemandServerMediaSubsession".  All you need to do is 
define those two functions, not call them.

Again, I suggest looking at the "testOnDemandRTSPServer" code for guidance.


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