first I’m gonna try to explain what exactly I want to do:
I have an IP Camera which has a circular buffer from which I want to read the data. The communication between camera and my application takes place over RTSP, which means I have a TCP connection to the camera.
The camera itself is capable of streaming the data over RTP.
Now the important part is, that when the camera starts streaming it’s stuff, my application shall NOT read back the data. There is some kind of passive datalogger in the network which is responsible for recording the data.
The problem is, that as long as the camera is streaming, the Socket from my application needs to be opened, otherwise the camera will stop streaming.
So lets see what I have so far:
I open a socket, which connects to the camera and then sends the needed RTSP commands OPTIONS, DESCRIBE, SETUP and then PLAY. After this my socket remains open and the camera streams.
Now here comes the difficult part:
As I already said, I can not parse all the UDP data. But how can I then determine when the stream has ended? On wireshark I see that when the stream finishes I get a RTCP message which says Sender Report Goodbye.
This is the point where I would want to close my socket, but how can I determine that the camera has finished without parsing any UDP data?
Okay it is possible to determine the end of the Stream.
There are two lines of communication after the Stream has started.
There is the
RTPStream, which contains all the raw data. Besides that there is someRTCPData, which can be used to control the stream.The important part is, that the data is sent on different Ports. These ports are defined in the
RTSP SETUPRequest. Now while the camera is streaming, the data incoming on theRTPcan just be ignored as intended, while you can open a socket to listen on theRTCPport. There you get someSender Reportsuntil the stream is finished ( with a lastSender Report Goodbye). If you read this message you know you can close, since the stream has finished.Note: On some devices you may need to send some
Receiver Reportsas answer to theSender Reportsotherwise the stream may stop, since the device thinks the client timed out.