For example (to use your example string), "live_video?height=320&width=400&kbps=300&fps=15" would use a completely separate "ServerMediaSubsession" (subclass) object than "live_video?height=320&width=400&kbps=300&fps=30".

This seems infeasible as I want to be able support any number of combination of all 4 of these parameters (plus more parameters like GoP size etc). Seems much more reasonable to have one subclass of ServerMediaSession and ServerMediaSubsession that can read and interpret the parameters on a per connection basis.

You can probably do this by subclassing "RTSPServer" and redefining the virtual function "lookupServerMediaSession()" in your subclass. Plus, of course, you'll need your own subclass of "OnDemandServerMediaSubsession" (it'll be similar to "H264VideoFileServerMediaSubsession" if you're streaming H.264), but you're presumably already doing that.

Once again, when you think of extending the supplied code, you should be thinking first about subclassing, and modify the supplied code only as a last resort (if at all).

Oh I definitely first turned to sub classing, I don't want to modify the library code if I don't have to, and it's probably possible, but as they say the proof is in the pudding and it's easy to say just subclass it until you actually dig in and try and you find the little things that are less than ideal.

I've already got a sub class of RTSPServer, RTSPClientSession, OnDemandServerMediaSubSession and ServerMediaSession. I think I can see at least most of the way there with out modifying the library, but I'll have to do some copy, paste, modify of some the library methods into my own to get there and I always hate doing that if I don't have to.

I've done my own version of lookupServerMediaSession() to do the look up based on the the media name and not the whole urlSuffix (as it's called in the code).

I then turned how to pass the parameters to the ServerMediaSession::generateSDPDescription(), which is not virtual nor takes any parameters, so I'd probably have to create a new ServerMediaSessioN::generateSDPDescription that takes the parameters part of the URI and then re-implements much of what is in your ServerMediaSession::generateSDPDescription() but simply passes the parameter string on to the subsessions sdpLines methods. Then I'll need to over load the OnDemandServerMediaSubsession::sdpLines() method which is virtual but again I'll have to copy much of what is already there and I'll need a way to pass the parameters to sdpLines() so the fact that's it's virtual really doesn't matter. Of course the member variable fSDPLines which is used by sdpLines() is private so not available to a subclass but that's probably OK in this case, I just wont use it. I'm sure the problem goes a bit deeper in the class hierarchy and it's manageable in one form or another. I didn't say I couldn't see how to do it, rather I was asking if anybody else had successfully done it and perhaps what there methodology was.

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

Reply via email to