高倍速ffmpeg命令:
ffmpeg.exe -rtsp_transport tcp -i "rtsp://admin:m1111111@172.11.1.82:554/cam/playback?channel=1&subtype=0&starttime=2023_07_06_14_26_00&endtime=2023_07_06_14_31_00&speed=16" -an -vcodec copy "D:\123/NVR3.mp4"
可见我要下载的是五分钟录像,但是文件用vlc播放后仅有一分钟多一点:
一倍速ffmpeg命令:
ffmpeg.exe -rtsp_transport tcp -i "rtsp://admin:m1111111@172.11.1.82:554/cam/playback?channel=1&subtype=0&starttime=2023_07_06_14_26_00&endtime=2023_07_06_14_31_00" -an -vcodec copy "D:\123/NVR3.mp4"
可见录像文件为正常五分钟:
高倍速下载时,ffmpeg有大量的如下报错:
[mp4 @ 000001cb5640a500] Non-monotonous DTS in output stream 0:0; previous: 6267751, current: 5275350; changing to 6267752. This may result in incorrect timestamps in the output file.
尝试过将NVR的音频编码关掉,关掉后高倍速下载的录像文件时长就是正常的五分钟了,但如果是音频帧时间戳的问题,理论上一倍速应该也是必现问题;
目前完全没有头绪进一步排查,求助各位大大提供思路,最好能有初步的解决思路,万分感谢!
新增排查进度: 将两份mp4文件对比,发现差异在mp4的moov头,异常的moov头中录像时长不正确;
但为何音频会影响到moov头目前还是很迷茫;
1.用-vsync 2选项:
2.用-copyts选项。:
如果这两个方法都不能解决问题,你可能在FFmpeg处理流之前,先把RTSP流转换为其他格式(比如HLS),然后再用FFmpeg处理转换后的流。