Looks like the problem is more insidious than I thought.
The way the code starting on line 422 of RTSPServer.cpp is written it
will always assume that the message is complete when it sees the first
double \r\n regardless if it's RTP over UDP or TCP.
However, if the whole message comes in at once (i.e. in the same socket
receive notification), including the content, then the whole message
including the content will be passed on down to the proper handler method.
However if the whole message doesn't come in at one time then only the
part received at the time the double \r\n is detected will be passed on
to the handler method.
In the case of RTP over TCP and interleaving a SET_PARAMETER message
with the video data already streaming the message dribbles in 1 byte at
a time (I'm not sure why this is yet) and therefore the message gets
passed on to the SET_PARAMETER handler method before the entire message
is received.
So something needs to be done to keep the message parsing going in the
case of a RTSP command with a Content-length header and I think you
might want to look into checking whether it's OK that the whole buffer
of received data is passed on to the RTSP handing code, if the server
receives a large chunk of data with a RTSP message interleaved with RTP
data I think you maybe be assuming that all of that data is RTSP and end
up dropping some of the RTP packet data.
I'll continue to look into this for my own edification and I'll make
public any suggestions I have but I assume you Ross will want to come up
with your own solution, and hopefully you'll be quicker than me.
Thanks,
Matt S.
On 6/29/2011 3:14 PM, Matt Schuckmannn wrote:
Looks like there is a bug in RTSPClientSession::handleRequestBytes()
when SET_PARAMETER is sent to the server while streaming RTP over TCP
and after the PLAY command has been issued. The problem is the code
starting on or about line 422 of RTSPServer.cpp assumes that the the
message is complete when a double \r\n sequence is encountered.
However, in the case of SET_PARAMETER and GET_PARAMETER there is a
double \r\n between the headers and the content, so this code is
truncating the command.
I haven't come up with a fix for this yet but I imagine that it
shouldn't be to hard.
FYI if your doing normal RTP over UDP there is no problem, the answer
probably is to find the command handler code for that code and do the
same thing for the TCP case.
Matt S.
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel