如何使用FFmpeg将MP4文件以AV1编码推流至RTMP服务器?
AV1编码推流RTMP的问题解决
问题背景
原本使用H264编码,现尝试将视频转为AV1编码,通过FFmpeg将MP4文件推流至RTMP服务器,使用NVIDIA GeForce 4070 Ti显卡硬件加速,执行命令后出现两类错误:
错误1
[mp4 @ 000001438fbc8580] muxer does not support non seekable output [out#0/mp4 @ 000001438dc6e500] Could not write header (incorrect codec parameters ?): Invalid argument
错误2
[flv @ 00000185737c8580] Video codec av1 not compatible with flv [out#0/flv @ 000001857182e500] Could not write header (incorrect codec parameters ?): Function not implemented Conversion failed!
错误原因
第一个错误大概率是命令执行时的临时参数冲突(比如输出格式意外切换为MP4而非FLV),核心问题是第二个错误:FLV容器(RTMP默认封装格式)原生不支持AV1编码,FLV官方规范未定义AV1的编码标识,因此FFmpeg默认拒绝将AV1编码内容封装进FLV。
解决方案
前提条件
你的RTMP服务器需支持实验性FLV AV1扩展(如新版nginx-rtmp模块、OBS Studio内置RTMP服务器等)。
可行FFmpeg命令
ffmpeg -hwaccel cuda -i av1video.mp4 -c:v av1_nvenc -c:a aac -b:v 4M -strict experimental -f flv "rtmp://[test_server_ip]/app/[my_streamkey]"
参数说明
- 移除冗余的
-vf "hwupload_cuda":-hwaccel cuda已将解码帧加载至CUDA设备,av1_nvenc编码器会直接调用硬件资源,无需额外上传操作。 - 替换
-c:a copy为-c:a aac:FLV仅支持AAC、MP3等少数音频编码,aac是兼容性最高的选择,避免原音频编码不被FLV支持导致推流失败。 - 添加
-strict experimental:强制FFmpeg启用FLV封装AV1的实验性功能,需服务器端对应支持。
替代方案
若服务器不支持实验性FLV AV1扩展,则标准RTMP协议无法传输AV1编码内容,建议更换为支持AV1的流媒体协议,如HLS、DASH或SRT。
内容的提问来源于stack exchange,提问作者Kundera
相关产品推荐
相关产品推荐

