Title: Streaming to Twitch using OpenBSD | |
Author: Solène | |
Date: 06 July 2019 | |
Tags: openbsd gaming | |
Description: | |
### Introduction | |
If you ever wanted to make a twitch stream from your OpenBSD system, | |
this is | |
now possible, thanks to OpenBSD developer thfr@ who made a wrapper | |
named | |
**fauxstream** using ffmpeg with relevant parameters. | |
[GitHub repository: fauxstream](https://github.com/rfht/fauxstream) | |
The setup is quite easy, it only requires a few steps and searching on | |
Twitch | |
website two informations, hopefully, to ease the process, I found the | |
links for | |
you. | |
You will need to make an account on twitch, get your api key (a long | |
string of | |
characters) which **should stay secret** because it allow anyone having | |
it to | |
stream on your account. | |
### Preparation steps | |
1. Register / connect on twitch | |
2. Get your Stream API key at | |
https://www.twitch.tv/YOUR_USERNAME/dashboard/settings (from this | |
page you | |
can also choose if twitch should automatically saves streams as | |
videos for | |
14 days) | |
3. [Choose your nearest server from this | |
page](https://stream.twitch.tv/ingests/) | |
4. Add in your shell environnement a variable | |
TWITCH=rtmp://SERVER_FROM_STEP_3/YOUR_API_KEY | |
5. Get fauxstream with `cvs -d [email protected]:/cvs checkout | |
-P projects/fauxstream/` | |
6. `chmod u+x fauxstream/fauxstream` | |
7. [Allow recording of the | |
microphone](https://www.openbsd.org/faq/faq13.html#recordaudio) | |
8. [Allow recording of the output | |
sound](https://www.openbsd.org/faq/faq13.html#recordmon) | |
Once you have all the pieces, start a new shell and check the $TWITCH | |
variable | |
is correctly set, it should looks like | |
*rtmp://live-ams.twitch.tv/app/live_2738723987238_jiozjeoizaeiazheizahe | |
zah* | |
(this is not a real api key). | |
### Using fauxstream | |
**fauxstream** script comes with a README.md file containing some | |
useful | |
informations, you can also check the usage | |
View usage: | |
$ ./fauxstream | |
### Starting a stream | |
When you start a stream, **take care your API key isn't displayed on | |
the | |
stream**! I redirect stderr to **/dev/null** so all the output | |
containing the | |
key is not displayed. | |
Here is the settings I use to stream: | |
$ ./fauxstream -m -vmic 5.0 -vmon 0.2 -r 1920x1080 -f 20 -b 4000 | |
$TWITCH 2> /dev/null | |
If you choose a smaller resolution than your screen, imagine a square | |
of that | |
resolution starting at the top left corner of your screen, the content | |
of this | |
square will be streamed. | |
I recommend **bwm-ng** package (I wrote a ports of the week article | |
about it) | |
to view your realtime bandwidth usage, if you see the bandwidth reach a | |
fixed | |
number this mean you reached your bandwidth limit and the stream is | |
certainly | |
not working correctly, you should lower resolution, fps or bitrate. | |
I recommend doing a few tries before you want to stream, to be sure | |
it's ok. | |
Note that the flag `-a` may be be required in case of audio/video | |
desynchronization, there is no magic value so you should guess and try. | |
### Adding webcam | |
I found an easy trick to add webcam on top of a video game. | |
$ mpv --no-config --video-sync=display-vdrop --framedrop=vo --ontop | |
av://v4l2:/dev/video1 | |
The trick is to use mpv to display your webcam video on your screen and | |
use the | |
flag to make it stay on top of any other window (this won't work with | |
cwm(1) | |
window manager). Then you can resize it and place it where you want. | |
What you | |
see is what get streamed. | |
The others mpv flags are to reduce lag between the webcam video stream | |
and the | |
display, mpv slowly get a delay and after 10 minutes, your webcam will | |
be | |
lagging by like 10 seconds and will be totally out of sync between the | |
action | |
and your face. | |
Don't forget to use chown to change the ownership of your video device | |
to your | |
user, by default only root has access to video devices. This is reset | |
upon | |
reboot. | |
### Viewing a stream | |
For less overhead, people can watch a stream using `mpv` software, I | |
think this | |
will require `youtube-dl` package too. | |
Example to view me streaming: | |
$ mpv https://www.twitch.tv/seriphyde | |
This would also work with a recorded video: | |
$ mpv https://www.twitch.tv/videos/447271018 |