Skip to navigation

Set up the source stream using FFmpeg

Use FFmpeg to generate a test source and send it to an MK.IO live event. For SRT input, use an FFmpeg binary compiled with libsrt.

RTMP basic example

This command generates a 1080p test pattern and a 150 Hz tone. It encodes the video with H.264, encodes the audio with AAC, and sends the constant-bitrate output to an RTMP input URL.

ffmpeg -threads 0 \
-re \
-f lavfi \
-i testsrc=rate=30:size=1920x1080,format=yuv420p \
-f lavfi \ -i "sine=frequency=150:sample_rate=48000:beep_factor=2" \
-c:a aac \
-ab 48k \
-ac 2 \
-ar 48000 \
-c:v libx264 \
-preset:v fast \
-b:v 500k \
-minrate 500k -maxrate 500k -bufsize 500k \
-r 30 \
-g 60 -keyint_min 60 \
-sc_threshold 0 \
-f flv \
rtmp://in-7334a7c7-a376-4edf-aeb9-d6bfd7fab995.japaneast.streaming.mediakind.com:1935/de04ea37-ace5-46e1-9a54-6cb045c424df/stream

Command breakdown

The table describes each part of the command:

CommandDescription
-threads 0Sets the number of threads for processing. 0 lets FFmpeg decide the number of threads based on the available CPU cores.
-reMakes FFmpeg read input in real time rather than as fast as possible. This makes the generated input match playback speed.
-f lavfiSpecifies the lavfi input format so FFmpeg generates input with a filter instead of reading an external file or stream.
-i testsrc=rate=30:size=1920x1080,format=yuv420pGenerates a test pattern at 30 frames per second with a resolution of 1920x1080 and a YUV 4:2:0 pixel format.
-f lavfi -i "sine=frequency=150:sample_rate=48000:beep_factor=2"Generates a 150 Hz audio tone at a 48 kHz sample rate. beep_factor=2 adds breaks instead of producing a continuous tone.
-c:a aacSets the audio codec to AAC, a widely used audio compression format.
-ab 48kSets the audio bitrate to 48 kbps.
-ac 2Sets the number of audio channels to 2 (stereo).
-ar 48000Sets the audio sample rate to 48 kHz.
-c:v libx264Sets the video codec to H.264 using libx264, which is efficient and compatible with most streaming platforms.
-preset:v fastUses the fast libx264 encoding preset.
-b:v 500kSets the target video bitrate to 500 kbps.
-minrate 500k -maxrate 500k -bufsize 500kSets the minimum rate, maximum rate, and buffer size to 500 kbps for constant-bitrate output.
-r 30Sets the output frame rate to 30 fps, matching the input video frame rate.
-g 60 -keyint_min 60Sets the group of pictures (GOP) length and minimum keyframe interval to 60 frames. This produces a keyframe every two seconds at 30 fps. Match this value to the Input key frame interval in MK.IO.
-sc_threshold 0Sets the scene change threshold to 0 so FFmpeg does not add keyframes for scene changes. This keeps the GOP structure stable.
-f flvSpecifies the output format as flv, which is commonly used for streaming to RTMP servers.
rtmp://...Specifies the RTMP server URL. Paste the Input URL provided after you start the live event.

RTMP example with multiple bitrates

This example sends three video qualities to an MK.IO passthrough event. Use a unique stream name for each quality and align keyframes across all qualities.

ffmpeg.exe -threads 0 -re /
-stream_loop -1 -i "C:\Videos\sample.mp4" /
-c:a aac -ab 128k -ac 2 -ar 48000 -c:v libx264 -s svga -b:v 500k -minrate 500k -maxrate 500k -bufsize 500k -r 30 -g 48 -keyint_min 48 -sc_threshold 0 -f flv rtmp://in-7334a7c7-a376-4edf-aeb9-d6bfd7fab995.japaneast.streaming.mediakind.com:1935/de04ea37-ace5-46e1-9a54-6cb045c424df/stream_500 /
-c:a aac -ab 128k -ac 2 -ar 48000 -c:v libx264 -s vga -b:v 300k -minrate 300k -maxrate 300k -bufsize 300k -r 30 -g 48 -keyint_min 48 -sc_threshold 0 -f flv rtmp://in-7334a7c7-a376-4edf-aeb9-d6bfd7fab995.japaneast.streaming.mediakind.com:1935/de04ea37-ace5-46e1-9a54-6cb045c424df/stream_300 /
-c:a aac -ab 128k -ac 2 -ar 48000 -c:v libx264 -s qvga -b:v 150k -minrate 150k -maxrate 150k -bufsize 150k -r 30 -g 48 -keyint_min 48 -sc_threshold 0 -f flv rtmp://in-7334a7c7-a376-4edf-aeb9-d6bfd7fab995.japaneast.streaming.mediakind.com:1935/de04ea37-ace5-46e1-9a54-6cb045c424df/stream_150

Adjust the encoding settings for the available CPU capacity, network bandwidth, and required output quality.