I've attached my test program, each stream has rtcp, and the timestamps are being set using timeofday. The VLC says the streams are synchronized, but I am looking into doing more debug on the client side. It looks like the video is started streaming before the audio and that is where the streams get out of sync. I noticed this because I was outputting the timestamps and saw that when starting up the video streams out data for a little bit before audio starts up.
thanks for the help, mike On Thu, 2008-06-12 at 22:56 -0700, Ross Finlayson wrote: > >How do you go about streaming video and audio at the same time using > >RTSP? I want to stream two elemental streams that I got out of a mp4 > >file to VLC and have them playback just as if I was watching the > >original file. Using the testOnDemandRTSPServer I can open the video > >stream in one instance of VLC and the audio stream in another instance > >of VLC. How do you put the pieces together? > > Using a single "ServerMediaSession", containing two > "ServerMediaSubsession" objects - one for video; the other for audio. > > Also, to ensure that the audio and video get synchronized at the > client, you *must* give them accurate presentation times at the > server end - and implement RTCP for each stream. Also (and this is > important), the presentation times *must* correspond to 'wall-clock' > time - i.e., the time that you would get by calling "gettimeofday()". > > If you do this, then the presentation times that come out the client > end (after RTCP-synchronization) *will* be same as those that you > gave the frames at the server end, and then the client will be able > to use those to synchonize audio and video.
#include "liveMedia.hh" #include "BasicUsageEnvironment.hh" #include "GroupsockHelper.hh" int main(int argc, char** argv) { // Begin by setting up our usage environment: UsageEnvironment* env; TaskScheduler* scheduler = BasicTaskScheduler::createNew(); env = BasicUsageEnvironment::createNew(*scheduler); char const* inputFileName = "test.m4e"; char const* FileName = "test.aac"; struct in_addr destinationAddress; destinationAddress.s_addr = chooseRandomIPv4SSMAddress(*env); // Note: This starts RTCP running automatically RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554); if (rtspServer == NULL) { *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n"; exit(1); } ServerMediaSession* video = ServerMediaSession::createNew(*env, "testStream", "testStream", "Session streamed by elementStreamer", True /*SSM*/); video->addSubsession(MPEG4VideoFileServerMediaSubsession::createNew(*env, inputFileName, true)); video->addSubsession(ADTSAudioFileServerMediaSubsession::createNew(*env, FileName, true)); rtspServer->addServerMediaSession(video); char* url = rtspServer->rtspURL(video); *env << "Play this stream using the URL \"" << url << "\"\n"; delete[] url; // Start the streaming: *env << "Beginning streaming...\n"; env->taskScheduler().doEventLoop(); // does not return return 0; // only to prevent compiler warning }
fileName = test.m4e fileName = test.aac creating new mpeg4 video file server media subsession video file size = 21465361 playing dummy file scheduling checkforauxsdpline task checking for auxsdpline video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 284506 video timestamp: 1213369610 350506 video timestamp: 1213369610 350506 video timestamp: 1213369610 416506 video timestamp: 1213369610 416506 setting done flag for auxdspline checking for auxsdpline creating new stream source creating new mpeg4 video file server media subsession video file size = 21465361 creating new stream source setting fTimestampBase: 1595972578 setting fTimestampBase: 2420410699 audio timestamp: 1213369610 389970 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 387410 video timestamp: 1213369610 453410 video timestamp: 1213369610 453410 audio timestamp: 1213369610 421970 audio timestamp: 1213369610 453970 video timestamp: 1213369610 519410 video timestamp: 1213369610 519410 audio timestamp: 1213369610 485970 audio timestamp: 1213369610 517970 video timestamp: 1213369610 585410 video timestamp: 1213369610 585410 audio timestamp: 1213369610 549970 audio timestamp: 1213369610 581970 video timestamp: 1213369610 651410 video timestamp: 1213369610 651410 audio timestamp: 1213369610 613970 audio timestamp: 1213369610 645970 video timestamp: 1213369610 717410 video timestamp: 1213369610 717410 audio timestamp: 1213369610 677970 audio timestamp: 1213369610 709970 video timestamp: 1213369610 783410 video timestamp: 1213369610 783410 audio timestamp: 1213369610 741970 audio timestamp: 1213369610 773970 video timestamp: 1213369610 849410 video timestamp: 1213369610 849410 audio timestamp: 1213369610 805970 audio timestamp: 1213369610 837970 video timestamp: 1213369610 915410 video timestamp: 1213369610 915410 audio timestamp: 1213369610 869970 audio timestamp: 1213369610 901970 video timestamp: 1213369610 981410 video timestamp: 1213369610 981410 audio timestamp: 1213369610 933970 audio timestamp: 1213369610 965970 video timestamp: 1213369611 47410 video timestamp: 1213369611 47410 audio timestamp: 1213369610 997970 audio timestamp: 1213369611 29970 video timestamp: 1213369611 387410 video timestamp: 1213369611 387410 video timestamp: 1213369611 387410 video timestamp: 1213369611 387410 video timestamp: 1213369611 387410 video timestamp: 1213369611 387410 audio timestamp: 1213369611 61970 audio timestamp: 1213369611 93970 audio timestamp: 1213369611 125970 audio timestamp: 1213369611 157970 audio timestamp: 1213369611 189970 audio timestamp: 1213369611 221970 audio timestamp: 1213369611 253970 audio timestamp: 1213369611 285970 audio timestamp: 1213369611 317970 audio timestamp: 1213369611 349970 audio timestamp: 1213369611 381970 video timestamp: 1213369611 453409 video timestamp: 1213369611 453409 video timestamp: 1213369611 453409 audio timestamp: 1213369611 413970 audio timestamp: 1213369611 445970 video timestamp: 1213369611 519410 video timestamp: 1213369611 519410 video timestamp: 1213369611 519410 audio timestamp: 1213369611 477970 audio timestamp: 1213369611 509970 video timestamp: 1213369612 387410 video timestamp: 1213369612 387410 video timestamp: 1213369612 387410 video timestamp: 1213369612 387410 video timestamp: 1213369612 387410 video timestamp: 1213369612 387410 audio timestamp: 1213369611 541970 audio timestamp: 1213369611 573970 audio timestamp: 1213369611 605970 audio timestamp: 1213369611 637970 audio timestamp: 1213369611 669970 audio timestamp: 1213369611 701970 audio timestamp: 1213369611 733970 audio timestamp: 1213369611 765970 audio timestamp: 1213369611 797970 audio timestamp: 1213369611 829970 audio timestamp: 1213369611 861970 audio timestamp: 1213369611 893970 audio timestamp: 1213369611 925970 audio timestamp: 1213369611 957970 audio timestamp: 1213369611 989970 audio timestamp: 1213369612 21970 audio timestamp: 1213369612 53970 audio timestamp: 1213369612 85970 audio timestamp: 1213369612 117970 audio timestamp: 1213369612 149970 audio timestamp: 1213369612 181970 audio timestamp: 1213369612 213970 audio timestamp: 1213369612 245970 audio timestamp: 1213369612 277970 audio timestamp: 1213369612 309970 audio timestamp: 1213369612 341970 audio timestamp: 1213369612 373970 video timestamp: 1213369612 453410 video timestamp: 1213369612 453410 audio timestamp: 1213369612 405970 audio timestamp: 1213369612 437970 video timestamp: 1213369612 519409 video timestamp: 1213369612 519409 audio timestamp: 1213369612 469970 audio timestamp: 1213369612 501970 video timestamp: 1213369612 585410 video timestamp: 1213369612 585410 audio timestamp: 1213369612 533970 audio timestamp: 1213369612 565970 video timestamp: 1213369612 651410 video timestamp: 1213369612 651410 audio timestamp: 1213369612 597970 audio timestamp: 1213369612 629970 video timestamp: 1213369612 717409 video timestamp: 1213369612 717409 audio timestamp: 1213369612 661970 audio timestamp: 1213369612 693970 video timestamp: 1213369612 783410 video timestamp: 1213369612 783410 audio timestamp: 1213369612 725970 audio timestamp: 1213369612 757970 video timestamp: 1213369612 849410 video timestamp: 1213369612 849410 audio timestamp: 1213369612 789970 audio timestamp: 1213369612 821970 audio timestamp: 1213369612 853970 video timestamp: 1213369612 915409 video timestamp: 1213369612 915409 audio timestamp: 1213369612 885970 audio timestamp: 1213369612 917970 video timestamp: 1213369612 981410 video timestamp: 1213369612 981410 audio timestamp: 1213369612 949970 audio timestamp: 1213369612 981970 video timestamp: 1213369613 47410 video timestamp: 1213369613 47410 audio timestamp: 1213369613 13970 audio timestamp: 1213369613 45970 video timestamp: 1213369613 113409 video timestamp: 1213369613 113409 audio timestamp: 1213369613 77970 audio timestamp: 1213369613 109970 video timestamp: 1213369613 179410 video timestamp: 1213369613 179410 audio timestamp: 1213369613 141970 audio timestamp: 1213369613 173970 video timestamp: 1213369613 245410 video timestamp: 1213369613 245410 audio timestamp: 1213369613 205970 audio timestamp: 1213369613 237970 video timestamp: 1213369613 311409 video timestamp: 1213369613 311409 audio timestamp: 1213369613 269970 audio timestamp: 1213369613 301970 video timestamp: 1213369613 377410 video timestamp: 1213369613 377410 audio timestamp: 1213369613 333970 audio timestamp: 1213369613 365970 video timestamp: 1213369613 443410 video timestamp: 1213369613 443410 audio timestamp: 1213369613 397970 audio timestamp: 1213369613 429970 video timestamp: 1213369613 509409 video timestamp: 1213369613 509409 audio timestamp: 1213369613 461970 audio timestamp: 1213369613 493970 video timestamp: 1213369613 575410 video timestamp: 1213369613 575410 audio timestamp: 1213369613 525970 audio timestamp: 1213369613 557970 video timestamp: 1213369613 641410 video timestamp: 1213369613 641410 audio timestamp: 1213369613 589970 audio timestamp: 1213369613 621970 video timestamp: 1213369613 707409 video timestamp: 1213369613 707409 audio timestamp: 1213369613 653970 audio timestamp: 1213369613 685970 video timestamp: 1213369613 773410 video timestamp: 1213369613 773410 audio timestamp: 1213369613 717970 audio timestamp: 1213369613 749970 video timestamp: 1213369613 839410 video timestamp: 1213369613 839410 audio timestamp: 1213369613 781970 audio timestamp: 1213369613 813970 video timestamp: 1213369613 905409 video timestamp: 1213369613 905409 audio timestamp: 1213369613 845970 audio timestamp: 1213369613 877970 audio timestamp: 1213369613 909970 video timestamp: 1213369613 971410 video timestamp: 1213369613 971410 audio timestamp: 1213369613 941970 audio timestamp: 1213369613 973970 video timestamp: 1213369614 37410 video timestamp: 1213369614 37410 audio timestamp: 1213369614 5970 audio timestamp: 1213369614 37970 video timestamp: 1213369614 103409 video timestamp: 1213369614 103409 audio timestamp: 1213369614 69970 audio timestamp: 1213369614 101970 video timestamp: 1213369614 169410 video timestamp: 1213369614 169410 audio timestamp: 1213369614 133970 audio timestamp: 1213369614 165970 video timestamp: 1213369614 235410 video timestamp: 1213369614 235410 audio timestamp: 1213369614 197970 audio timestamp: 1213369614 229970 video timestamp: 1213369614 301409 video timestamp: 1213369614 301409 audio timestamp: 1213369614 261970 audio timestamp: 1213369614 293970 video timestamp: 1213369614 367410 video timestamp: 1213369614 367410 audio timestamp: 1213369614 325970 audio timestamp: 1213369614 357970 video timestamp: 1213369614 433410 video timestamp: 1213369614 433410 audio timestamp: 1213369614 389970 audio timestamp: 1213369614 421970 video timestamp: 1213369614 499410 video timestamp: 1213369614 499410 audio timestamp: 1213369614 453970 audio timestamp: 1213369614 485970 video timestamp: 1213369614 565409 video timestamp: 1213369614 565409 audio timestamp: 1213369614 517970 audio timestamp: 1213369614 549970 video timestamp: 1213369614 631409 video timestamp: 1213369614 631409 audio timestamp: 1213369614 581970 audio timestamp: 1213369614 613970 video timestamp: 1213369614 697409 video timestamp: 1213369614 697409 audio timestamp: 1213369614 645970 audio timestamp: 1213369614 677970 video timestamp: 1213369614 763410 video timestamp: 1213369614 763410 audio timestamp: 1213369614 709970 audio timestamp: 1213369614 741970 video timestamp: 1213369614 829410 video timestamp: 1213369614 829410 audio timestamp: 1213369614 773970 audio timestamp: 1213369614 805970 video timestamp: 1213369614 895410 video timestamp: 1213369614 895410 audio timestamp: 1213369614 837970 audio timestamp: 1213369614 869970 video timestamp: 1213369614 961409 video timestamp: 1213369614 961409 audio timestamp: 1213369614 901970 audio timestamp: 1213369614 933970 audio timestamp: 1213369614 965970 video timestamp: 1213369615 27409 video timestamp: 1213369615 27409 audio timestamp: 1213369614 997970 audio timestamp: 1213369615 29970 video timestamp: 1213369615 93409 video timestamp: 1213369615 93409 audio timestamp: 1213369615 61970 audio timestamp: 1213369615 93970 video timestamp: 1213369615 159410 video timestamp: 1213369615 159410 audio timestamp: 1213369615 125970 audio timestamp: 1213369615 157970 video timestamp: 1213369615 225410 video timestamp: 1213369615 225410 audio timestamp: 1213369615 189970
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel