当前位置: 首页 > news >正文

FFmpeg6操作 RTMP参数详解

目录

一、RTMP 在 FFmpeg 里的两层模型

二、URL 解析规则(先搞清 app / playpath)

三、Native RTMP 协议参数(FFmpeg 内置,非 librtmp)

连接与握手类

直播语义类(最重要)

传输层

FFmpeg 6 新增

四、FLV 封装层参数(和 RTMP 强绑定)

五、输入/输出通用鲁棒性参数

推流端

拉流端

六、标准命令模板

文件推直播(H264/AAC)

RTSP → RTMP 转推

拉 RTMP 存本地

带 token 的 CDN 推流

七、Native RTMP vs librtmp(编译期二选一)

八、代码层(libavformat)设置要点

九、最常见 5 个坑(按出现频率)

十、一句话速查


觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。

由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。

在FFmpeg中使用RTMP协议进行视频直播时,你需要了解一些基本的参数设置,以确保你的视频流可以顺利传输到目标服务器。RTMP(Real Time Messaging Protocol)是一种网络协议,用于实现流媒体数据的传输。在FFmpeg中,使用RTMP协议进行视频直播通常涉及到以下几个关键步骤和参数。


一、RTMP 在 FFmpeg 里的两层模型

输入/输出 URL: rtmp://host:port/app/playpath │ ├── 协议层 (rtmpproto.c / 或 librtmp) │ └── rtmp_app / rtmp_playpath / rtmp_live / rtmp_buffer ... │ └── 封装层 (flvenc.c / flvdec.c) └── -f flv / -flvflags no_duration_filesize

推流必须显式-f flv(或代码里avformat_alloc_output_context2(&ctx, NULL, "flv", url)),否则 FFmpeg 会猜格式,直播场景必炸。


二、URL 解析规则(先搞清 app / playpath)

rtmp://user:pass@host:1935/app/playpath

含义

备注

user:pass

推流鉴权

部分服务器用?token=xxx 也行

host:port

默认 1935

app

应用名(live / vod / ingest)

可用rtmp_app覆盖

playpath

流名(streamKey)

可带mp4:前缀;可用rtmp_playpath覆盖

等价写法:

rtmp://srv/live/room1 # = -rtmp_app live -rtmp_playpath room1 rtmp://srv

三、Native RTMP 协议参数(FFmpeg 内置,非 librtmp)

通过-option valueAVDictionary设置,重点记这些:

连接与握手类

  • rtmp_app

    覆盖 URL 里的 app 名。服务器有“隐式 app”时必用。

  • rtmp_playpath

    覆盖流名。SRS 常配合?vhost=使用。

  • rtmp_tcurl

    Connect 时发的 tcUrl,默认rtmp://host:port/app

    某些 CDN(旧版 FMS)校验严格,必须手动设。

  • rtmp_pageurl / rtmp_swfurl / rtmp_swfverify / rtmp_swfhash / rtmp_swfsize

    SWF 防盗链验证三件套。rtmp_swfverify最省事(给 URL 自动算 hash)。

  • rtmp_flashver

    模拟 Flash 版本串。拉流默认LNX 9,0,124,2,推流默认FMLE/3.0 (compatible; )

    老 FMS 拒连时改这个。

  • rtmp_conn

    往 Connect AMF 里塞自定义字段:

    -rtmp_conn "S:token=abc O:1 NS:info:ok O:0"

    B=bool / N=number / S=string / O=object / Z=null

直播语义类(最重要)

  • rtmp_live

    • any(默认):先找直播,没有就播录制

    • live:只播直播,找不到直接失败(拉直播必设

    • recorded:只播点播

    拉流命令等价旧写法rtmp://... live=1

  • rtml_buffer

    客户端缓冲(ms),默认3000

    低延迟场景调到0~500;弱网回源可加到6000

  • rtmp_subscribe

    订阅名,默认等于 playpath。rtmp_live=live时才发。

  • rtmp_flush_interval

    仅 RTMPT(HTTP 隧道)生效,默认 10。

传输层

  • tcp_nodelay=1

    关 Nagle,降延迟。配合-fflags +nobuffer使用。

  • listen / timeout

    FFmpeg 自己当 RTMP 服务端:rtmp://127.0.0.1:1935/live/foo?listen=1

FFmpeg 6 新增

  • rtmp_enhanced_codecs

    Enhanced RTMP(RTMP over H265/AV1/VP9)广告用:

    -rtmp_enhanced_codecs hvc1,av01

    写进 Connect 的fourCcLive字段。


四、FLV 封装层参数(和 RTMP 强绑定)

RTMP 线格式 = FLV tag 流,所以这些 muxer 参数直接影响直播兼容性:

  • -f flv

    强制 FLV。RTMP 输出不写这个,90% 情况会失败。

  • -flvflags no_duration_filesize

    直播推流必加

    不写 filesize/duration 到 metadata(直播没有“文件尾”),防止播放器等待 EOS 卡首帧。

  • -flvflags aac_seq_header_detect

    老播放器兼容 AAC 音频头。


五、输入/输出通用鲁棒性参数

推流端

-re # 按输入帧率读(文件转直播必加,否则瞬间发完) -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 5 # 源断自动重连 -max_interleave_delta 0 # 防止音视频交错超时断流 -bufsize 1M

拉流端

-fflags +nobuffer -flags low_delay -rtbufsize 1M

六、标准命令模板

文件推直播(H264/AAC)

ffmpeg -re -i in.mp4 \ -c:v h264 -b:v 2000k -g 50 -keyint_min 25 -sc_threshold 0 \ -c:a aac -b:a 128k -ar 44100 \ -f flv -flvflags no_duration_filesize \ rtmp://srv:1935/live/room1

RTSP → RTMP 转推

ffmpeg -rtsp_transport tcp -reconnect 1 -reconnect_delay_max 5 \ -i rtsp://cam/live \ -c:v libx264 -preset veryfast -tune zerolatency -fps_mode cfr -r 25 \ -c:a aac \ -f flv -flvflags no_duration_filesize \ rtmp://srv/live/cam1

拉 RTMP 存本地

ffplay rtmp://srv/live/room1 # 或 ffmpeg -rtmp_live live -i rtmp://srv/live/room1 -c copy out.flv

带 token 的 CDN 推流

ffmpeg -re -i in.flv \ -f flv -flvflags no_duration_filesize \ -rtmp_app live \ -rtmp_playpath room1?token=xxxx \ -rtmp_tcurl rtmp://cdn.example.com/live \ rtmp://cdn.example.com

七、Native RTMP vs librtmp(编译期二选一)

维度

FFmpeg native (rtmpproto)

librtmp (--enable-librtmp)

维护状态

主线默认

旧,部分发行版仍带

参数前缀

rtmp_

同名,但解析器不同

Enhanced RTMP

6.x 支持

不支持

SWF verify

支持

支持

RTMPS 加密

依赖系统 TLS

自带

推荐

新项目用 native

老 FMS 兼容才用

两者不能同时存在,编译时谁先配谁生效。


八、代码层(libavformat)设置要点

AVDictionary *opts = NULL; av_dict_set(&opts, "rtmp_live", "live", 0); av_dict_set(&opts, "rtmp_buffer", "500", 0); av_dict_set(&opts, "flvflags", "no_duration_filesize", 0); av_dict_set(&opts, "reconnect", "1", 0); av_dict_set(&opts, "reconnect_delay_max", "5", 0); avformat_alloc_output_context2(&oc, NULL, "flv", url); avio_open2(&oc->pb, url, AVIO_FLAG_WRITE, NULL, &opts); avformat_write_header(oc, &opts);

flvflags是 muxer 私有选项,必须走avformat_write_header的 options 或全局AVOption,不能当协议选项塞错层。


九、最常见 5 个坑(按出现频率)

  1. 不写-f flv​ →Unknown format或服务器收不到音视频

  2. 拉直播没设rtmp_live live​ → 播一会卡住等点播

  3. filesize 写进 metadata​ → 浏览器 flv.js 首帧等 EOS

  4. buffer 默认 3000ms​ → 延迟肉眼可见,低延迟忘了改

  5. 用 librtmp 却传 Enhanced RTMP 参数​ → 直接忽略


十、一句话总结

RTMP 参数分三层:URL 定路由 → rtmp_定握手/直播语义 → flv/flvflags 定封装兼容

直播推流铁三角:-f flv -flvflags no_duration_filesize -rtmp_live live

http://www.cnnetsun.cn/news/4015676.html

相关文章:

  • 老城区管网监测省钱选型指南
  • 蓝速科技 3D 全息舱:破解商用空间夜间无人接待难题
  • Kaizoku高级配置:优化你的漫画下载体验与存储管理
  • 做一家靠谱的合肥市网站建设公司需懂的用户心智与长期价值策略
  • LaneDetection_End2End性能深度测评:超越ERFNet的车道线检测精度
  • 墨水屏刷网页总闪屏残影?EinkBro 这5个细节让阅读彻底告别折腾
  • 平台型网站建设:从0到1搭建数字化交易枢纽,让流量变现成为现实的关键路径
  • 【8月福利来袭】8元无门槛优惠券直接领,输入:新用户福利100029,亲测可用!
  • 校园电子商务网站建设:打造大学生专属购物与创业实战平台的深度解析与落地指南
  • 部队网站建设实战指南:如何打造安全、高效且具有战斗力的数字化政工阵地
  • Holehe OSINT - 电子邮件关联账户查询工具
  • 深圳网站建设公司哪家好,避坑指南与深度解析助您做出正确选择
  • 手把手教你如何利用godaddy网站建设教程从零开始搭建一个专业级个人网站
  • ASP4644多通道稳压架构在星载数据处理载荷供电中的工程适用性分析
  • 网站建设怎么寻找客户
  • 江苏住房和城乡建设厅官方网站:如何获取一手资料,避开租房与购房陷阱,打造安居乐业的幸福家园
  • 揭秘成都网站建设龙兵背后的匠心故事与行业避坑指南
  • 批量处理网络安全数据:Panthera(P.)uncia bulk命令完全指南
  • C++高效计算约数:从试除法到筛法,原理与实战详解
  • Route中间件组:简化复杂应用的请求处理流程
  • 深入解析:戴尔的网站建设有哪些主要特色,从底层架构到用户体验的全方位解读
  • 揭秘2024南京平台网站建设新趋势:企业如何用数字化破局增长
  • 肇庆网站建设公司怎么选才靠谱?揭秘那些没人告诉你的避坑指南
  • 无锡营销型网站建设:如何让您的企业在互联网时代抢占流量先机
  • Sonos Ace 耳机将迎继任者 S52A,多色可选或支持 Wi - Fi 播放能否实现全面回归?
  • 襄阳网站建设公司哪家好 深度测评:揭秘本地服务商的隐形坑与真价值
  • 如何快速解锁微信网页版:wechat-need-web终极完整指南
  • 想象一下,在美容院体验逆龄语抗衰项目,究竟是一种怎样的功能与服务场景?
  • 深度解析安徽省建设监理协会网站作为行业门户的核心价值与服务指引
  • 深入探访中色十二冶金建设有限公司网站,揭秘行业老兵的真实一面与价值