{"id":17930956,"url":"https://github.com/alphapialpha/lets-stream","last_synced_at":"2026-04-24T23:33:18.053Z","repository":{"id":259908940,"uuid":"868095740","full_name":"alphapialpha/lets-stream","owner":"alphapialpha","description":"Easy to setup dockerized Nginx / RTMP server featuring multi-user authentication and optional per-user push service to Twitch, YT etc.","archived":false,"fork":false,"pushed_at":"2024-10-28T15:10:23.000Z","size":16,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-10T03:50:00.657Z","etag":null,"topics":["nginx","nginx-server","node-js","rtmp","rtmp-server","rtmp-stream","streaming"],"latest_commit_sha":null,"homepage":"","language":"XSLT","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alphapialpha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-05T13:17:37.000Z","updated_at":"2024-10-28T15:10:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"d8208e3d-af73-4437-9feb-9ba4c151ab1c","html_url":"https://github.com/alphapialpha/lets-stream","commit_stats":null,"previous_names":["alphapialpha/lets-stream"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alphapialpha/lets-stream","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphapialpha%2Flets-stream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphapialpha%2Flets-stream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphapialpha%2Flets-stream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphapialpha%2Flets-stream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alphapialpha","download_url":"https://codeload.github.com/alphapialpha/lets-stream/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphapialpha%2Flets-stream/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32245148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nginx","nginx-server","node-js","rtmp","rtmp-server","rtmp-stream","streaming"],"created_at":"2024-10-28T21:18:47.220Z","updated_at":"2026-04-24T23:33:18.038Z","avatar_url":"https://github.com/alphapialpha.png","language":"XSLT","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lets-stream\nEasy to setup dockerized Nginx / RTMP server with multi-user authentication as an ingest for RTMP streams. \nThe system furthermore provides outgoing RTMP streams for any incoming stream also protected by (optional) authentication for easy integration into your OBS, to play back in VLC, etc.\nIt can also automatically push any incoming stream to multiple external services at once like Twitch, YT, etc.\n\n## Prerequisites\n- docker \u0026 docker compose\n- git client\n\n## Setup\n1. clone this repository: ```git clone https://github.com/AlphaPiAlpha/lets-stream.git```\n2. enter the lets-stream folder: ```cd lets-stream```\n3. copy the auth/auth.json.example to auth/auth.json: ```cp auth/auth.json.example auth/auth.json```\n5. edit the auth.json (see \"auth.json explained\" section below)\n6. build it: ```docker compose build```\n7. run it: ```docker compose up -d```\n\n##  \"auth.json\" explained\nThe example auth.json file looks like this and it consists of three main sections: \n- _**publish**_ for incoming streams pushed to the server\n- _**play**_ for outgoing streams to play back somewhere else\n- _**stream**_ for streams to be pushed to third party services, e.g. Twitch.\n\nFor the ```publish``` and ```play``` section the *__name__* value always represents the name of the stream protected by the *__key__* value.\nFor the ```publish``` section the *__name__* value represents the name of the stream while *__url__* contains the url the stream will be automatically pushed to.\n\n\u003e[!IMPORTANT]\nAll entries for name, key and url are case sensitive\n\nThe example file provides all the configuration data for *__two streams__* (or users) named *__Paul__* and *__Anna__*.\n\n```yaml\n{   \n    \"publish\": [\n         {  \n            \"name\": \"Paul\",\n            \"key\": \"SuperSecretKey\"\n         },\n         {\n            \"name\": \"Anna\",\n            \"key\": \"AnotherSecretKey\"\n    ],\n    \"play\": [\n        {   \n            \"name\": \"Paul\",\n            \"key\" : \"PlayBackKey\"\n        },\n        {   \n            \"name\": \"Anna\",\n            \"key\" : \"\"\n        }\n    ],\n    \"stream\": [\n        {   \n            \"name\": \"Paul\",\n            \"url\" : \"rtmp://live.twitch.tv/app/live_FOOBAR_TEST\"\n        },\n        {   \n            \"name\": \"Paul\",\n            \"url\" : \"https://a.upload.youtube.com/FOOBAR_TEST\"\n        }\n    ]\n}\n```\n\n### User/Stream Paul\nPaul is configured as follows:\n- Paul can stream to the server via RTMP from any app like OBS with the following settings:\n  - Server: ```rtmp://SERVER_IP/live```\n  - Stream Key: ```Paul?key=SuperSecretKey```\n- Paul's stream can be received by any app like OBS or VLC via the following url: ```rtmp://SERVER_IP/live/Paul?key=PlayBackKey```\n- Paul's stream will be automatically pushed to the two urls ```rtmp://live.twitch.tv/app/live_FOOBAR_TEST``` and ```https://a.upload.youtube.com/FOOBAR_TEST``` when Paul starts pushing a stream to the server\n\n### User/Stream Anna\n- Anna can stream to the server via RTMP from any app like OBS with the following settings:\n  - Server: ```rtmp://SERVER_IP/live```\n  - Stream Key: ```Anna?key=AnotherSecretKey```\n- Anna's stream is NOT protected by a key and can be received by any app like OBS or VLC via the following url: ```rtmp://SERVER_IP/live/Anna```\n- Anna does not have any entries in the stream section, so her stream to the server will not be automatically pushed somewhere else\n\n\u003e[!IMPORTANT]\n\u003ePay attention to upper and lower case for names and keys in the urls above, they have to exactly match the entries in your auth.json\n\n## Updating the auth.json\nYou can edit the ```auth/auth.json``` without a problem while the system is running. No need to restart the containers.\n\u003e[!IMPORTANT]\n\u003eDon't use editors that create a new file when editing (e.g. vim). This breaks the bind-mount, which is based on inode!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falphapialpha%2Flets-stream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falphapialpha%2Flets-stream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falphapialpha%2Flets-stream/lists"}