Can I pick your brains please.
I’m trying to work out what technology to use;
Mobile Linux computer connected via 3G/GPRS to internet.
The computer is likely to encounter fluctuating connectivity where it
connectivity drops between low GPRS signal, full HDPSA signal and
I’m trying to find a technology to stream [live] video from a V4L2
device to ‘the internet’ over the able connection. The connection only
needs to be one way.
Ideally I need to work out something that makes a 'best effort’
judgement based on the amount/quality of bandwidth available and and
streams the best picture it can. Eg. Where loads of bandwidth is
available, there is a nice picture and where there isn’t, there isn’t a
nice picture, but there isn’t nothing.
Does anything like this exist?
Ideally something I can pull the video out in something resembling a
sane format would be cool.
Bonus points if it’s easily scriptable…
The only thing that comes to mind is something built around ffmpeg /
ffserver. Lots of codecs available to choose from and streaming
transport protocols like rtsp.
While it’d be easy to set this up to stream at a constant bit rate, I’m
not sure how you would tell ffmpeg to modify the bit rate on the fly and
you’d also need to know how much bandwidth was available (this could be
determined by a simple script polling a dongle for current network type
and signal strength).
If the device creating the video stream is stationary, you can use a
directional antenna pointed at a 3G mast to ensure the best signal
possible and then make a pretty good judgement on the amount of
bandwidth you have available and that it’s going to remain fairly
If the device creating the video stream is moving, you’re in a world of
pain. You can pretty much guarantee that there will be times when you
are without signal (i.e available bandwidth = 0, latency = 5-10s at
best) and will not be able to stream anything. In this situation, to
maintain a constant stream to an end user you’d probably want to stream
at a lowish bitrate to an intermediary server that can maintain a large
buffer. The video stream can buffer in the broadcasting device until
signal is available, then replenish the buffer in the intermediary
server. This way the intermediary server can broadcast a fairly constant
That latter part is of course theoretical, I don’t know if it would be
easily implemented with avaliable free software packages.