| 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 |