mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-06 22:42:35 +00:00
webrtc: update for move to gst-examples
- Integrate with the build system. - Some README updates. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-examples/-/merge_requests/16>
This commit is contained in:
parent
a88e90fa9e
commit
e1c3dad258
6 changed files with 72 additions and 71 deletions
11
meson.build
11
meson.build
|
@ -3,6 +3,12 @@ project('gst-examples', 'c', version : '1.17.1.1', license : 'LGPL')
|
|||
cc = meson.get_compiler('c')
|
||||
m_dep = cc.find_library('m', required : false)
|
||||
|
||||
if cc.get_id() == 'msvc'
|
||||
add_project_arguments(
|
||||
cc.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
|
||||
language : 'c')
|
||||
endif
|
||||
|
||||
glib_dep = dependency('glib-2.0', version: '>= 2.38',
|
||||
fallback: ['glib', 'libglib_dep'])
|
||||
gio_dep = dependency('gio-2.0',
|
||||
|
@ -18,6 +24,11 @@ gstplayer_dep = dependency('gstreamer-player-1.0', version: '>= 1.7.1.1',
|
|||
fallback: ['gst-plugins-bad', 'gstplayer_dep'])
|
||||
gsttag_dep = dependency('gstreamer-tag-1.0',
|
||||
fallback: ['gst-plugins-base', 'tag_dep'])
|
||||
gstwebrtc_dep = dependency('gstreamer-webrtc-1.0', version: '>= 1.14.0',
|
||||
fallback: ['gst-plugins-bad', 'gstwebrtc_dep'])
|
||||
gstsdp_dep = dependency('gstreamer-webrtc-1.0',
|
||||
fallback : ['gst-plugins-bad', 'gstwebrtc_dep'])
|
||||
|
||||
subdir('playback')
|
||||
subdir('network')
|
||||
subdir('webrtc')
|
||||
|
|
|
@ -14,39 +14,35 @@ If you don't want to use the binaries provided by GStreamer or on your Linux dis
|
|||
|
||||
The easiest way to build the webrtc plugin and all the plugins it needs, is to [use Cerbero](https://gstreamer.freedesktop.org/documentation/installing/building-from-source-using-cerbero.html). These instructions should work out of the box for all platforms, including cross-compiling for iOS and Android.
|
||||
|
||||
One thing to note is that it's written in Python 2, so you may need to replace all instances of `./cerbero-uninstalled` (or `cerbero`) with `python2 cerbero-uninstalled` or whatever Python 2 is called on your platform.
|
||||
|
||||
## Building GStreamer manually from source
|
||||
|
||||
For hacking on the webrtc plugin, you may want to build manually using the git repositories:
|
||||
|
||||
- http://gitlab.freedesktop.org/gstreamer/gstreamer
|
||||
- http://gitlab.freedesktop.org/gstreamer/gst-plugins-base
|
||||
- http://gitlab.freedesktop.org/gstreamer/gst-plugins-good
|
||||
- http://gitlab.freedesktop.org/gstreamer/gst-plugins-bad
|
||||
- http://gitlab.freedesktop.org/libnice/libnice
|
||||
|
||||
Or with Meson gst-build:
|
||||
|
||||
https://gitlab.freedesktop.org/gstreamer/gst-build/
|
||||
|
||||
You may need to install the following packages using your package manager:
|
||||
|
||||
json-glib, libsoup, libnice, libnice-gstreamer1 (the gstreamer plugin for libnice, called gstreamer1.0-nice Debian)
|
||||
|
||||
### Ubuntu 18.04
|
||||
|
||||
Here are the commands for Ubuntu 18.04.
|
||||
|
||||
```
|
||||
sudo apt-get install -y gstreamer1.0-tools gstreamer1.0-nice gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-plugins-good libgstreamer1.0-dev git libglib2.0-dev libgstreamer-plugins-bad1.0-dev libsoup2.4-dev libjson-glib-dev
|
||||
```
|
||||
|
||||
For hacking on the webrtc plugin, you may want to build manually using the git repositories:
|
||||
|
||||
- http://cgit.freedesktop.org/gstreamer/gstreamer
|
||||
- http://cgit.freedesktop.org/gstreamer/gst-plugins-base
|
||||
- http://cgit.freedesktop.org/gstreamer/gst-plugins-good
|
||||
- http://cgit.freedesktop.org/gstreamer/gst-plugins-bad
|
||||
- http://cgit.freedesktop.org/libnice/libnice
|
||||
|
||||
You can build these with either Autotools gst-uninstalled:
|
||||
|
||||
https://arunraghavan.net/2014/07/quick-start-guide-to-gst-uninstalled-1-x/
|
||||
|
||||
Or with Meson gst-build:
|
||||
|
||||
https://cgit.freedesktop.org/gstreamer/gst-build/
|
||||
|
||||
You may need to install the following packages using your package manager:
|
||||
|
||||
json-glib, libsoup, libnice, libnice-gstreamer1 (the gstreamer plugin for libnice, called gstreamer1.0-nice Debian)
|
||||
|
||||
## Filing bugs
|
||||
|
||||
Please only file bugs about the demos here. Bugs about GStreamer's WebRTC implementation should be filed on the [GStreamer bugzilla](https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&component=gst-plugins-bad).
|
||||
Please only file bugs about the demos here. Bugs about GStreamer's WebRTC implementation should be filed on the [GStreamer gitlab](https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/new).
|
||||
|
||||
You can also find us on IRC by joining #gstreamer @ FreeNode.
|
||||
|
||||
|
@ -58,6 +54,18 @@ http://blog.nirbheek.in/2018/02/gstreamer-webrtc.html
|
|||
|
||||
## Examples
|
||||
|
||||
### Building
|
||||
|
||||
Most of the examples that require a build process can be built using the meson build system in the top-level gst-examples directory by using the following commands:
|
||||
|
||||
```console
|
||||
cd /path/to/gst-examples
|
||||
meson _builddir
|
||||
ninja -C _builddir
|
||||
```
|
||||
|
||||
Build outputs will be placed in the directory `_builddir`.
|
||||
|
||||
### sendrecv: Send and receive audio and video
|
||||
|
||||
* Serve the `js/` directory on the root of your website, or open https://webrtc.nirbheek.in
|
||||
|
@ -67,12 +75,6 @@ http://blog.nirbheek.in/2018/02/gstreamer-webrtc.html
|
|||
|
||||
#### Running the C version
|
||||
|
||||
* Build the sources in the `gst/` directory on your machine. Use `make` or
|
||||
|
||||
```console
|
||||
$ gcc webrtc-sendrecv.c $(pkg-config --cflags --libs gstreamer-webrtc-1.0 gstreamer-sdp-1.0 libsoup-2.4 json-glib-1.0) -o webrtc-sendrecv
|
||||
```
|
||||
|
||||
* Run `webrtc-sendrecv --peer-id=ID` with the `id` from the browser. You will see state changes and an SDP exchange.
|
||||
|
||||
#### Running the Python version
|
||||
|
@ -104,13 +106,7 @@ You can optionally specify the server URL too (it defaults to wss://webrtc.nirbh
|
|||
|
||||
### multiparty-sendrecv: Multiparty audio conference with N peers
|
||||
|
||||
* Build the sources in the `gst/` directory on your machine
|
||||
|
||||
```console
|
||||
$ gcc mp-webrtc-sendrecv.c $(pkg-config --cflags --libs gstreamer-webrtc-1.0 gstreamer-sdp-1.0 libsoup-2.4 json-glib-1.0) -o mp-webrtc-sendrecv
|
||||
```
|
||||
|
||||
* Run `mp-webrtc-sendrecv --room-id=ID` with `ID` as a room name. The peer will connect to the signalling server and setup a conference room.
|
||||
* Run `_builddir/multiparty-sendrecv/gst/mp-webrtc-sendrecv --room-id=ID` with `ID` as a room name. The peer will connect to the signalling server and setup a conference room.
|
||||
* Run this as many times as you like, each will spawn a peer that sends red noise and outputs the red noise it receives from other peers.
|
||||
- To change what a peer sends, find the `audiotestsrc` element in the source and change the `wave` property.
|
||||
- You can, of course, also replace `audiotestsrc` itself with `autoaudiosrc` (any platform) or `pulsesink` (on linux).
|
||||
|
|
|
@ -2,14 +2,17 @@ tests = [
|
|||
['basic', 'basic.py'],
|
||||
]
|
||||
|
||||
test_deps = [certs]
|
||||
if openssl.found()
|
||||
test_deps = [certs]
|
||||
|
||||
foreach elem : tests
|
||||
test(elem.get(0),
|
||||
py3,
|
||||
depends: test_deps,
|
||||
args : files(elem.get(1)),
|
||||
env : ['PYTHONPATH=' + join_paths(meson.source_root(), 'sendrecv', 'gst') + ':' + join_paths(meson.source_root(), 'signalling'),
|
||||
'TEST_HTML_SOURCE=' + join_paths(meson.source_root(), 'sendrecv', 'js'),
|
||||
'TEST_CA_CERT_PATH=' + join_paths(meson.build_root(), 'signalling')])
|
||||
endforeach
|
||||
foreach elem : tests
|
||||
test(elem.get(0),
|
||||
py3,
|
||||
depends: test_deps,
|
||||
args : files(elem.get(1)),
|
||||
# XXX: This PYTHONPATH hack is fun
|
||||
env : ['PYTHONPATH=' + join_paths(meson.source_root(), 'sendrecv', 'gst') + ':' + join_paths(meson.source_root(), 'signalling'),
|
||||
'TEST_HTML_SOURCE=' + join_paths(meson.source_root(), 'sendrecv', 'js'),
|
||||
'TEST_CA_CERT_PATH=' + join_paths(meson.build_root(), 'signalling')])
|
||||
endforeach
|
||||
endif
|
||||
|
|
|
@ -1,31 +1,12 @@
|
|||
project('gstwebrtc-demo', 'c',
|
||||
meson_version : '>= 0.48',
|
||||
license: 'BSD-2-Clause',
|
||||
default_options : [ 'warning_level=1',
|
||||
'buildtype=debug' ])
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
|
||||
if cc.get_id() == 'msvc'
|
||||
add_project_arguments(
|
||||
cc.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
|
||||
language : 'c')
|
||||
endif
|
||||
|
||||
gst_req = '>= 1.14.0'
|
||||
gst_dep = dependency('gstreamer-1.0', version : gst_req,
|
||||
fallback : ['gstreamer', 'gst_dep'])
|
||||
gstsdp_dep = dependency('gstreamer-sdp-1.0', version : gst_req,
|
||||
fallback : ['gst-plugins-base', 'sdp_dep'])
|
||||
gstwebrtc_dep = dependency('gstreamer-webrtc-1.0', version : gst_req,
|
||||
fallback : ['gst-plugins-bad', 'gstwebrtc_dep'])
|
||||
|
||||
libsoup_dep = dependency('libsoup-2.4', version : '>=2.48',
|
||||
fallback : ['libsoup', 'libsoup_dep'])
|
||||
json_glib_dep = dependency('json-glib-1.0',
|
||||
fallback : ['json-glib', 'json_glib_dep'])
|
||||
|
||||
|
||||
py3_mod = import('python3')
|
||||
py3 = py3_mod.find_python()
|
||||
|
||||
|
|
|
@ -7,4 +7,10 @@ if [ $# -eq 1 ]; then
|
|||
OUTDIR=$1/
|
||||
fi
|
||||
|
||||
openssl req -x509 -newkey rsa:4096 -keyout ${OUTDIR}key.pem -out ${OUTDIR}cert.pem -days 365 -nodes -subj "/CN=example.com"
|
||||
output=$(openssl req -x509 -newkey rsa:4096 -keyout ${OUTDIR}key.pem -out ${OUTDIR}cert.pem -days 365 -nodes -subj "/CN=example.com" 2>&1)
|
||||
|
||||
ret=$?
|
||||
if [ ! $ret -eq 0 ]; then
|
||||
echo "${output}" 1>&2
|
||||
exit $ret
|
||||
fi
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
generate_certs = find_program('generate_cert.sh')
|
||||
certs = custom_target(
|
||||
simple_server = files('simple_server.py')
|
||||
|
||||
openssl = find_program ('openssl', required : false)
|
||||
if openssl.found()
|
||||
# TODO: a better cert generation algorithm that doesn't rely on calling openssl
|
||||
generate_certs = find_program('generate_cert.sh')
|
||||
certs = custom_target(
|
||||
'generate-certs',
|
||||
command: [generate_certs, '@OUTDIR@'],
|
||||
output : ['key.pem', 'cert.pem']
|
||||
)
|
||||
|
||||
simple_server = files('simple_server.py')
|
||||
)
|
||||
endif
|
||||
|
|
Loading…
Reference in a new issue