From 89cbb7e1c8b483d669f91be7f489b2648048c24e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Couratin?= Date: Wed, 18 Mar 2026 11:53:05 +0100 Subject: [PATCH] Initial commit - stream factory --- .gitignore | 14 ++++++++++++++ bin/http-hls.sh | 30 ++++++++++++++++++++++++++++++ hls/.keep | 0 logs/.keep | 0 scripts/restart_stream.sh | 13 +++++++++++++ services/cnews-http.service | 13 +++++++++++++ services/http-hls.service | 30 ++++++++++++++++++++++++++++++ 7 files changed, 100 insertions(+) create mode 100644 .gitignore create mode 100755 bin/http-hls.sh create mode 100644 hls/.keep create mode 100644 logs/.keep create mode 100755 scripts/restart_stream.sh create mode 100644 services/cnews-http.service create mode 100644 services/http-hls.service diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..007a2c8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# HLS runtime +hls/* +!hls/.keep + +# logs +logs/* +!logs/.keep + +# temp +*.log + +# system +*.pid +*.sock diff --git a/bin/http-hls.sh b/bin/http-hls.sh new file mode 100755 index 0000000..730ee6c --- /dev/null +++ b/bin/http-hls.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -e + +LOG="/opt/stream-factory/logs/cnews.log" +HLS_DIR="/opt/stream-factory/hls" + +mkdir -p "$HLS_DIR" + +echo "$(date '+%F %T') - Démarrage FFmpeg Freebox CNEWS" >> "$LOG" + +exec ffmpeg \ +-rtsp_transport udp \ +-i "rtsp://mafreebox.freebox.fr/fbxtv_pub/stream?namespace=1&service=679&flavour=sd" \ +-map 0:v:0 \ +-map 0:a:0 \ +-sn \ +-vf scale=1024:576 \ +-c:v libx264 \ +-preset veryfast \ +-b:v 1500k \ +-g 50 \ +-c:a aac \ +-b:a 128k \ +-f hls \ +-hls_time 4 \ +-hls_list_size 10 \ +-hls_flags delete_segments+append_list+independent_segments \ +-hls_segment_filename "$HLS_DIR/cnews_%03d.ts" \ +"$HLS_DIR/cnews.m3u8" +>> "$LOG" 2>&1 diff --git a/hls/.keep b/hls/.keep new file mode 100644 index 0000000..e69de29 diff --git a/logs/.keep b/logs/.keep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/restart_stream.sh b/scripts/restart_stream.sh new file mode 100755 index 0000000..86719ff --- /dev/null +++ b/scripts/restart_stream.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "=== Restart CNEWS $(date) ===" >> /opt/stream-factory/logs/restart_stream.log + +systemctl stop cnews-http.service +systemctl stop http-hls.service + +rm -f /opt/stream-factory/hls/* +systemctl start http-hls.service +sleep 3 +systemctl start cnews-http.service + +echo "=== Restart terminé $(date) ===" >> /opt/stream-factory/logs/restart_stream.log diff --git a/services/cnews-http.service b/services/cnews-http.service new file mode 100644 index 0000000..4784af9 --- /dev/null +++ b/services/cnews-http.service @@ -0,0 +1,13 @@ +[Unit] +Description=CNEWS HLS HTTP Server +After=network.target + +[Service] +User=eveny +WorkingDirectory=/opt/stream-factory/hls +ExecStart=/usr/bin/python3 -m http.server 8080 +Restart=always +RestartSec=2 + +[Install] +WantedBy=multi-user.target diff --git a/services/http-hls.service b/services/http-hls.service new file mode 100644 index 0000000..85fe346 --- /dev/null +++ b/services/http-hls.service @@ -0,0 +1,30 @@ +[Unit] +Description=HLS Stream +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +ExecStart=/opt/stream-factory/bin/http-hls.sh + +# 🔥 CRITIQUE +Restart=always +RestartSec=5 + +# 🔒 stabilité +KillSignal=SIGINT +TimeoutStopSec=10 + +# 👤 user +User=eveny +WorkingDirectory=/opt/stream-factory + +# 📜 logs +StandardOutput=journal +StandardError=journal + +# 🧠 évite blocage +StartLimitInterval=0 + +[Install] +WantedBy=multi-user.target