mcpField
F
ffmpeg-streaming

ffmpeg-streaming

github.com/josiahsiegel创意与媒体5983 次安装19 周前更新
代码仓库

关于 ffmpeg-streaming

面向视频直播和流媒体工作流的 FFmpeg 技能,提供 RTMP、HLS、DASH、SRT 和 WebRTC 等协议的配置示例。内容涵盖直播推流、自适应码率和低延迟传输。

主要功能

  1. 01配置 RTMP、HLS、DASH 和 SRT
  2. 02设置低延迟 HLS、DASH 与 WebRTC 推流
  3. 03创建自适应码率流
  4. 04配置加密流媒体输出
  5. 05提供编码配置与故障排查参考

适用场景

  1. 01向 Twitch、YouTube 或 Facebook 推流
  2. 02为点播或网络播放生成 HLS、DASH
  3. 03搭建低延迟直播传输流程
  4. 04在不同流媒体协议间转发内容

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill ffmpeg-streaming

安装后在 Claude Code 中输入/ffmpeg-streaming确认已加载。

附带文件references/production-and-troubleshooting.md

详细介绍

关键指南

Windows 文件路径要求

重要:在 Windows 上始终使用反斜杠表示文件路径

在 Windows 上使用 Edit 或 Write 工具时,必须在文件路径中使用反斜杠(\),而不是正斜杠(/)。


快速参考

协议延迟输出格式适用场景
RTMP2-5s-f flv rtmp://...Twitch、YouTube 推流
HLS10-30s-f hls output.m3u8网页播放、CDN
LL-HLS2-5s-hls_flags low_latency低延迟网页播放
SRT<1s-f mpegts srt://...可靠的信号传输
DASH10-30s-f dash output.mpdABR 流媒体
平台推流 URL
Twitchrtmp://live.twitch.tv/app/{key}
YouTubertmp://a.rtmp.youtube.com/live2/{key}
Facebookrtmps://live-api-s.facebook.com:443/rtmp/{key}

何时使用此技能

用于直播工作流:

  • 向 Twitch、YouTube、Facebook 进行直播
  • 为 VOD 设置 HLS/DASH 服务
  • 构建 ABR 编码梯度
  • 满足低延迟流媒体要求
  • 向多个目标平台转推

FFmpeg 流媒体指南(2025)

涵盖 RTMP、HLS、DASH、SRT 和 WebRTC 协议的 FFmpeg 直播完整指南。

当前最新版本:FFmpeg 8.0.1(发布于 2025-11-20)——使用 ffmpeg -version 检查

流媒体协议概览

协议对比(2025)
协议延迟兼容性安全性用途
RTMP1-5s传统协议、推流TLS(RTMPS)流媒体推流
HLS6-30s通用AES-128CDN 分发
DASH6-30s广泛支持 DRMABR 流媒体
LL-HLS2-4sApple/现代平台AES-128低延迟
LL-DASH2-4s现代浏览器支持 DRM低延迟
SRT<1s日益普及AES-128/256信号传输
WebRTC<0.5s浏览器DTLS/SRTP实时通信
WHIP<1s新兴TLSWebRTC 推流
2025 年趋势
  • SRT 正在取代 RTMP,用于信号传输/推流
  • LL-HLS 正在成为 Apple 生态系统的默认选择
  • WHIP 正在统一 WebRTC 推流标准(FFmpeg 8.0+)
  • QUIC/HTTP3 正在兴起,可实现更低延迟的内容分发

RTMP 流媒体

基本 RTMP 推流
# Stream to RTMP server
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key
从摄像头/屏幕推流至 RTMP
# Linux webcam
ffmpeg -f v4l2 -i /dev/video0 \
  -f alsa -i default \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2500k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key

# macOS webcam
ffmpeg -f avfoundation -framerate 30 -i "0:0" \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2500k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key

# Windows screen capture
ffmpeg -f gdigrab -framerate 30 -i desktop \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 3000k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key
使用 GPU 编码的 RTMP
# NVIDIA NVENC
ffmpeg -re -i input.mp4 \
  -c:v h264_nvenc -preset p3 -tune ll -zerolatency 1 -b:v 6000k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key

# Intel QSV
ffmpeg -re -init_hw_device qsv=hw -filter_hw_device hw \
  -i input.mp4 \
  -c:v h264_qsv -preset fast -b:v 6000k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key
RTMPS(加密)
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k \
  -c:a aac -b:a 128k \
  -f flv rtmps://secure-server/live/stream_key
Twitch/YouTube/Facebook
# Twitch
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 6000k -maxrate 6000k -bufsize 12000k \
  -g 60 -keyint_min 60 \
  -c:a aac -b:a 160k -ar 44100 \
  -f flv rtmp://live.twitch.tv/app/YOUR_STREAM_KEY

# YouTube
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 4500k -maxrate 4500k -bufsize 9000k \
  -g 60 -keyint_min 60 \
  -c:a aac -b:a 128k -ar 44100 \
  -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY

# Facebook
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 4000k -maxrate 4000k -bufsize 8000k \
  -g 60 \
  -c:a aac -b:a 128k -ar 44100 \
  -f flv rtmps://live-api-s.facebook.com:443/rtmp/YOUR_STREAM_KEY

HLS 流媒体

基本 HLS 输出
# Create HLS stream
ffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -hls_time 6 \
  -hls_list_size 0 \
  -hls_segment_filename "segment_%03d.ts" \
  playlist.m3u8
直播 HLS 流
# Live HLS with rolling window
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k \
  -c:a aac -b:a 128k \
  -hls_time 4 \
  -hls_list_size 10 \
  -hls_flags delete_segments \
  -hls_segment_filename "live_%03d.ts" \
  live.m3u8
自适应码率 HLS(ABR)
# Multi-bitrate HLS
ffmpeg -i input.mp4 \
  -filter_complex "[0:v]split=3[v1][v2][v3]; \
    [v1]scale=1920:1080[v1out]; \
    [v2]scale=1280:720[v2out]; \
    [v3]scale=854:480[v3out]" \
  -map "[v1out]" -c:v:0 libx264 -b:v:0 5000k -maxrate:v:0 5350k -bufsize:v:0 7500k \
  -map "[v2out]" -c:v:1 libx264 -b:v:1 2800k -maxrate:v:1 2996k -bufsize:v:1 4200k \
  -map "[v3out]" -c:v:2 libx264 -b:v:2 1400k -maxrate:v:2 1498k -bufsize:v:2 2100k \
  -map a:0 -c:a:0 aac -b:a:0 192k \
  -map a:0 -c:a:1 aac -b:a:1 128k \
  -map a:0 -c:a:2 aac -b:a:2 96k \
  -f hls \
  -hls_time 6 \
  -hls_list_size 0 \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
  -master_pl_name master.m3u8 \
  -hls_segment_filename "stream_%v/segment_%03d.ts" \
  stream_%v/playlist.m3u8
使用 AES 加密的 HLS
# Generate encryption key
openssl rand 16 > enc.key
echo "http://example.com/enc.key" > enc.keyinfo
echo "enc.key" >> enc.keyinfo
openssl rand -hex 16 >> enc.keyinfo

# Encrypted HLS
ffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -hls_time 6 \
  -hls_key_info_file enc.keyinfo \
  -hls_segment_filename "encrypted_%03d.ts" \
  encrypted.m3u8
低延迟 HLS(LL-HLS)
# LL-HLS with partial segments
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -c:a aac \
  -hls_time 4 \
  -hls_list_size 6 \
  -hls_flags independent_segments+delete_segments \
  -hls_segment_type fmp4 \
  -hls_fmp4_init_filename init.mp4 \
  -hls_segment_filename "ll_%03d.m4s" \
  ll_playlist.m3u8

DASH 流媒体

基本 DASH 输出
ffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -f dash \
  -seg_duration 4 \
  -use_timeline 1 \
  -use_template 1 \
  output.mpd
自适应 DASH
ffmpeg -i input.mp4 \
  -map 0:v -map 0:v -map 0:v -map 0:a \
  -c:v libx264 -c:a aac \
  -b:v:0 5M -s:v:0 1920x1080 \
  -b:v:1 3M -s:v:1 1280x720 \
  -b:v:2 1M -s:v:2 640x360 \
  -b:a 128k \
  -f dash \
  -seg_duration 4 \
  -adaptation_sets "id=0,streams=v id=1,streams=a" \
  manifest.mpd
低延迟 DASH(LL-DASH)
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset ultrafast -tune zerolatency \
  -c:a aac \
  -f dash \
  -seg_duration 1 \
  -frag_duration 0.1 \
  -streaming 1 \
  -ldash 1 \
  -use_timeline 0 \
  -use_template 1 \
  -remove_at_exit 1 \
  -window_size 5 \
  ll_manifest.mpd

SRT 流媒体(FFmpeg 4.0+)

SRT 监听器(服务端模式)
# FFmpeg as SRT server
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k \
  -c:a aac -b:a 128k \
  -f mpegts "srt://0.0.0.0:9000?mode=listener"
SRT 呼叫方(客户端模式)
# Send to SRT server
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k \
  -c:a aac -b:a 128k \
  -f mpegts "srt://server:9000?mode=caller"
使用加密的 SRT
# AES-128 encrypted SRT
ffmpeg -re -i input.mp4 \
  -c:v libx264 -c:a aac \
  -f mpegts "srt://server:9000?passphrase=mySecretKey123&pbkeylen=16"
接收 SRT 流
# Receive and save
ffmpeg -i "srt://0.0.0.0:9000?mode=listener" \
  -c copy output.mp4

# Receive and transcode
ffmpeg -i "srt://server:9000?mode=caller" \
  -c:v libx264 -c:a aac \
  output.mp4

WebRTC/WHIP(FFmpeg 8.0+)

概览

FFmpeg 8.0 引入了 WHIP(WebRTC-HTTP Ingestion Protocol)复用器,可向 WebRTC 端点进行亚秒级延迟的流媒体传输。WHIP 正在成为 WebRTC 推流的标准,取代专有解决方案。

WHIP 输出
# Stream to WHIP endpoint
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset ultrafast -tune zerolatency \
  -c:a libopus \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"

# Low-latency webcam to WHIP (Linux)
ffmpeg -f v4l2 -i /dev/video0 \
  -f pulse -i default \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2500k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"

# Low-latency webcam to WHIP (macOS)
ffmpeg -f avfoundation -framerate 30 -i "0:0" \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2500k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"

# Low-latency screen capture to WHIP (Windows)
ffmpeg -f gdigrab -framerate 30 -i desktop \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 3000k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"
使用硬件编码的 WHIP
# NVIDIA NVENC WHIP streaming
ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
  -i input.mp4 \
  -c:v h264_nvenc -preset p3 -tune ll -zerolatency 1 -b:v 3000k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"

# Intel QSV WHIP streaming
ffmpeg -init_hw_device qsv=hw -filter_hw_device hw \
  -i input.mp4 \
  -c:v h264_qsv -preset fast -b:v 3000k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"
WHIP 身份验证
# With bearer token authentication
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset ultrafast -tune zerolatency \
  -c:a libopus \
  -f whip \
  -headers "Authorization: Bearer YOUR_TOKEN" \
  "https://whip-server.example.com/publish/stream_id"
WHIP 服务/平台
  • Cloudflare Stream - 通过 WHIP 接收 WebRTC 推流
  • Dolby.io - 互动式流媒体
  • Janus - 开源 WebRTC 网关
  • mediasoup - 支持 WHIP 的开源 SFU
  • LiveKit - 支持 WHIP 推流的 WebRTC 平台

多播、重新推流、生产实践与故障排查

多播流设置、协议重新推流(RTMP/HLS/DASH/SRT 相互转换)、生产实践(编码器配置、ABR 码率阶梯、监控)以及流媒体故障排查目录,均位于 references/production-and-troubleshooting.md。在桥接协议、构建生产级 ABR 流水线或诊断流媒体故障时,请加载该参考文档。

最佳实践

  1. 使用合适的关键帧间隔 - 直播流采用 2 秒
  2. 使码率与带宽匹配 - 预留 20% 的余量
  3. 流媒体使用 CBR - 保持带宽稳定
  4. 为 VOD 启用 faststart - -movflags +faststart
  5. 监控流的健康状况 - 检查丢帧/错误
  6. 使用硬件编码 - 通过 NVENC/QSV 卸载 GPU 负载
  7. 实现 ABR - 提供多个画质级别
  8. 保护你的流 - 使用 RTMPS/加密
  9. 测试故障转移 - 使用备用接入点
  10. 记录所有信息 - 使用 -report 进行调试

本指南介绍 FFmpeg 流媒体基础知识。有关硬件加速,请参阅硬件加速技能。

评论

支持 Markdown