当前位置:   article > 正文

python使用opencv低延迟拉取rtsp流_python rtsp取流

python rtsp取流

传统方式

  1. import cv2
  2. url = "rtsp://**********************"
  3. cap = cv2.VideoCapture(url)
  4. while True:
  5. ret, frame = cap.read()
  6. cv2.imshow("frame", frame)
  7. if cv2.waitKey(1) & 0xFF == ord("q"):
  8. break

这种方式比较简单,但是拉取的视频流会有1s左右的延迟

GSTREAMER的方式进行拉流

安装依赖

  1. # 安装gstreamer的依赖包
  2. sudo apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio -y
  3. sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -y
  4. # 更新python相关依赖
  5. python3 -m pip install --upgrade pip
  6. python3 -m pip install --upgrade setuptools
  7. python3 -m pip install --upgrade wheel
  8. # 这一步很重要,如果不安装,会导致opencv源码编译中出现问题
  9. python3 -m pip install numpy
  10. # 拉取opencv源码,github中的比较卡,可以使用下面的gitee的同步源
  11. git clone https://gitee.com/luzhipeng0728/opencv.git
  12. # 进入opencv库
  13. cd opencv/
  14. # 这里我们使用的是opencv 4.4.0的版本,如果有特殊需要可以使用其它版本
  15. git checkout 4.4.0
  16. # 开始进行编译,期间要确保python3的版本,默认Python3位3.6.9如果需要安装到python3.8中需要自行切换默认python
  17. mkdir build
  18. cd build/
  19. cmake -D CMAKE_BUILD_TYPE=RELEASE \
  20. -D INSTALL_PYTHON_EXAMPLES=ON \
  21. -D INSTALL_C_EXAMPLES=OFF \
  22. -D PYTHON_EXECUTABLE=$(which python3) \
  23. -D BUILD_opencv_python2=OFF \
  24. -D CMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)") \
  25. -D PYTHON3_EXECUTABLE=$(which python3) \
  26. -D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
  27. -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
  28. -D WITH_GSTREAMER=ON \
  29. -D BUILD_opencv_python3=yes \
  30. -D BUILD_EXAMPLES=ON \
  31. ..

cmake执行完成后需要注意下面

 需要注意上面的两个划红线的地方,GStreamer需要为YES,编译时候,才能将gstreamer编译到opencv中去,python3下面的四行内容要完整才能保证opencv编译到python3的opencv中去

如果有问题,可以去看下上面的脚本中的依赖是否有安装失败的

如果之前已经安装过opencv的话需要将原来直接pip安装的opencv卸载掉

python3 -m pip uninstall opencv-python

下面执行编译

  1. # 编译
  2. sudo make -j$(nproc)
  3. # 执行安装
  4. sudo make install
  5. # 更新config
  6. sudo ldconfig
  7. # 使用下面的执行查看,看到的应该和上面截图中cmake显示的一样,如果GStreamer为YES,则说明编译成功了
  8. python3 -c "import cv2; print(cv2.getBuildInformation())"

如果上面步骤都正常通过了,下面我们来执行测试代码,查看使用gstreamer的视频进行拉流,延迟为多少

  1. import cv2
  2. image_width = 1920
  3. image_height = 1080
  4. rtsp_latency = 10
  5. uri = "rtsp://admin:123456@192.168.3.64:554/Streaming/Channels/1"
  6. gst_str = ("rtspsrc location={} latency={} ! rtph264depay ! avdec_h264 ! videorate ! videoconvert ! appsink sync=false").format(uri, rtsp_latency)
  7. print(f'use gstream {gst_str}')
  8. cap = cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)
  9. while True:
  10. ret, frame = cap.read()
  11. cv2.imshow("frame", frame)
  12. if cv2.waitKey(1) & 0xFF == ord("q"):
  13. break

可以看到上面的延迟只有0.4s左右 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号