尝试使用 ffmpeg
重新流式传输和录制我的海康威视 IP 摄像机通过 HLS。
所以基本上一切正常,但是,当我试图计算一整天记录的持续时间时,它会导致分段 TS 文件之间的不匹配。
所以基本上我在 FFmpeg 中所做的事情:
"ffmpeg",
"-rtsp_transport", "tcp",
"-stimeout", "3000000",
"-re",
"-i", stream,
"-vcodec", "copy",
"-acodec", "libfdk_aac",
"-f", "segment",
"-segment_list_type", "m3u8",
"-segment_list", name,
"-segment_list_size", "1",
"-segment_format", "mpegts",
"-segment_time", "5",
segment_filename,
结果是:
filename cam1-1502731225-000018.ts
start_time 90.128000
end_time 96.150489
filename cam1-1502731225-000019.ts
start_time 96.128000
end_time 102.150489
filename cam1-1502731225-000020.ts
start_time 102.128000
end_time 105.150489
所以一个文件的每个 end_time 应该和下一个文件的 start_time 相同。虽然事实并非如此。
花了几天时间寻找解决方案 - 到目前为止还没有运气!但我确实观察到,如果我将视频输出到 MP4 文件,然后将其作为输入(对于同一命令行)进行 - 就可以了。
我假设它必须是原始 RTSP URL 的 PTS 的问题。当试图申请
-filter_complex setpts=N/(16*TB)
- 它修复了问题,但会占用 CPU 资源进行编码。
最佳答案
音频帧和视频的长度不完全相同。开始和结束时间可能是根据首先开始和最后结束的任何流计算的。因此,如果音频在一个片段中比视频早 20ms 结束,则它必须在下一个片段中早 20ms 开始。
关于video - FFmpeg HLS 分段开始时间计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45679892/