66 lines
2.7 KiB
Markdown
66 lines
2.7 KiB
Markdown
# External Libraries in Open Screen
|
|
|
|
Currently, external libraries are used exclusively by the standalone sender and
|
|
receiver applications, for compiling in dependencies used for video decoding and
|
|
playback.
|
|
|
|
The decision to link external libraries is made manually by setting the GN args.
|
|
For example, a developer wanting to link all the libraries for the standalone
|
|
sender and receiver executables might add the following to `gn args out/Default`:
|
|
|
|
```python
|
|
is_debug=true
|
|
have_ffmpeg=true
|
|
have_libsdl2=true
|
|
have_libopus=true
|
|
have_libvpx=true
|
|
```
|
|
|
|
On some versions of Debian, the following apt-get command will install all of
|
|
the necessary external libraries for Open Screen:
|
|
|
|
```sh
|
|
sudo apt-get install libsdl2-2.0 libsdl2-dev libavcodec libavcodec-dev
|
|
libavformat libavformat-dev libavutil libavutil-dev
|
|
libswresample libswresample-dev libopus0 libopus-dev
|
|
libvpx5 libvpx-dev
|
|
```
|
|
|
|
Similarly, on some versions of Raspian, the following command will install the
|
|
necessary external libraries, at least for the standalone receiver. Note that
|
|
this command is based off of the packages linked in the [sysroot](sysroot.gni):
|
|
|
|
```sh
|
|
sudo apt-get install libavcodec58=7:4.1.4* libavcodec-dev=7:4.1.4*
|
|
libsdl2-2.0-0=2.0.9* libsdl2-dev=2.0.9*
|
|
libavformat-dev=7:4.1.4*
|
|
```
|
|
|
|
Note: release of these operating systems may require slightly different
|
|
packages, so these `sh` commands are merely a potential starting point.
|
|
|
|
Finally, note that generally the headers for packages must also be installed.
|
|
In Debian Linux flavors, this usually means that the `*-dev` version of each
|
|
package must also be installed. In the example above, this looks like having
|
|
both `libavcodec` and `libavcodec-dev`.
|
|
|
|
## Standalone Sender
|
|
|
|
The standalone sender uses FFMPEG, LibOpus, and LibVpx for encoding video and
|
|
audio for sending. When the build has determined that [have_external_libs](
|
|
../../cast/standalone_sender/BUILD.gn
|
|
) is set to true, meaning that all of these libraries are installed, then
|
|
the VP8 and Opus encoders are enabled and actual video files can be sent
|
|
to standalone receiver instances. Without these dependencies, the standalone
|
|
sender cannot properly function (contrasted with the standalone receiver,
|
|
which can use a dummy player).
|
|
|
|
## Standalone Receiver
|
|
|
|
The standalone receiver also uses FFMPEG, for decoding the video stream encoded
|
|
by the sender, and also uses LibSDL2 to create a surface for decoding video.
|
|
Unlike the sender, the standalone receiver can work without having
|
|
its [have_external_libs](../.../cast/standalone_receiver/BUILD.gn) set to true,
|
|
through the use of its
|
|
[Dummy Player](../../cast/standalone_receiver/dummy_player.h).
|