28f9defc9b2b5086660cec5f94d4a8de8d6cf06a
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
# Stream M3U playlist
python stream_m3u_to_rtmp.py <m3u_file> <rtmp_url>
# Stream single video file
python stream_m3u_to_rtmp.py <video_file> <rtmp_url> --single-file
Examples
# Stream M3U playlist to RTMP server
python stream_m3u_to_rtmp.py \
"playlist.m3u" \
"rtmp://live.twitch.tv/app/your_stream_key"
# Stream single local video file
python stream_m3u_to_rtmp.py \
"video.mp4" \
"rtmp://server.com/live/stream_key" \
--single-file
# Stream single video file (auto-detected by extension)
python stream_m3u_to_rtmp.py \
"video.mp4" \
"rtmp://server.com/live/stream_key"
# Stream single video URL
python stream_m3u_to_rtmp.py \
"https://example.com/video.mp4" \
"rtmp://server.com/live/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 (M3U only)--loop-video: Loop each individual video file indefinitely--single-file: Treat input as a single video file instead of M3U playlist--ffmpeg: Specify custom path to ffmpeg executable
Input Types
The script supports two input types:
- M3U Playlist Files: Automatically detected by file extension (.m3u, .m3u8)
- Single Video Files: Automatically detected by video extensions (.mp4, .mkv, .avi, etc.) or use
--single-fileflag - Video URLs: HTTP/HTTPS URLs are automatically treated as single video files
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
Languages
Python
100%