萤石摄像头视频帧获取
近来购买了萤石摄像头进行一些开发,发现网上很多读取海康威视摄像头的都是直接读取视频源地址。这些视频源都是采用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