Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 如何将openRTSP中的MP4文件编码优化到与FFmpeg相同的级别?_Video_Ffmpeg_Openrtsp - Fatal编程技术网

Video 如何将openRTSP中的MP4文件编码优化到与FFmpeg相同的级别?

Video 如何将openRTSP中的MP4文件编码优化到与FFmpeg相同的级别?,video,ffmpeg,openrtsp,Video,Ffmpeg,Openrtsp,我当前使用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 来自

我当前使用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
来自摄像机的视频帧为1280x720(H.264),每秒30帧,并带有毫秒时间戳。当我观看由ffmpeg创建的movie.mp4时,它看起来相当不错,印在视频流中的秒数看起来相当准确。相反,如果我查看由openRTSP创建的movie.mp4,则视频时间戳中的秒数肯定比实际时间长。所以视频上的一秒钟实际上可以持续两秒钟。我做了几次测试,这不是网络性能问题,也不是处理从摄像机接收到的消息的问题原因似乎是消息被编码到此MP4容器中的部分

FFmpeg比openRTSP更快吗


我能以某种方式优化openRTSP中的MP4编码吗?

好的,这不是性能问题,而是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:帧速率不是15 fps,但相机配置为尝试发送30 fps
  • 问题2:持续时间为4:00,但应为1:00
问题1:那可能是我的错。我应该手动指定帧速率,因为openRTSP没有从流中获取它。我应该指定选项
-f30

对于问题2:在给出选项
-f30
后,我仍然会得到一个持续时间为2:00而不是1.00的视频文件我猜问题在于相机以渐进式模式发送数据,而不是以交错式模式发送数据。也许openRTSP的默认模式是交错模式。因此,当我将帧速率加倍到
-f60
时,一切正常


也许有人能证实我的猜测?

看来您正在将原始比特流保存到.mp4 extn。这是无效的,但要确定问题,请共享两件事:1)ffprobe rtsp.mp4的输出和2)哪个播放器?openRTSP选项“-4”表示应写入mp4文件。