Upload live android webcam video to RTP/RTSP Server

Biraj Zalavadia picture Biraj Zalavadia · Nov 29, 2013 · Viewed 14k times · Source

I have already done proper research, but still lack information on the thing I would like to achieve.

So I would like to program an application where the user can record a video and instantly (live) upload the video to a RTP/RTSP Server. The server side will not be a problem. The thing I am unclear about is how to achieve this on the phone-side.

My research so far is that I have to write the video on recording to a local socket rather than to a file, because the 3gp files if written to a file cannot be accessed, until finalized (when the video is stopped and the header information have been written to the video about length and others).

When the socket receives the continuous data, I will need to wrap it into a RTP packet and send it to the remote server. I possibly will also have to do basic encoding first (which is not so important yet).

Does anybody have any idea, if this theory is correct so far. I would also like to know if someone could point me to a few code-snippets of similar approaches, especially for sending the video on the fly to the server. I am not sure yet how to do that.

Thank you very much and best regards

Answer

Ralf picture Ralf · Dec 4, 2013

Your overall approach sounds correct, but there are a couple of things you need to consider.

So I would like to program an application where the user can record a video and instantly (live) upload the video to a RTP/RTSP Server.

  • I'm assuming you want to upload to an RTSP server so that it can redistribute the content to multiple clients?
  • How will you handle the signaling/setup of the RTP session to the RTSP server? You need to notify the RTSP server somehow that a user is going to upload live media so that it can open the appropriate RTP/RTCP sockets etc.
  • How will you handle authentication? Multiple client devices?

My research so far is that I have to write the video on recording to a local socket rather than to a file, because the 3gp files if written to a file cannot be accessed, until finalized (when the video is stopped and the header information have been written to the video about length and others).

Sending frames in real-time over RTP/RTCP is the correct approach. As the capture device captures each frame, you need to encode/compress it and send it over the socket. 3gp, like mp4, is a container format used for file storage. For live capture there is no need to write to a file. The only time this makes sense is e.g. in HTTP Live Streaming or DASH approaches, where media is written to a transport stream or mp4 file, before being served over HTTP.

When the socket receives the continuous data, I will need to wrap it into a RTP packet and send it to the remote server. I possibly will also have to do basic encoding first (which is not so important yet).

I would disagree, encoding is very important, you'll likely never manage to send the video otherwise, and you'll have to deal with issues such as cost (over mobile networks) and just the sheer volume of media depending on resolution and framerate.

Does anybody have any idea, if this theory is correct so far. I would also like to know if someone could point me to a few code-snippets of similar approaches, especially for sending the video on the fly to the server. I am not sure yet how to do that.

Take a look at the spydroid open source project as a starting point. It contains many of the necessary steps including how to configure the encoder, packetise to RTP, send RTCP, as well as some RTSP server functionality. Spydroid sets up an RTSP server so media is encoded and sent once an RTSP client such as VLC is used to setup an RTSP session. Since your application is driven by the phone user wanting to send media to a server, you may need to consider another approach to start the sending, even if you send some kind of message to the server to for instance setup an RTSP session like in spydroid.