# MediaMTX 1.15.6 pour Runtipi Serveur de streaming multimΓ©dia moderne, performant et prΓͺt Γ  l'emploi. **Version:** MediaMTX 1.15.6 **Plateforme:** Runtipi **Status:** βœ… Stable --- ## πŸ“– Qu'est-ce que MediaMTX ? **MediaMTX** (anciennement rtsp-simple-server) est un serveur de streaming multimΓ©dia puissant et facile Γ  utiliser qui supporte de multiples protocoles: ### Protocoles SupportΓ©s - **RTSP** - Real-Time Streaming Protocol - **RTMP** - Real-Time Messaging Protocol - **HLS** - HTTP Live Streaming - **WebRTC** - Web Real-Time Communication - **SRT** - Secure Reliable Transport - **MPEG-TS** - MPEG Transport Stream - **UDP/RTP** - User Datagram Protocol / Real-time Transport Protocol ### CaractΓ©ristiques Principales - βœ… **Zero Configuration** - Fonctionne immΓ©diatement sans configuration - βœ… **Conversion Automatique** - Conversion transparente entre tous les protocoles - βœ… **Enregistrement IntΓ©grΓ©** - Sauvegarde des streams en MP4 ou MPEG-TS - βœ… **Performance Optimale** - Γ‰crit en Go, faible consommation de ressources - βœ… **API REST ComplΓ¨te** - ContrΓ΄le programmatique via HTTP - βœ… **Metrics Prometheus** - Surveillance et monitoring intΓ©grΓ©s - βœ… **Multi-plateforme** - Linux, Windows, macOS, ARM ### Cas d'Usage - **Surveillance vidΓ©o** - CamΓ©ras IP (RTSP/ONVIF) - **Streaming en direct** - Diffusion d'Γ©vΓ©nements, confΓ©rences - **Broadcasting** - OBS Studio, FFmpeg, GStreamer - **VisioconfΓ©rence** - WebRTC pour applications web - **IoT et drones** - Transmission vidΓ©o temps rΓ©el - **Enregistrement DVR** - Sauvegarde de flux vidΓ©o --- ## πŸ—οΈ Architecture MediaMTX fonctionne comme un serveur central qui accepte des connexions entrantes (publishers) et redistribue les streams aux clients (viewers): ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Publishers β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ CamΓ©ra β”‚ β”‚ OBS β”‚ β”‚ FFmpeg β”‚ β”‚ Drone β”‚ β”‚ β”‚ β”‚ IP β”‚ β”‚ Studio β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ (RTSP) β”‚ β”‚ (RTMP) β”‚ β”‚ (SRT) β”‚ β”‚ (WebRTC) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MediaMTX Server β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Protocol Conversion & Stream Distribution β”‚ β”‚ β”‚ β”‚ RTSP (8554) β”‚ RTMP (1935) β”‚ HLS (8888) β”‚ WebRTC β”‚ β”‚ β”‚ β”‚ SRT (8890) β”‚ API (9997) β”‚ Metrics (9998) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Enregistrement (optionnel) β”‚ β”‚ β”‚ β”‚ Formats: fMP4, MPEG-TS β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Viewers β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ VLC β”‚ β”‚Navigateurβ”‚ β”‚ Mobile β”‚ β”‚ Lecteur β”‚ β”‚ β”‚ β”‚ (RTSP) β”‚ β”‚ (HLS) β”‚ β”‚ (WebRTC) β”‚ β”‚ (RTMP) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## πŸš€ Installation ### PrΓ©requis - **Runtipi** installΓ© et fonctionnel - **Ressources minimales:** - **CPU:** 1 core (2+ recommandΓ©s) - **RAM:** 512MB minimum (2GB recommandΓ©s pour production) - **Disque:** 1GB + espace pour enregistrements (si activΓ©) - **Ports rΓ©seau** accessibles (voir tableau des ports) ### Installation via Runtipi 1. **Ouvrir l'interface Runtipi** dans votre navigateur 2. **Aller dans "App Store"** 3. **Rechercher "MediaMTX"** 4. **Cliquer sur "Install"** 5. **Configurer les options** (optionnel): - Authentification API (username/password) - Activer l'enregistrement des streams 6. **Cliquer sur "Installer"** L'application dΓ©marre automatiquement et est prΓͺte Γ  recevoir des streams ! --- ## πŸ” Configuration ### Ports ExposΓ©s | Port | Protocole | Usage | AccΓ¨s | |------|-----------|-------|-------| | **8554** | TCP/UDP | RTSP | Public | | **1935** | TCP | RTMP | Public | | **8888** | TCP | HLS | Public | | **8889** | TCP | WebRTC (Signaling) | Public | | **8890** | UDP | WebRTC/SRT Media | Public | | **8189** | UDP | WebRTC ICE | Public | | **9997** | TCP | API REST | Interne/Admin | | **9998** | TCP | Metrics Prometheus | Interne/Monitoring | ### Variables d'Environnement Configurables via l'interface Runtipi: | Variable | Description | Valeur par dΓ©faut | |----------|-------------|-------------------| | `MTX_API_USERNAME` | Nom d'utilisateur API | *(vide - auth dΓ©sactivΓ©e)* | | `MTX_API_PASSWORD` | Mot de passe API | *(vide)* | | `MTX_RECORD_ENABLED` | Activer enregistrement | `false` | **ParamΓ¨tres Automatiques** (prΓ©-configurΓ©s): - `MTX_PROTOCOLS=tcp` - Protocoles Docker-friendly - `MTX_LOGLEVEL=info` - Niveau de log - `MTX_LOGDESTINATIONS=stdout` - Logs vers Docker - Tous les ports configurΓ©s automatiquement ### Authentification API Pour sΓ©curiser l'API REST: 1. **Aller dans Runtipi β†’ Apps β†’ MediaMTX β†’ ParamΓ¨tres** 2. **DΓ©finir `MTX_API_USERNAME`** (ex: `admin`) 3. **DΓ©finir `MTX_API_PASSWORD`** (ex: mot de passe fort) 4. **RedΓ©marrer l'application** L'API nΓ©cessitera ensuite une authentification HTTP Basic: ```bash curl -u admin:PASSWORD http://localhost:9997/v3/config/get ``` ### Enregistrement des Streams Pour activer l'enregistrement automatique: 1. **Cocher "Activer l'enregistrement des streams"** lors de l'installation 2. Les enregistrements seront sauvegardΓ©s dans: ``` /opt/runtipi/app-data/*/mediamtx/data/recordings/ ``` 3. **Format:** fMP4 (fragmentΓ© MP4, compatible avec tous les lecteurs) 4. **Nom des fichiers:** `{stream-name}/{date}_{heure}.mp4` **Exemple de structure:** ``` recordings/ β”œβ”€β”€ camera1/ β”‚ β”œβ”€β”€ 2025-01-06_14-30-00-000.mp4 β”‚ └── 2025-01-06_15-00-00-000.mp4 └── stream2/ └── 2025-01-06_14-45-00-000.mp4 ``` --- ## πŸ“Ή Utilisation ### 1. Publier un Stream (Publisher) #### Depuis OBS Studio (RTMP) 1. **Ouvrir OBS Studio** 2. **ParamΓ¨tres β†’ Stream** 3. **Service:** PersonnalisΓ© 4. **Serveur:** `rtmp://VOTRE_IP:1935/` 5. **ClΓ© de stream:** `nom_du_stream` 6. **DΓ©marrer le streaming** #### Depuis FFmpeg (RTSP) ```bash ffmpeg -re -i video.mp4 -c copy -f rtsp rtsp://VOTRE_IP:8554/mon_stream ``` #### Depuis une CamΓ©ra IP (RTSP) Redirigez le stream de votre camΓ©ra: ```bash ffmpeg -i rtsp://camera_ip:554/stream \ -c copy \ -f rtsp rtsp://VOTRE_IP:8554/camera1 ``` #### Depuis FFmpeg (RTMP) ```bash ffmpeg -re -i video.mp4 -c copy -f flv rtmp://VOTRE_IP:1935/mon_stream ``` ### 2. Lire un Stream (Viewer) #### Dans VLC (RTSP) 1. **Ouvrir VLC** 2. **MΓ©dia β†’ Ouvrir un flux rΓ©seau** 3. **URL:** `rtsp://VOTRE_IP:8554/nom_du_stream` 4. **Lire** #### Dans un Navigateur (HLS) CrΓ©ez un fichier HTML: ```html MediaMTX Stream ``` #### Dans un Navigateur (WebRTC) ```html MediaMTX WebRTC ``` #### Avec FFplay ```bash ffplay rtsp://VOTRE_IP:8554/nom_du_stream ``` #### Avec curl (test rapide) ```bash curl http://VOTRE_IP:8888/nom_du_stream/index.m3u8 ``` --- ## πŸ”§ API REST MediaMTX expose une API REST complΓ¨te sur le port **9997**. ### Endpoints Principaux #### Lister les Streams Actifs ```bash curl http://localhost:9997/v3/paths/list ``` **RΓ©ponse:** ```json { "itemCount": 2, "pageCount": 1, "items": [ { "name": "camera1", "source": { "type": "rtspSession", "id": "abc123" }, "ready": true, "tracks": ["H264", "AAC"], "bytesReceived": 1234567, "bytesSent": 7654321, "readers": [ { "type": "hlsConn", "id": "xyz789" } ] } ] } ``` #### Obtenir la Configuration ```bash curl http://localhost:9997/v3/config/get ``` #### Modifier la Configuration ```bash curl -X POST http://localhost:9997/v3/config/set \ -H "Content-Type: application/json" \ -d '{"logLevel": "debug"}' ``` #### RedΓ©marrer le Serveur ```bash curl -X POST http://localhost:9997/v3/config/restart ``` #### Forcer la Fermeture d'un Stream ```bash curl -X POST http://localhost:9997/v3/paths/kick/camera1 ``` ### Avec Authentification Si vous avez activΓ© l'authentification API: ```bash curl -u admin:PASSWORD http://localhost:9997/v3/paths/list ``` --- ## πŸ“Š Monitoring avec Prometheus MediaMTX expose des mΓ©triques Prometheus sur le port **9998**. ### AccΓ©der aux MΓ©triques ```bash curl http://localhost:9998/metrics ``` ### MΓ©triques Disponibles ``` # Streams actifs mediamtx_paths{state="ready"} 5 # DonnΓ©es reΓ§ues (bytes) mediamtx_paths_bytes_received{name="camera1"} 1234567890 # DonnΓ©es envoyΓ©es (bytes) mediamtx_paths_bytes_sent{name="camera1"} 9876543210 # Nombre de lecteurs par stream mediamtx_paths_readers{name="camera1"} 3 ``` ### Configuration Prometheus ```yaml scrape_configs: - job_name: 'mediamtx' static_configs: - targets: ['localhost:9998'] ``` --- ## 🎯 Exemples d'Utilisation ### CamΓ©ra IP ONVIF/RTSP Relayer une camΓ©ra IP vers HLS pour lecture navigateur: ```bash # La camΓ©ra publie automatiquement sur RTSP # MediaMTX rend disponible en HLS: http://VOTRE_IP:8888/camera1/index.m3u8 ``` ### Streaming depuis Webcam ```bash ffmpeg -f v4l2 -i /dev/video0 \ -f alsa -i hw:0 \ -c:v libx264 -preset ultrafast -tune zerolatency \ -c:a aac \ -f rtsp rtsp://localhost:8554/webcam ``` ### Restreamer YouTube Live ```bash ffmpeg -i rtsp://VOTRE_IP:8554/mon_stream \ -c copy \ -f flv rtmp://a.rtmp.youtube.com/live2/VOTRE_CLE_STREAM ``` ### Enregistrement PlanifiΓ© (Cron) ```bash # Enregistrer pendant 1 heure ffmpeg -i rtsp://localhost:8554/camera1 \ -c copy \ -t 3600 \ /recordings/$(date +%Y-%m-%d_%H-%M-%S).mp4 ``` ### Stream Multi-Protocole Un seul stream source est automatiquement disponible sur tous les protocoles: - **RTSP:** `rtsp://VOTRE_IP:8554/stream1` - **RTMP:** `rtmp://VOTRE_IP:1935/stream1` - **HLS:** `http://VOTRE_IP:8888/stream1/index.m3u8` - **WebRTC:** `http://VOTRE_IP:8889/stream1` --- ## πŸ› DΓ©pannage ### Le Stream ne s'Affiche Pas **VΓ©rifier que le stream est actif:** ```bash curl http://localhost:9997/v3/paths/list ``` **VΓ©rifier les logs Docker:** ```bash docker logs $(docker ps --filter "name=mediamtx" --format "{{.Names}}") ``` **Tester la connectivitΓ©:** ```bash # RTSP ffprobe rtsp://localhost:8554/nom_du_stream # HLS curl http://localhost:8888/nom_du_stream/index.m3u8 ``` ### ProblΓ¨mes WebRTC WebRTC nΓ©cessite une configuration NAT supplΓ©mentaire. Si vous Γͺtes derriΓ¨re un NAT/routeur: 1. **Configurer le port forwarding** pour les ports UDP 8890, 8189 2. **Ajouter votre IP publique** dans la configuration ### Latence Γ‰levΓ©e Pour rΓ©duire la latence: - **Utiliser RTSP** avec UDP (latence ~200ms) - **Utiliser WebRTC** (latence <100ms) - Γ‰viter HLS (latence 6-30 secondes) ### Performances DΓ©gradΓ©es **VΓ©rifier l'utilisation des ressources:** ```bash docker stats $(docker ps --filter "name=mediamtx" --format "{{.Names}}") ``` **Augmenter les ressources** si nΓ©cessaire dans Runtipi β†’ Apps β†’ MediaMTX β†’ ParamΓ¨tres. --- ## πŸ“š Ressources ### Documentation Officielle - **Site Web:** https://mediamtx.org - **Documentation:** https://mediamtx.org/docs/ - **GitHub:** https://github.com/bluenviron/mediamtx - **Discord Community:** https://discord.gg/MmAErXH ### Outils Compatibles **Publishers:** - OBS Studio - FFmpeg - GStreamer - v4l2rtspserver - CamΓ©ras IP (ONVIF/RTSP) - Drones (Tello, DJI) **Viewers:** - VLC Media Player - FFplay - Navigateurs web (HLS/WebRTC) - Applications mobiles (RTSP/HLS) - Appareils IPTV --- ## πŸ“„ Licence **MediaMTX** est un logiciel open-source sous licence **MIT**. - **DΓ©veloppeur:** bluenviron (formerly Aler9) - **Version:** 1.15.6 - **DerniΓ¨re mise Γ  jour:** 28 dΓ©cembre 2024 Cette application Runtipi utilise l'image Docker officielle de MediaMTX. --- **πŸŽ‰ Votre serveur de streaming MediaMTX est maintenant prΓͺt !** Commencez Γ  publier et lire des streams en quelques commandes.