anonstream/README.md

72 行
3.1 KiB
Markdown
Raw 通常表示 履歴

2021-04-10 02:10:22 +09:00
# onion-livestreaming
2021-04-10 03:24:40 +09:00
Recipe for livestreaming over the Tor network
This was originally made for fun over the course of five days and hence sloppiness may pervade (especially in the CSS).
## Dependencies
* [Flask](https://github.com/pallets/flask)
* [Flask-HTTPAuth](https://github.com/miguelgrinberg/Flask-HTTPAuth) (to identify the broadcaster in chat)
* [Flask-Compress](https://github.com/colour-science/flask-compress) (should probably be optional)
2021-04-10 03:33:56 +09:00
* Knowledge of FFmpeg and Tor
2021-04-10 03:24:40 +09:00
## Features
* Twitch-looking web interface
* Change stream title as you're streaming
* Viewer count
* Stream on/off indicator (and with JavaScript, playback error messages with prompts to refresh)
* Chat with custom names & tripcodes
* Ban chatters / hide messages
* Almost works without JavaScript
## Issues
* JavaScript required for HLS playback (this is being worked on)
* CSS is spaghetti (e.g. the PureCSS framework is used sometimes when it might not need be)
* Fonts are hard-coded and you might not have them
* AFAIK the FFmpeg command in `stream.sh` only works on Linux, change it for other OSs
* Stream delay of at least 40 seconds. Hopefully this will decrease when congestion control gets into Tor: https://youtu.be/watch?v=zQDbfHSjbnI
* Most of the code is in `app.py`; it should be split into several files with more narrow purposes.
## How it works
* FFmpeg creates an HLS stream,
* Flask creates a website interface for the stream,
* tor makes the website accessible at an onion address
2021-04-10 03:31:27 +09:00
## Explanation of the FFmpeg command in `stream.sh`
2021-04-10 03:24:40 +09:00
TODO
2021-04-10 03:31:27 +09:00
See https://www.martin-riedl.de/2018/08/24/using-ffmpeg-as-a-hls-streaming-server-part-1/ https://www.martin-riedl.de/2018/08/24/using-ffmpeg-as-a-hls-streaming-server-part-2/ as `stream.sh` are based on that.
2021-04-10 03:24:40 +09:00
## Tutorial
To run this yourself, get this source code. As the project currently exists you might need to change some things:
* If you're on Windows `stream.sh` will be wrong for you and so will all the fonts in `app.py`.
* If you're on macOS `stream.sh` might need to be changed a bit and you might not have the fonts in `app.py`.
* If you're on Linux `stream.sh` will probably be alright but you might not have all the fonts in `app.py`.
Lots of the stuff in `app.py` and `stream.sh` should at some point be moved into a configuration file that you can edit more easily.
Assuming you've dealt with that, this is what you have to do.
### FFmpeg
Go to the project root and type `sh stream.sh`. This starts the livestream.
### Flask
Go to the project root and type `flask run`. This starts the websever.
### tor
Now your webserver is running on port 5000 (or whichever port you set it to, if you did that). We need to tell tor to create a hidden service and to point it at port 5000.
In your [torrc](https://support.torproject.org/tbb/tbb-editing-torrc/), add these two lines
```
HiddenServiceDir $PROJECT_ROOT/hidden_service
HiddenServicePort 80 127.0.0.1:5000
```
where `$PROJECT_ROOT` is the root folder of this project. When you reload tor it will create the `hidden_service` directory and your website will be online. Your onion address is in `hidden_service/hostname`.