Files
4h_tool/README.md
T

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

  1. Install FFmpeg:

  2. 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:

  1. Parses the M3U playlist file to extract video file paths
  2. Streams each video sequentially to the RTMP server
  3. Uses ffmpeg with -c copy to passthrough without re-encoding
  4. 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 --ffmpeg to 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