> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://mediakind.ferndocs.com/mkio/how-to/live-streaming/set-up-the-source-stream-using-ffmpeg/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://mediakind.ferndocs.com/_mcp/server. # 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. ```shell 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: | Command | Description | | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `-threads 0` | Sets the number of threads for processing. 0 lets FFmpeg decide the number of threads based on the available CPU cores. | | `-re` | Makes FFmpeg read input in real time rather than as fast as possible. This makes the generated input match playback speed. | | `-f lavfi` | Specifies 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=yuv420p` | Generates 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 aac` | Sets the audio codec to AAC, a widely used audio compression format. | | `-ab 48k` | Sets the audio bitrate to 48 kbps. | | `-ac 2` | Sets the number of audio channels to 2 (stereo). | | `-ar 48000` | Sets the audio sample rate to 48 kHz. | | `-c:v libx264` | Sets the video codec to H.264 using libx264, which is efficient and compatible with most streaming platforms. | | `-preset:v fast` | Uses the `fast` libx264 encoding preset. | | `-b:v 500k` | Sets the target video bitrate to 500 kbps. | | `-minrate 500k -maxrate 500k -bufsize 500k` | Sets the minimum rate, maximum rate, and buffer size to 500 kbps for constant-bitrate output. | | `-r 30` | Sets the output frame rate to 30 fps, matching the input video frame rate. | | `-g 60 -keyint_min 60` | Sets 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](/mkio/how-to/live-streaming/set-up-a-live-streaming-event#configure-a-live-event). | | `-sc_threshold 0` | Sets the scene change threshold to 0 so FFmpeg does not add keyframes for scene changes. This keeps the GOP structure stable. | | `-f flv` | Specifies 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](/mkio/how-to/live-streaming/set-up-a-live-streaming-event#start-streaming). | ## 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. ```shell 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.