萤石摄像头视频帧获取

近来购买了萤石摄像头进行一些开发,发现网上很多读取海康威视摄像头的都是直接读取视频源地址。这些视频源都是采用RTSP协议的。比如:知乎实例

然而实际使用过程中发现,萤石系列并不提供RTSP地址。所以,要另谋思路。

在stackoverflow中无意看到这么一篇streaming m3u8 file with opencv

所以经过改写,可以有以下方法获取视频并逐帧播放。只是萤石摄像头直播高清和流畅的尺寸不清楚。只是猜测出了高清是1080*720。

获取帧的代码

import subprocess as sp
import cv2
import numpy

FFMPEG_BIN = "ffmpeg"

HD_VIDEO_URL = 
# VIDEO_URL = 

cv2.namedWindow("GoPro")

pipe = sp.Popen([ FFMPEG_BIN, "-i", HD_VIDEO_URL,
           "-loglevel", "quiet", # no text output
           "-an",   # disable audio
           "-f", "image2pipe",
           "-pix_fmt", "bgr24",
           "-vcodec", "rawvideo", "-"],
           stdin = sp.PIPE, stdout = sp.PIPE)
while True:
  # raw_image = pipe.stdout.read(720*480*3) # fluent video
  raw_image = pipe.stdout.read(1280*720*3) # read 1280*720*3 bytes (= 1 frame)(HD)
  #image =  numpy.fromstring(raw_image, dtype='uint8').reshape((480,720,3))
  image =  numpy.fromstring(raw_image, dtype='uint8').reshape((720,1280,3))
  cv2.imshow("GoPro",image)
  if cv2.waitKey(27) == 1:
      break
cv2.destroyAllWindows()

ffmepg的安装

sudo apt install ffmepg