使用python vlc 读取视频图像帧

直接上代码:
import vlc
import ctypes
import time
import sys
import cv2
import numpy
from PIL import Image

vlcInstance = vlc.Instance()

m = vlcInstance.media_new("rtsp://admin:admin@172.16.1.60:554/h264/ch1/main/av_stream")

mp = vlc.libvlc_media_player_new_from_media(m)

VIDEOWIDTH = 1920
VIDEOHEIGHT = 1080

size = VIDEOWIDTH * VIDEOHEIGHT * 4
buf = (ctypes.c_ubyte * size)()
buf_p = ctypes.cast(buf, ctypes.c_void_p)

VideoLockCb = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(ctypes.c_void_p))

@VideoLockCb
def _lockcb(opaque, planes):
#print("lock", file=sys.stderr)
planes[0] = buf_p

@vlc.CallbackDecorators.VideoDisplayCb
def _display(opaque, picture):
img = Image.frombuffer("RGBA", (VIDEOWIDTH, VIDEOHEIGHT), buf, "raw", "BGRA", 0, 1)
opencvImage = cv2.cvtColor(numpy.array(img), cv2.COLOR_RGB2BGR)
cv2.imshow('image',opencvImage)
cv2.waitKey(10)

vlc.libvlc_video_set_callbacks(mp, _lockcb, None, _display, None)
mp.video_set_format("BGRA", VIDEOWIDTH, VIDEOHEIGHT, VIDEOWIDTH*4)
while True:
mp.play()
time.sleep(1)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容