Dear List,

I have some absolute newbie questions.

I have an application that has its own event loop when manipulating/reading sockets, however, I'd like to use live555 to do the rtsp negotiation process with the cameras. I also need my own step-to-step control over the rtsp negotiation process, i.e.

1) describe+setup => port numbers
(do something within my own event loop)
2) play
(do something within my own event loop)
3) teardown
(do something within my own event loop)

The best strategy I came up with, was to modify "testRTSPClient.cpp" and fiddle with the "eventLoopWatchVariable".

After breaking the event loop in "setupNextSubSession", I can access the results of the rtsp negotiation in "main", like this (I also modified to code in such a way that the rtspClient variable is passed as a pointer to "openURL"):

----------
StreamClientState& scs = ((ourRTSPClient*)rtspClient)->scs; // alias

*env << "has subsessions " << scs.session->hasSubsessions() << "\n";

scs.iter = new MediaSubsessionIterator(*scs.session);
scs.subsession = scs.iter->next();

*env << "client port 1 " << scs.subsession->clientPortNum() << "\n";

scs.subsession = scs.iter->next();

*env << "client port 2 " << scs.subsession->clientPortNum() << "\n";
----------

I find live555 a bit .. complicated, because it's mandatory to use live555's own, internal event loop (right?) that is buried quite deep in the code..!

So, questions:

1) I understand that in the rtsp "response handlers" and in the callbacks within them, we create the necessary logic, but how does the program actually run? .. does the event loop explicitly execute the "response handlers"..? where in the code this takes place?

2) Is there any better stragey to achieve (1,2,3) than described here (breaking the event loop, etc.) ?

3) Is there any better way to access the subsession data, other than always creating a *new* MediaSubsessionIterator and then using the "next()" method ? .. iterators should have also "begin()", "previous()", etc. methods, but these seem to me missing in the code..? i.e. one must create a new object and then, after using "next" couple of times, the object becomes useless and throwing segfaults if you try to access data, for example, clientPortNums.

Regards,

Sampsa

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

Reply via email to