From 03f26a19345ac637b15eddd3c2ffea8054e15abd Mon Sep 17 00:00:00 2001 From: postscriptum Date: Tue, 21 Oct 2025 17:16:10 +0300 Subject: [PATCH] add stream.sh example --- ...u8-stream-proxy-with-ffmpeg-in-icecast.gmi | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/public/uk/m3u8-stream-proxy-with-ffmpeg-in-icecast.gmi b/public/uk/m3u8-stream-proxy-with-ffmpeg-in-icecast.gmi index 79205b6..01beaf4 100644 --- a/public/uk/m3u8-stream-proxy-with-ffmpeg-in-icecast.gmi +++ b/public/uk/m3u8-stream-proxy-with-ffmpeg-in-icecast.gmi @@ -34,6 +34,22 @@ ffmpeg -i "https://eqtv.live:8083/eqtvua/eqtvua_hd_ukr/chunks_dvr.m3u8?nimbleses Як видно на прикладах вище, я додав до URL джерела аргумент `?nimblesessionid=xxx` - він потрібен для того, щоб ffmpeg не плодив нові сесії в процесі читання. Тут я ще не знаю, як довго протримається поточна сесія, але якщо будуть проблеми - напишу скрипт, що витягає актуальний її номер та доповню цей матеріал. +UPD. очікувано, сесія прожила менше доби, тому створив такий скрипт, будемо пускати його в `ExecStart` сервісу systemd, замість сирої команди `ffmpeg`: + +``` /home/eqtv/stream.sh +#!/bin/bash + +# завантажуємо актуальний файл m3u8, що містить активний номер сесії +# та витягаємо перше знайдене значення в змінну SESSION_ID +CHUNKS_DVR="/home/eqtv/chunks_dvr.m3u8" +wget -O $CHUNKS_DVR https://eqtv.live:8083/eqtvua/eqtvua_hd_ukr/chunks_dvr.m3u8 +SESSION_ID=$(grep -oP '(?<=sessionid=)\d+' $CHUNKS_DVR -m 1) + +# запускаємо стрім з актуальним значенням SESSION_ID +ffmpeg -i "https://eqtv.live:8083/eqtvua/eqtvua_hd_ukr/chunks_dvr.m3u8?nimblesessionid=$SESSION_ID" -b:a 32k icecast://user:password@127.0.0.1:8000/eQtv.mp3 +``` +* цей скрипт передбачає роботу з systemd: під час помилки процесу, буде виконано `Restart=on-failure`, таким чином ключ сесії буде актуалізовано + ## Icecast Декілька слів про налаштування сервера Icecast. Раніше, для локальних колекцій, мета-інформація про стрім в мене обслуговувалась сервером ezstream. Тут його немає, тому я додав такий набір до конфігурації точки монтування Icecast: @@ -67,7 +83,9 @@ Group=eqtv # Затримка потрібна у моєму випадку через залежність від Icecast # ExecStartPre=/bin/sleep 5s -ExecStart=/usr/bin/ffmpeg -i ... + +# ExecStart=/usr/bin/ffmpeg -i ... +ExecStart=/path/to/script.sh # Журнали я вимкнув, але можна продебажити наступним чином StandardOutput=null @@ -75,10 +93,14 @@ StandardOutput=null StandardError=null # file:///home/eqtv/eqtv-mp3-error.log +# Бажано увімкнути, якщо замість команди ffmpeg в ExecStart +# використовується скрипт оновлення номеру сесії +Restart=on-failure + [Install] WantedBy=multi-user.target ``` -* в `ExecStart` треба вказати відповідний набір атрибутів `ffmpeg` +* в `ExecStart` треба вказати відповідний набір атрибутів `ffmpeg` або шлях до скрипта (вище) ## Nginx