Qt WebRTC demo
This is a very simple demonstration of how to stream from a native application to the browser using WebRTC.
But first, a small demonstration of how a call is set up in WebRTC. A call is established by exchanging SDP and ICE information using some unspecified method. In the movie below, I simply copy-paste the required information from a 'sender' web page to a 'receiver' web page. The sender is the one that captures the webcam and streams it to the receiver where it is displayed in a video tag.
(best viewed full screen)
If you'd like to try this yourself, these are the pages:
I've noticed that the copy-pasting needs to be done rather swiftly to get it to work.
Although my hand waving skills are undoubtedly very impressive, it would be great to be able to stream something else to the browser. The following video demonstrates a small native Qt application which streams the contents of a widget to a browser. The call set up is still done using the copy-paste technique, to keep the code in the application to a minimum.
The source of this application is available in two formats:
- A patch against the WebRTC source tree (I used revision 5628).
- First, do the 'gclient config' and 'gclient sync' steps as described on that page.
- Apply the patch
- Go to the
trunk/talk/examples/qtwebrtc_textedit
directory and run therunme.sh
script (runs theuic
andmoc
commands, I didn't figure out how to do this in the gyp file) - Run the
./webrtc/build/gyp_webrtc
command to generate the ninja build files - Run ninja to build everything
- A tarball containing a qmake project file to build everything.
- Make sure you've got WebRTC compiled somewhere.
- Extract the tarball somewhere
- Run 'qmake WEBRTCTRUNK=/path/to/webrtc/trunk' and make
Although the source code itself probably also works in Windows, I've only tested it on Linux and the patch/qmake file are Linux specific. For the qmake project, you may need to remove some libraries or add some extra libraries, depending on the WebRTC build settings on your platform. The project file is for Qt 5.
Big thanks to Kam for making the modified peerconnection code available, it really helped getting me started using the native WebRTC library.
Edit 2022: The aforementioned patch is undoubtedly no longer usable with the current source code version. But Qt now comes with QtWebEngine, basically the Chromium browser code that can be controlled using Qt. This way, it's possible to use a Qt/JavaScript hybrid program to get WebRTC working in a Qt application, see the qtwebenginewebrtc demo code on GitHub.