测试摄像头型号:海康威视DS-2CD2T26FWD-i5s中的6mm/12mm 相机
测试方式:rtsp流
1. VLC
(1). vlc 直接播放 rtsp 流
这个延迟不得了,大概有2s。
(2). vlc 关闭缓存
因为 vlc 播放器默认有个网络缓存时间,我查看了一下我的设置里面的是1000ms,调整了一下这个时间,重新测试一下。
vlc rtsp://192.168.1.64:554 --network-caching=100 #我改成了100ms
延迟<1s,我看了一下大概300ms 的样子。
2. 海康SDK
海康sdk延迟基本200ms的样子,但是只支持x86平台,Arm架构暂时没有sdk,这个我直接咨询了官方。
这个延迟是我测得的最低的,如果对延迟敏感果断使用海康 SDK吧!
3. OpenCV(cpu)
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>
#include <string>int main(int argc, char** argv)
{std::string url="rtsp://admin:abcd1234@192.168.1.64:554";cv::VideoCapture cap(url);if (!cap.isOpened()) {std::cout << "captureOpen failed!" << std::endl;} else {std::cout << "success!" << std::endl;}cap.set(cv::CAP_PROP_BUFFERSIZE,0);cv::Mat frame;while (true){cap >> frame;cv::imshow("image", frame);if (cv::waitKey(1) > 0) {break;}}return 0;
}
opencv也是自带缓冲区的,如果你帧处理的速度跟不上会造成缓冲区帧积累,会导致延迟累积,上面这段代码直接将缓冲区size设置为0。
4. OpenCV(cuda)
5. OpenCV(Gstreamer+NVDEC)
这个我是在 Jetson agx xavier 平台上测试的,主要是想利用一下其自带的硬件解码功能,延迟大概是500ms 左右。
应该说这个延迟是不低的,但是你如果要接入多个流的化最好还是要用NVDEC解码,不然你的CPU会吃不消。尤其像
Xavier的CPU还是Arm v8。
6. ffplay(cuda)
(1). 直接播放
ffplay rtsp://admin:abc123456@192.168.1.64:554 #延迟1s
(2). 关闭缓存
ffplay -fflags nobuffer rtsp://admin:abc123456@192.168.1.64:554 #延迟300ms