3.2 KiB
3.2 KiB
M3U to RTMP Streamer
Python script to stream M3U playlist files to RTMP servers using ffmpeg without re-encoding.
Features
- Direct stream passthrough (no re-encoding)
- Supports M3U playlist files
- Streams to RTMP servers
- Real-time output monitoring
- Playlist looping support
- Graceful shutdown on Ctrl+C
Requirements
- Python 3.7+
- FFmpeg installed and in PATH (or provide path with --ffmpeg)
Installation
-
Install FFmpeg:
- Windows: Download from https://ffmpeg.org/download.html
- macOS:
brew install ffmpeg - Linux:
sudo apt install ffmpegorsudo yum install ffmpeg
-
No Python dependencies required (uses standard library)
Usage
Basic Usage
python stream_m3u_to_rtmp.py <m3u_file> <rtmp_url>
Examples
# Stream M3U playlist to RTMP server
python stream_m3u_to_rtmp.py \
"playlist.m3u" \
"rtmp://live.twitch.tv/app/your_stream_key"
# Stream with absolute path
python stream_m3u_to_rtmp.py \
"C:/path/to/playlist.m3u" \
"rtmp://server.com/live/stream_key"
# Loop through playlist when finished
python stream_m3u_to_rtmp.py \
"playlist.m3u" \
"rtmp://server.com/live/key" \
--loop-playlist
# Loop each individual video
python stream_m3u_to_rtmp.py \
"playlist.m3u" \
"rtmp://server.com/live/key" \
--loop-video
# Specify custom ffmpeg path
python stream_m3u_to_rtmp.py \
"playlist.m3u" \
"rtmp://server.com/live/key" \
--ffmpeg "C:/ffmpeg/bin/ffmpeg.exe"
M3U Playlist Format
The script supports standard M3U playlist format:
#EXTM3U
#EXTINF:-1,Video Name 1
/path/to/video1.mp4
#EXTINF:-1,Video Name 2
/path/to/video2.mp4
#EXTM3U- Playlist header (optional)#EXTINF:-1,Name- Video metadata (optional, -1 means unknown duration)- File paths can be absolute or relative to the M3U file location
RTMP URL Format
RTMP URLs typically follow this format:
rtmp://server.com:port/app/stream_key
Examples:
- Twitch:
rtmp://live.twitch.tv/app/YOUR_STREAM_KEY - YouTube:
rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY - Custom server:
rtmp://your-server.com:1935/live/stream_key
Options
--loop-playlist: Loop through the entire playlist when finished--loop-video: Loop each individual video file indefinitely--ffmpeg: Specify custom path to ffmpeg executable
How It Works
The script:
- Parses the M3U playlist file to extract video file paths
- Streams each video sequentially to the RTMP server
- Uses ffmpeg with
-c copyto passthrough without re-encoding - Outputs in FLV format (required for RTMP)
Notes
- The script streams videos in the order they appear in the playlist
- Relative paths in M3U files are resolved relative to the M3U file location
- No re-encoding means very low CPU usage
- Requires the source video codecs to be compatible with RTMP/FLV
- If codec compatibility issues occur, you may need to re-encode (remove
-c copy)
Troubleshooting
- FFmpeg not found: Install FFmpeg or use
--ffmpegto specify path - Connection errors: Check RTMP URL and network connectivity
- Codec errors: Source codecs may not be RTMP-compatible, may need re-encoding
- File not found: Check video file paths in the M3U playlist are correct
- Playlist empty: Ensure M3U file contains valid video file paths