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