我正在使用 ffmpeg 和 SW 编码器 libx264 将来自 NGINX 提取服务器的 RTMP 输入转码为 UDP TS 流 h264 和 mp2。有时,转码过程会挂在初始化上而无法启动。
命令:
ffmpeg -re -i rtmp://127.0.0.1/ingesting -c:a mp2 -c:v libx264 -ar 48000 -profile:v main -x264opts interlaced=1:nal-hrd=cbr -preset ultrafast -tune zerolatency -vf scale=720x576,setdar=16/9,format=yuv420p,fps=fps=25,setfield=mode=tff -flags +ilme+ildct -streamid 0:0x201 -streamid 1:0x202 -mpegts_pmt_start_pid 0x200 -mpegts_start_pid 0x203 -metadata:s:a:0 language="" -mpegts_service_id 2 -mpegts_transport_stream_id 9217 -metadata provider_name="PNAME" -metadata service_name="SNAME" -minrate 2M -maxrate 2M -bufsize 1500k -muxrate 2600k -f mpegts -pcr_period 30 -b:v 2M "udp://239.1.67.71:1234?pkt_size=1316&bitrate=2600000&dscp=34&localaddr=10.61.5.10"
FFMPEG 是从最新的 git 编译而来的,具有 CUDA GPU 支持,但未在本次转码过程中使用。
ffmpeg version N-100673-g553eb07737 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 8 (Debian 8.3.0-6) configuration: --enable-nonfree --enable-cuda --enable-cuvid --enable-nvenc --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-static --enable-pthreads --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-filters --enable-openssl
使用日志级别调试我收到以下错误:
cur_dts is invalid st:0 (513) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
完整日志在这里:https://pastebin.com/nC7GFcf4
更新:此问题仅出现在 master 分支的最新 git 版本 (N-100673-g553eb07737) 中。版本 4.3 (n4.3.1-221-gd08bcbffff) 中不会出现此问题。
答案1
在我的情况下,添加--enable-parser=h264 --enable-parser=acc
configure 命令行就成功了。也许你需要另一个解析器。该命令configure --list-parsers
列出了所有可启用的解析器。