xref: /aosp_15_r20/external/openscreen/cast/README.md (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard# libcast
2*3f982cf4SFabien Sanglard
3*3f982cf4SFabien Sanglardlibcast is an open source implementation of the Cast protocol supporting Cast
4*3f982cf4SFabien Sanglardapplications and streaming to Cast-compatible devices.
5*3f982cf4SFabien Sanglard
6*3f982cf4SFabien Sanglard## Using the standalone implementations
7*3f982cf4SFabien Sanglard
8*3f982cf4SFabien SanglardTo run the standalone sender and receivers together, first you need to install
9*3f982cf4SFabien Sanglardthe following dependencies: FFMPEG, LibVPX, LibOpus, LibSDL2, LibAOM as well as
10*3f982cf4SFabien Sanglardtheir headers (frequently in a separate -dev package). Currently, it is advised
11*3f982cf4SFabien Sanglardthat most Linux users compile LibAOM from source, using the instructions at
12*3f982cf4SFabien Sanglardhttps://aomedia.googlesource.com/aom/. Older versions found in many package
13*3f982cf4SFabien Sanglardmanagement systems have blocking performance issues, causing AV1 encoding to be
14*3f982cf4SFabien Sanglardcompletely unusable. From here, you just need a video to use with the
15*3f982cf4SFabien Sanglardcast_sender, as the cast_receiver can generate a self-signed certificate and
16*3f982cf4SFabien Sanglardprivate key for each session. You can also generate your own RSA private key and
17*3f982cf4SFabien Sanglardeither create or have the receiver automatically create a self signed
18*3f982cf4SFabien Sanglardcertificate with that key. If the receiver generates a root certificate, it will
19*3f982cf4SFabien Sanglardprint out the location of that certificate to stdout.
20*3f982cf4SFabien Sanglard
21*3f982cf4SFabien SanglardNote that we assume that the private key is a PEM-encoded RSA private key,
22*3f982cf4SFabien Sanglardand the certificate is X509 PEM-encoded. The certificate must also have
23*3f982cf4SFabien Sanglardthe CA bit set in the basic constraints. The easiest way to test with a key
24*3f982cf4SFabien Sanglardand certificate is to use ones generated by the cast_receiver standalone
25*3f982cf4SFabien Sanglardapplication.
26*3f982cf4SFabien Sanglard
27*3f982cf4SFabien Sanglard## Developer certificate generation and use
28*3f982cf4SFabien Sanglard
29*3f982cf4SFabien SanglardThe easiest way to generate a private key and certificate is to just run
30*3f982cf4SFabien Sanglardthe cast_receiver with `-g`, and both should be written out to files:
31*3f982cf4SFabien Sanglard
32*3f982cf4SFabien Sanglard```
33*3f982cf4SFabien Sanglard  $ /path/to/out/Default/cast_receiver -g
34*3f982cf4SFabien Sanglard    [INFO:../../cast/receiver/channel/static_credentials.cc(161):T0] Generated new private key for session: ./generated_root_cast_receiver.key
35*3f982cf4SFabien Sanglard    [INFO:../../cast/receiver/channel/static_credentials.cc(169):T0] Generated new root certificate for session: ./generated_root_cast_receiver.crt
36*3f982cf4SFabien Sanglard```
37*3f982cf4SFabien Sanglard
38*3f982cf4SFabien SanglardThese generated credentials can be passed in to start a session, e.g.
39*3f982cf4SFabien Sanglard```
40*3f982cf4SFabien Sanglard./out/Default/cast_receiver -d generated_root_cast_receiver.crt -p generated_root_cast_receiver.key lo0
41*3f982cf4SFabien Sanglard```
42*3f982cf4SFabien Sanglard
43*3f982cf4SFabien SanglardAnd then passed to the cast sender to connect and start a streaming session:
44*3f982cf4SFabien Sanglard```
45*3f982cf4SFabien Sanglard  $ ./out/Default/cast_sender -d generated_root_cast_receiver.crt lo0 ~/video-1080-mp4.mp4
46*3f982cf4SFabien Sanglard```
47*3f982cf4SFabien Sanglard
48*3f982cf4SFabien SanglardWhen running on Mac OS X, also pass the `-x` flag to the cast receiver to
49*3f982cf4SFabien Sanglarddisable DNS-SD/mDNS, since Open Screen does not currently integrate with
50*3f982cf4SFabien SanglardBonjour.
51*3f982cf4SFabien Sanglard
52*3f982cf4SFabien SanglardWhen connecting to a receiver that's not running on the loopback interface
53*3f982cf4SFabien Sanglard(typically `lo` or `lo0`), pass the `-r <receiver IP endpoint>` flag to the
54*3f982cf4SFabien Sanglard`cast_sender` binary.
55