{"id":15085982,"url":"https://github.com/miketangoecho/marathon","last_synced_at":"2026-01-27T10:33:07.694Z","repository":{"id":253934316,"uuid":"844943614","full_name":"MikeTangoEcho/marathon","owner":"MikeTangoEcho","description":"Use the live chat to stream loop your videos.","archived":false,"fork":false,"pushed_at":"2024-08-20T09:40:48.000Z","size":20,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-21T20:42:58.992Z","etag":null,"topics":["chatbot","ffmpeg","streaming","twitch"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":false,"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/MikeTangoEcho.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-08-20T09:19:24.000Z","updated_at":"2024-08-20T09:45:02.000Z","dependencies_parsed_at":"2024-08-20T13:05:34.273Z","dependency_job_id":null,"html_url":"https://github.com/MikeTangoEcho/marathon","commit_stats":null,"previous_names":["miketangoecho/marathon"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeTangoEcho%2Fmarathon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeTangoEcho%2Fmarathon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeTangoEcho%2Fmarathon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeTangoEcho%2Fmarathon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MikeTangoEcho","download_url":"https://codeload.github.com/MikeTangoEcho/marathon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230788620,"owners_count":18280363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["chatbot","ffmpeg","streaming","twitch"],"created_at":"2024-09-25T07:02:36.967Z","updated_at":"2026-01-27T10:33:07.657Z","avatar_url":"https://github.com/MikeTangoEcho.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Marathon\n\nUse the live chat to stream loop your videos.\n\n## How it works\n\n**Requirements**: Install FFmpeg\n* https://www.ffmpeg.org/download.html\n\n```sh\nmarathon start --twitch-stream-key [twitch stream key. ex: live_XXXX] --twitch-broadcaster-channel [twitch username, ex: justintv]\n```\n\n1. The bot connects to iRc and joins your channel, then wait for commands\n2. On `!play lotr.playlist` =\u003e the bot will stream in real time your playlist with FFmpeg ffconcat.\n3. On `!shutdown` =\u003e the bot will halt the stream and exits.\n\n## What's Next ?\n\nStreaming platform\n* [x] Twitch\n* [ ] YouTube\n\nBroadcaster\n* [x] FFmpeg *concat*\n* [ ] vlc\n* [ ] liquidsoap\n\n## Usefull links\n\n* https://help.twitch.tv/s/twitch-ingest-recommendation\n* https://help.twitch.tv/s/article/broadcasting-guidelines\n* https://ffmpeg.org/ffmpeg-all.html#toc-Preset-files\n* https://ffmpeg.org/ffmpeg-protocols.html#udp\n* https://trac.ffmpeg.org/wiki/Concatenate\n* https://trac.ffmpeg.org/wiki/EncodingForStreamingSites\n* https://trac.ffmpeg.org/wiki/StreamingGuide\n* https://trac.ffmpeg.org/wiki/Encode/H.264\n\n## Local Mock: RTMP server to HLS stream\n\n**Start RTMP server that write an HLS stream**\n\nhttps://ffmpeg.org/ffmpeg-formats.html#toc-hls-2\n\n```sh\nffmpeg -f flv -listen 1 -i rtmp://127.0.0.1:1935/live/app  -hls_time 2 -hls_list_size 5 -hls_flags delete_segments -start_number 0 testsrc.m3u8\n```\n\n**Start HTTP server to serve HLS stream**\n\nReading the file m3u8 directly on the disk will prevent m3u8.tmp to be swapped with the main one. So the stream stops when reaching the last segments of the main one.\n\n```sh\npython3 -m http.server 8080\n```\n\n**Read the HLS stream**\n\n```sh\n.\\ffplay -x 640 -y 360 http://127.0.0.1:8080/testsrc.m3u8\n```\n\n## Start a RTPM stream\n\nUse `testsrc` source.\n\n```sh\nffmpeg  -re -f lavfi -i testsrc -f flv rtmp://127.0.0.1:1935/live/app\n```\n\nOr use a playlist with `ffconcat`\n\n```sh\nffmpeg  -re -stream_loop -1 -f concat -i playlist.txt -f flv rtmp://127.0.0.1:1935/live/app\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiketangoecho%2Fmarathon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiketangoecho%2Fmarathon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiketangoecho%2Fmarathon/lists"}