It's clear that embedded computers like the Raspberry Pi 1 or the Raspberry Pi 2 do not have the necessary power to perform all the funny media processing stuff such as motion detection, speech recognition, recording, mixing, broadcasting, etc... that we would expect from a modern PC or workstation. Yes, UV4L already natively implements things like on-the-fly Text Overlay and Face Detection at full fps and resolution, but what if we also wanted to do a little bit more magic than that, like processing an additional audio stream and recording the resulting output at the same time, for example? The answer is that the RPi should not be doing any processing at all, really. What we need is a way to simple define the media processing pipeline we prefer and delegate all the job to an external media server such as Kurento. So interfacing with Kurento or even with the Nubomedia cloud built on the top of it will be the objective of the next (major) releases of UV4L.
"Kurento is a WebRTC media server and a set of client APIs making simple the development of advanced video applications for WWW and smartphone platforms. Kurento features include group communications, transcoding, recording, mixing, broadcasting and routing of audiovisual flows.
Kurento also provides advanced media processing capabilities involving computer vision, video indexing, augmented reality and speech analysis. Kurento modular architecture makes simple the integration of third party media processing algorithms (i.e. speech recognition, sentiment analysis, face recognition, etc.), which can be transparently used by application developers as the rest of Kurento built-in features."
A new release of the UV4L Streaming Server is out! From now on it will be possible to create Multi Peer-to-Peer WebRTC Conferences with a single mouse click! No configuration, no external plug-in's required!
To get the latest release, please upgrade the packages for Raspbian. Packages for x86 will be out soon.
An interesting application of the recent addition of the WebRTC extension for the UV4L Streaming Server is Audio/Video Conferencing in pure HTML5 (NO configuration required).
If you want to try it out, just install UV4L and visit this Web Page with any browser (in the future this page will be part of the UV4L Streaming Server as well).
Not only you will be able to stream your local media to all the participants of the conference, but from the same page you will be also able to add any Remote UV4L Peers (i.e. a RaspberryPi2 with a Camera and Microphone attached) to the same conference.
Shortly after the announcement of the first release of the WebRTC extension for the UV4L Streaming Server, here's another update! As promised, Audio from an input device (i.e. microphone) can now be optionally added to the live stream!
A pure HTML5 test page is here.
Please read the documentation for all the available options.
Video & Audio streams have been successfully tested on Chrome, Opera, Firefox and Android. Due to a bug in Firefox prior to version 37.0, when audio is enabled, Firefox does not display the Video track. The problem has been fixed since v.37.
Yes, it's true! The native WebRTC extension for the UV4L Streaming Server is now ready!
At the moment, this extension is available for Raspberry Pi 2 only. Packages for x86 will be provided soon. The Raspberry Pi 1 will not be supported. Again, do NOT install the WebRTC extension on the Rasperry Pi 1.
To know how to install UV4L and the WebRTC extension please refer to the appropriate documentation section. Here are the instructions for Raspbian.
Support for audio is work-in-progress. Among the nice things which are now possible there are NAT traversal, VP8 encoding, efficient adaptive streaming, echo cancellation, encryption, very short delays, etc...
Once installed, to quickly try it, go to the Streaming Server page, navigate to the WebRTC Page and press "Start" to get a live stream. You can take the source of that HTML5 page and modify/use it as you prefer.
Tested on recent versions of Firefox, Chrome, Opera, Android. Safari does not seem to support WebRTC (deliberately).
A first screenshot (~200ms delay example) is here.