FFmpeg 多媒体处理教程 / 直播应用
直播应用
概述
直播(Live Streaming)是 FFmpeg 的重要应用场景之一。本章介绍如何使用 FFmpeg 构建直播系统,包括推流、多平台分发、实时转码、录制与回放等功能。
直播架构
基本直播架构
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 采集端 │───►│ 转码服务器 │───►│ CDN/平台 │
│ (OBS/FFmpeg)│ │ (FFmpeg) │ │ (B站/抖音等) │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ 录制存储 │
│ (本地/云) │
└─────────────┘
多平台分发架构
┌─────────────┐ ┌─────────────┐ ┌─────────┐
│ 采集端 │───►│ 转码服务器 │───►│ B站 │
└─────────────┘ │ (FFmpeg) │ ├─────────┤
│ │───►│ 抖音 │
│ │ ├─────────┤
│ │───►│ YouTube│
│ │ ├─────────┤
│ │───►│ Twitch │
└─────────────┘ └─────────┘
基本推流
使用 FFmpeg 推流
# 基本推流命令
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream_key
推流参数详解
| 参数 | 说明 | 推荐值 |
|---|---|---|
-re | 按原始帧率读取 | 必需 |
-preset | 编码预设 | fast/ultrafast |
-tune | 调优参数 | zerolatency |
-b:v | 视频码率 | 2-6M |
-maxrate | 最大码率 | 与 b:v 相同 |
-bufsize | 缓冲区大小 | 2× maxrate |
-g | GOP 大小 | 30-60 |
-bf | B 帧数量 | 0-2 |
低延迟推流
# 超低延迟推流
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset ultrafast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-g 30 -bf 0 \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream_key
硬件加速推流
# NVIDIA GPU 推流
ffmpeg -re -i input.mp4 \
-c:v h264_nvenc -preset p1 -tune ll \
-rc cbr -b:v 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream_key
# Intel QSV 推流
ffmpeg -re -i input.mp4 \
-c:v h264_qsv -preset veryfast \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream_key
多平台推流
同时推流到多个平台
# 使用 tee 多路输出
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f tee \
"[f=flv]rtmp://live.bilibili.com/stream1|[f=flv]rtmp://live.twitch.tv/app/key2|[f=flv]rtmp://a.rtmp.youtube.com/live2/key3"
使用 streamlink 分发
#!/bin/bash
# multi_platform_push.sh
INPUT=$1
BILIBILI_KEY=$2
TWITCH_KEY=$3
YOUTUBE_KEY=$4
ffmpeg -re -i "$INPUT" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f tee \
"[f=flv]rtmp://live-push.bilivideo.com/live-bvc/?streamname=$BILIBILI_KEY|\
[f=flv]rtmp://live-jfk.twitch.tv/app/$TWITCH_KEY|\
[f=flv]rtmp://a.rtmp.youtube.com/live2/$YOUTUBE_KEY"
不同码率推流
# 为不同平台推不同码率
ffmpeg -re -i input.mp4 \
-map 0:v -map 0:a -map 0:v -map 0:a -map 0:v -map 0:a \
-c:v libx264 -preset fast -tune zerolatency \
-c:a aac \
-b:v:0 6M -maxrate:v:0 6M -s:v:0 1920x1080 \
-b:v:1 3M -maxrate:v:1 3M -s:v:1 1280x720 \
-b:v:2 1M -maxrate:v:2 1M -s:v:2 640x360 \
-f tee \
"[f=flv:onfail=ignore]rtmp://server1/live/stream_1080p|\
[f=flv:onfail=ignore]rtmp://server2/live/stream_720p|\
[f=flv:onfail=ignore]rtmp://server3/live/stream_360p"
采集与推流
摄像头采集推流
# Linux V4L2 采集
ffmpeg -f v4l2 -video_size 1920x1080 -framerate 30 -i /dev/video0 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-f flv rtmp://server/live/stream
# macOS AVFoundation 采集
ffmpeg -f avfoundation -video_size 1920x1080 -framerate 30 -i "0" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-f flv rtmp://server/live/stream
# Windows DirectShow 采集
ffmpeg -f dshow -video_size 1920x1080 -framerate 30 -i video="摄像头名称" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-f flv rtmp://server/live/stream
屏幕采集推流
# Linux X11 采集
ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-f flv rtmp://server/live/stream
# macOS 屏幕采集
ffmpeg -f avfoundation -framerate 30 -i "1" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-f flv rtmp://server/live/stream
# Windows 屏幕采集
ffmpeg -f gdigrab -framerate 30 -i desktop \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-f flv rtmp://server/live/stream
音频采集推流
# ALSA 音频采集(Linux)
ffmpeg -f alsa -i hw:0 \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
# PulseAudio 采集(Linux)
ffmpeg -f pulse -i default \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
# CoreAudio 采集(macOS)
ffmpeg -f avfoundation -i ":0" \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
摄像头 + 麦克风推流
# Linux
ffmpeg -f v4l2 -video_size 1920x1080 -framerate 30 -i /dev/video0 \
-f alsa -i hw:0 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
# macOS
ffmpeg -f avfoundation -video_size 1920x1080 -framerate 30 -i "0" \
-f avfoundation -i ":0" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
直播转码
实时转码推流
# 从 RTSP 源转码推流
ffmpeg -rtsp_transport tcp -i rtsp://camera_ip:554/stream \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 2M -maxrate 2M -bufsize 4M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
# 从 RTMP 源转码推流
ffmpeg -i rtmp://source/live/stream \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 2M -maxrate 2M -bufsize 4M \
-c:a aac -b:a 128k \
-f flv rtmp://target/live/stream
多码率转码
# 单输入多码率输出
ffmpeg -re -i input.mp4 \
-map 0:v -map 0:a -map 0:v -map 0:a -map 0:v -map 0:a \
-c:v libx264 -preset fast -tune zerolatency \
-c:a aac \
-b:v:0 6M -maxrate:v:0 6M -s:v:0 1920x1080 \
-b:v:1 3M -maxrate:v:1 3M -s:v:1 1280x720 \
-b:v:2 1M -maxrate:v:2 1M -s:v:2 640x360 \
-f tee \
"[f=flv]rtmp://server/live/1080p|[f=flv]rtmp://server/live/720p|[f=flv]rtmp://server/live/360p"
直播录制
边直播边录制
# 推流同时录制
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f tee \
"[f=flv]rtmp://server/live/stream|[f=mp4]recording.mp4"
分段录制
# 每小时分段录制
ffmpeg -re -i rtmp://server/live/stream \
-c copy \
-f segment \
-segment_time 3600 \
-segment_format mp4 \
-strftime 1 \
"recording_%Y%m%d_%H%M%S.mp4"
带时间戳的录制
# 添加时间戳水印
ffmpeg -re -i rtmp://server/live/stream \
-vf "drawtext=text='%{localtime\:%Y-%m-%d %H\\\:%M\\\:%S}':x=10:y=10:fontsize=24:fontcolor=white:box=1:[email protected]" \
-c:v libx264 -crf 23 \
-c:a copy \
recording.mp4
直播拉流
从各种源拉流
# 从 RTMP 拉流
ffmpeg -i rtmp://server/live/stream output.mp4
# 从 RTSP 拉流
ffmpeg -rtsp_transport tcp -i rtsp://camera_ip:554/stream output.mp4
# 从 HLS 拉流
ffmpeg -i https://example.com/live/playlist.m3u8 output.mp4
# 从 SRT 拉流
ffmpeg -i srt://server:9000?streamid=live/stream output.mp4
拉流并转码
# 拉流转码后推流
ffmpeg -i rtmp://source/live/stream \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 2M -maxrate 2M -bufsize 4M \
-c:a aac -b:a 128k \
-f flv rtmp://target/live/stream
# 拉流添加水印后推流
ffmpeg -i rtmp://source/live/stream -i watermark.png \
-filter_complex "[0:v][1:v]overlay=W-w-10:H-h-10[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 2M -maxrate 2M -bufsize 4M \
-c:a aac -b:a 128k \
-f flv rtmp://target/live/stream
HLS 直播
生成 HLS 直播流
# 基本 HLS 直播
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f hls \
-hls_time 4 \
-hls_list_size 10 \
-hls_flags delete_segments \
-hls_segment_filename "segment_%03d.ts" \
live/playlist.m3u8
HLS 参数详解
| 参数 | 说明 | 推荐值 |
|---|---|---|
-hls_time | 分片时长 | 2-6 秒 |
-hls_list_size | 播放列表大小 | 5-10 |
-hls_flags | HLS 选项 | delete_segments |
-hls_segment_filename | 分片文件名模板 | segment_%03d.ts |
-hls_wrap | 分片序号回绕 | 不推荐 |
HLS 直播脚本
#!/bin/bash
# hls_live.sh
INPUT=$1
OUTPUT_DIR=${2:-live}
SEGMENT_TIME=${3:-4}
LIST_SIZE=${4:-10}
mkdir -p "$OUTPUT_DIR"
ffmpeg -re -i "$INPUT" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f hls \
-hls_time "$SEGMENT_TIME" \
-hls_list_size "$LIST_SIZE" \
-hls_flags delete_segments \
-hls_segment_filename "$OUTPUT_DIR/segment_%03d.ts" \
"$OUTPUT_DIR/playlist.m3u8"
自适应码率 HLS
#!/bin/bash
# hls_adaptive_live.sh
INPUT=$1
OUTPUT_DIR=${2:-live}
mkdir -p "$OUTPUT_DIR"
ffmpeg -re -i "$INPUT" \
-map 0:v -map 0:a -map 0:v -map 0:a -map 0:v -map 0:a \
-c:v libx264 -preset fast -tune zerolatency \
-c:a aac \
-b:v:0 6M -maxrate:v:0 6M -s:v:0 1920x1080 \
-b:v:1 3M -maxrate:v:1 3M -s:v:1 1280x720 \
-b:v:2 1M -maxrate:v:2 1M -s:v:2 640x360 \
-f hls \
-hls_time 4 \
-hls_list_size 10 \
-hls_flags delete_segments \
-var_stream_map "v:0,a:0,name:1080p v:1,a:1,name:720p v:2,a:2,name:360p" \
-master_pl_name "$OUTPUT_DIR/master.m3u8" \
-hls_segment_filename "$OUTPUT_DIR/stream_%v/segment_%03d.ts" \
"$OUTPUT_DIR/stream_%v/playlist.m3u8"
DASH 直播
生成 DASH 直播流
# 基本 DASH 直播
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f dash \
-seg_duration 4 \
-window_size 10 \
-extra_window_size 20 \
-remove_at_exit 1 \
live/manifest.mpd
DASH 直播脚本
#!/bin/bash
# dash_live.sh
INPUT=$1
OUTPUT_DIR=${2:-live}
SEGMENT_TIME=${3:-4}
mkdir -p "$OUTPUT_DIR"
ffmpeg -re -i "$INPUT" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f dash \
-seg_duration "$SEGMENT_TIME" \
-window_size 10 \
-extra_window_size 20 \
-remove_at_exit 1 \
"$OUTPUT_DIR/manifest.mpd"
直播监控
流健康检查
#!/bin/bash
# stream_health_check.sh
STREAM_URL=$1
LOG_FILE=${2:-health.log}
while true; do
# 检查流是否可访问
if ffprobe -v quiet -show_entries format=duration "$STREAM_URL" > /dev/null 2>&1; then
echo "$(date): 流正常" >> "$LOG_FILE"
else
echo "$(date): 流异常" >> "$LOG_FILE"
# 可以在这里添加告警逻辑
fi
sleep 30
done
流信息监控
#!/bin/bash
# stream_monitor.sh
STREAM_URL=$1
# 获取流信息
while true; do
clear
echo "=== 流监控 - $(date) ==="
echo ""
# 获取流信息
INFO=$(ffprobe -v quiet -print_format json -show_streams "$STREAM_URL" 2>/dev/null)
if [ $? -eq 0 ]; then
VIDEO_CODEC=$(echo "$INFO" | jq -r '.streams[] | select(.codec_type=="video") | .codec_name')
VIDEO_WIDTH=$(echo "$INFO" | jq -r '.streams[] | select(.codec_type=="video") | .width')
VIDEO_HEIGHT=$(echo "$INFO" | jq -r '.streams[] | select(.codec_type=="video") | .height')
VIDEO_FPS=$(echo "$INFO" | jq -r '.streams[] | select(.codec_type=="video") | .r_frame_rate')
AUDIO_CODEC=$(echo "$INFO" | jq -r '.streams[] | select(.codec_type=="audio") | .codec_name')
echo "视频: $VIDEO_CODEC ${VIDEO_WIDTH}x${VIDEO_HEIGHT} @ ${VIDEO_FPS}fps"
echo "音频: $AUDIO_CODEC"
echo "状态: 正常"
else
echo "状态: 无法连接"
fi
sleep 5
done
直播回放
直播转点播
#!/bin/bash
# live_to_vod.sh
LIVE_URL=$1
OUTPUT=$2
DURATION=${3:-3600} # 1 小时
# 录制直播流
timeout "$DURATION" ffmpeg -i "$LIVE_URL" \
-c copy \
"$OUTPUT" 2>/dev/null
# 添加快速启动
ffmpeg -i "$OUTPUT" -c copy -movflags +faststart "${OUTPUT%.mp4}_vod.mp4"
rm -f "$OUTPUT"
echo "点播文件生成: ${OUTPUT%.mp4}_vod.mp4"
直播切片
#!/bin/bash
# live_slicing.sh
LIVE_URL=$1
OUTPUT_DIR=${2:-slices}
SLICE_DURATION=${3:-300} # 5 分钟
mkdir -p "$OUTPUT_DIR"
ffmpeg -i "$LIVE_URL" \
-c copy \
-f segment \
-segment_time "$SLICE_DURATION" \
-segment_format mp4 \
-strftime 1 \
"$OUTPUT_DIR/slice_%Y%m%d_%H%M%S.mp4"
直播特效
添加水印
# 直播添加水印
ffmpeg -re -i input.mp4 -i watermark.png \
-filter_complex "[0:v][1:v]overlay=W-w-10:H-h-10[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
添加文字
# 直播添加文字
ffmpeg -re -i input.mp4 \
-vf "drawtext=text='LIVE':x=10:y=10:fontsize=48:fontcolor=red:box=1:[email protected]" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
添加时间戳
# 直播添加时间戳
ffmpeg -re -i input.mp4 \
-vf "drawtext=text='%{localtime\:%Y-%m-%d %H\\\:%M\\\:%S}':x=10:y=10:fontsize=24:fontcolor=white:box=1:[email protected]" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
平台特定配置
Bilibili 推流
# Bilibili 推流配置
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-g 60 \
-c:a aac -b:a 128k \
-f flv rtmp://live-push.bilivideo.com/live-bvc/?streamname=YOUR_STREAM_KEY
YouTube 推流
# YouTube 推流配置
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 4M -maxrate 4M -bufsize 8M \
-g 60 \
-c:a aac -b:a 128k \
-f flv rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY
Twitch 推流
# Twitch 推流配置
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-g 60 \
-c:a aac -b:a 128k \
-f flv rtmp://live-jfk.twitch.tv/app/YOUR_STREAM_KEY
抖音推流
# 抖音推流配置
ffmpeg -re -i input.mp4 \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-g 30 \
-c:a aac -b:a 128k \
-f flv rtmp://push.douyin.com/live/YOUR_STREAM_KEY
直播脚本模板
完整直播脚本
#!/bin/bash
# live_stream.sh
# 配置
INPUT=${1:-input.mp4}
RTMP_URL=${2:-rtmp://server/live/stream}
BITRATE=${3:-3M}
PRESET=${4:-fast}
# 计算缓冲区大小
BITRATE_NUM=${BITRATE%M}
BUF_SIZE=$((BITRATE_NUM * 2))M
echo "=== 直播推流 ==="
echo "输入: $INPUT"
echo "推流地址: $RTMP_URL"
echo "码率: $BITRATE"
echo "预设: $PRESET"
echo "================"
# 推流
ffmpeg -re -i "$INPUT" \
-c:v libx264 -preset "$PRESET" -tune zerolatency \
-b:v "$BITRATE" -maxrate "$BITRATE" -bufsize "$BUF_SIZE" \
-g 60 -bf 0 \
-c:a aac -b:a 128k \
-f flv "$RTMP_URL"
多平台推流脚本
#!/bin/bash
# multi_platform_live.sh
INPUT=${1:-input.mp4}
BILIBILI_KEY=${2:-}
TWITCH_KEY=${3:-}
YOUTUBE_KEY=${4:-}
# 构建 tee 输出
TEE_OUTPUT=""
if [ -n "$BILIBILI_KEY" ]; then
TEE_OUTPUT="${TEE_OUTPUT}[f=flv:onfail=ignore]rtmp://live-push.bilivideo.com/live-bvc/?streamname=${BILIBILI_KEY}|"
fi
if [ -n "$TWITCH_KEY" ]; then
TEE_OUTPUT="${TEE_OUTPUT}[f=flv:onfail=ignore]rtmp://live-jfk.twitch.tv/app/${TWITCH_KEY}|"
fi
if [ -n "$YOUTUBE_KEY" ]; then
TEE_OUTPUT="${TEE_OUTPUT}[f=flv:onfail=ignore]rtmp://a.rtmp.youtube.com/live2/${YOUTUBE_KEY}|"
fi
# 移除最后的 |
TEE_OUTPUT="${TEE_OUTPUT%|}"
echo "推流到多个平台..."
ffmpeg -re -i "$INPUT" \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 3M -maxrate 3M -bufsize 6M \
-c:a aac -b:a 128k \
-f tee "$TEE_OUTPUT"
直播录制回放脚本
#!/bin/bash
# live_record_replay.sh
RTMP_URL=$1
OUTPUT_DIR=${2:-recordings}
SEGMENT_TIME=${3:-3600}
mkdir -p "$OUTPUT_DIR"
echo "开始录制直播流..."
ffmpeg -i "$RTMP_URL" \
-c copy \
-f segment \
-segment_time "$SEGMENT_TIME" \
-segment_format mp4 \
-strftime 1 \
"$OUTPUT_DIR/live_%Y%m%d_%H%M%S.mp4"
注意事项
- 网络带宽:确保上行带宽足够,建议至少为目标码率的 1.5 倍
- 编码延迟:使用
-preset ultrafast -tune zerolatency降低延迟 - 缓冲区设置:
-bufsize通常设为-maxrate的 2 倍 - GOP 大小:直播建议 GOP 设为帧率的 2 倍
- 错误处理:添加重连机制处理网络中断
业务场景
场景 1:电商直播
# 电商直播配置
ffmpeg -re -i camera.mp4 -i product.png \
-filter_complex \
"[0:v][1:v]overlay=W-w-20:20[v]; \
[v]drawtext=text='限时特惠':x=10:y=H-50:fontsize=36:fontcolor=red:box=1:[email protected][outv]" \
-map "[outv]" -map 0:a \
-c:v libx264 -preset fast -tune zerolatency \
-b:v 4M -maxrate 4M -bufsize 8M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/shop
场景 2:游戏直播
# 游戏直播配置
ffmpeg -f x11grab -video_size 1920x1080 -framerate 60 -i :0.0 \
-f pulse -i default \
-c:v h264_nvenc -preset p1 -tune ll \
-rc cbr -b:v 6M -bufsize 12M \
-c:a aac -b:a 192k \
-f flv rtmp://server/live/game
场景 3:会议直播
# 会议直播配置
ffmpeg -f v4l2 -video_size 1280x720 -framerate 30 -i /dev/video0 \
-f alsa -i hw:0 \
-c:v libx264 -preset veryfast -tune zerolatency \
-b:v 2M -maxrate 2M -bufsize 4M \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/meeting
扩展阅读
总结
本章介绍了 FFmpeg 的直播应用技术,包括:
- 直播推流与拉流
- 多平台分发
- 实时转码
- 直播录制与回放
- HLS/DASH 直播
掌握直播技术可以帮助您构建完整的直播系统,满足各种直播需求。