I use Live555 to stream H.264 from the embedded borad and find a bug:

for my borad, user could change video's resolution, at beginning user recive H.264 from the borad , it plays well, but if user disconnect then reconnect with different resolution, client player does not decode frames correctly because SPS and PPS are not the same as previous caused by fSPLines is not NULL (see below code) and media field of SDP doesn't be set again.

Unfortunately, for most servers, the current behavior - setting up "fSDPLines" only once, when the first client connects - will be the desired behavior, because (for most servers) the stream's SDP parameters will not change from client to client. Also, in some cases, it might be costly to figure out the SDP parameters (e.g., it might involve doing some reading/parsing of the input source), so we would not want to generate these more than once. Therefore the current default behavior should remain.

What you can do, however, is reimplement the "sdpLines()" virtual function in your "OnDemandServerMediaSubsession" subclass, as follows:

char const* yourSubclass::sdpLines() {
        delete[] fSDPLines; fSDPLines = NULL;

        return OnDemandServerMediaSubsession::sdpLines();
}

Alternatively, you could just add
        delete[] fSDPLines; fSDPLines = NULL;
to your implementation of the "createNewRTPSink()" virtual function.

For either of these solutions to work, the definition of "fSDPLines" in "liveMedia/include/OnDemandServerMediaSubsession.hh" will need to be changed from "private" to protected". (I'll make this change in the next release of the software.)

I'm curious, though. You talk about the user "reconnect(ing) with a different resolution". How are you doing this in the RTSP protocol? Because you must be creating your "H264VideoRTPSink" with a different "sprop_parameter_sets_str" parameter each time (in order for its SDP description to change), you must be making the "sprop_parameter_sets_str" parameter be somehow dependent upon the client-desired resolution. How are you doing this?
--

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