目前,我使用以下命令从带有openRTSP的摄像机接收和存储RTSP流:
openRTSP -4 "rtsp://192.168.41.185/rtsp_tunnel?h26x=4&line=1&inst=2" > movie.mp4我也可以使用FFmpeg做同样的事情:
ffmpeg -i "rtsp://192.168.41.185/rtsp_tunnel?h26x=4&line=1&inst=2" -vcodec copy movie.mp4来自摄像机的视频帧在大约30 fps处是1280x720 (H.264),并且具有毫秒的时间戳。当我看到由ffmpeg创建的movie.mp4时,它看起来相当不错,刻在视频流中的秒看起来相当准确。相反,如果我看到movie.mp4是由openRTSP创建的,那么视频时间戳中的秒会比现实中的时间长得多。所以视频上的一秒在现实中可以持续两秒。我做了几次测试,这不是网络性能问题,也不是处理从摄像机收到的消息的问题。原因似乎是将消息编码到这个MP4容器中的部分原因。
FFmpeg这样做比openRTSP快得多吗?
我能以某种方式优化MP4的openRTSP编码吗?
发布于 2018-07-02 12:27:57
好的,不是性能问题,而是openRTSP无法从RTSP流中检测到正确的帧速率。我准确地记录了60秒,并按照建议使用ffprobe获取有关比特流的更多信息:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output-00000-00060.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isom
creation_time : 2018-07-02 03:30:01
Duration: 00:04:00.13, start: 0.000000, bitrate: 46 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/bt470bg/iec61966-2-1), 1280x720 [SAR 561:560 DAR 187:105], 45 kb/s, 15 fps, 15 tbr, 600 tbn, 1200 tbc (default)
Metadata:
creation_time : 2018-07-02 03:30:01
handler_name : ?Apple Alias Data Handler
encoder : H.264有两件事是错误的:
问题1:这可能是我的错。我应该手动指定帧速率,因为openRTSP没有从流中获得它。我应该指定选项-f 30。
对于问题2:在给出选项-f 30之后,我仍然会得到一个持续时间为2:00的视频文件,而不是1.00。--我猜是--问题是相机以渐进模式发送数据,而不是交错模式。也许openRTSP的默认模式是交错模式。所以,当我将帧率翻倍到-f 60时,一切都好。
也许有人能证实我的猜测?
https://stackoverflow.com/questions/51130778
复制相似问题