【发布时间】:2020-08-25 16:51:02
【问题描述】:
我有 2 个 ffmpeg 实例正在通过一个用 C 编写的缓冲区。
其中一个 ffmpeg 实例正在创建 FLV 输出并将其发送到连接到 C 程序的 TCP 套接字。 C 正在填充一个数组,然后将数据包发送到另一个 ffmpeg 实例。
重点是第一个ffmpeg实例可以断开连接,可以重启。
另一个 ffmpeg 实例如下所示:
ffmpeg \
-re \
-fflags +igndts \
-fflags flush_packets \
-fflags discardcorrupt \
-r 25 \ \
-i $INPUT_VIDEO_STREAM \
-safe 0 \
-i music.txt \
-fflags +genpts \
-c:a mp3 \
-b:a 320k \
-c:v copy \
-frame_drop_threshold 1.0
-preset ultrafast \
-f flv rtmp://live.twitch.tv/app/live_KEY \
-async 1 \
-vsync 2
问题是,如果我停止另一个 ffmpeg 实例并重新启动它,我会得到“Packet lost”错误,之后,我会得到一堆 Non-monotonous DTS in output stream 错误。
[flv @ 0x55acf23632a0] 数据包不匹配 -1135911011 34757 9695626ate=1560.2kbits/s 速度= 1x
... [flv@0x55acf23d0ec0] 输出流 0:0 中的非单调 DTS;上一个:62560,当前:19080;更改为 62560。这可能会导致输出文件中的时间戳不正确。 [flv@0x55acf23d0ec0] 输出流 0:0 中的非单调 DTS;上一个:62560,当前:19120;更改为 62560。这可能会导致输出文件中的时间戳不正确。 [flv@0x55acf23d0ec0] 输出流 0:0 中的非单调 DTS;上一个:62560,当前:19160;更改为 62560。这可能会导致输出文件中的时间戳不正确。 [flv@0x55acf23d0ec0] 输出流 0:0 中的非单调 DTS;上一个:62560,当前:19200;更改为 62560。这可能会导致输出文件中的时间戳不正确。 [flv@0x55acf23d0ec0] 输出流 0:0 中的非单调 DTS;上一个:62560,当前:19240;更改为 62560。这可能会导致输出文件中的时间戳不正确。 [flv@0x55acf23d0ec0] 输出流 0:0 中的非单调 DTS;上一个:62560,当前:19280;更改为 62560。这可能会导致输出文件中的时间戳不正确。 [flv@0x55acf23d0ec0] 输出流 0:0 中的非单调 DTS;上一个:62560,当前:19320;更改为 62560。这可能会导致输出文件中的时间戳不正确。 ...
我希望继续播放 mp3 并删除坏的视频包,视频剪辑可以被剪切,新剪辑可以开始播放。如果视频在几秒钟内表现异常,即使这样也可以,但流需要是连续的。
我已经尝试过的事情:
- 几个异步/垂直同步选项(垂直同步 1、垂直同步 2、垂直同步下降)
- “-fflags +igndts”,删除此选项,改为将其添加到输出中
- -fflags +genpts
- 将 probesize 设置为 32
- 标志丢弃损坏
我也开始写一个 setpts 过滤器,但是不知道语法
如何以视频时间戳不连续的方式流式传输 mp3 列表,有时会发生丢包?
【问题讨论】:
标签: video ffmpeg video-streaming audio-streaming