В данный момент у меня есть класс VideoImageTrack
, который я показываю ниже (адаптировано из здесь ), который возвращает av
VideoFrame
. Сценарий, который я показываю, работает отлично. Моя проблема в том, что шаг кодирования кадра:
VideoFrame.from_ndarray(image, format="bgr24")
довольно медленный.
Существует ли конвейер gstreamer
, который выводит уже закодированный кадр и итерируется с помощью python-opencv
read()
?
class VideoImageTrack(VideoStreamTrack):
"""
A video stream track that returns a rotating image.
"""
def __init__(self):
super().__init__() # don't forget this!
self.video = cv2.VideoCapture("v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=15/1,bitrate=250000 ! appsink")
async def recv(self):
pts, time_base = await self.next_timestamp()
retval, image = self.video.read()
frame = VideoFrame.from_ndarray(image, format="bgr24")
frame.pts = pts
frame.time_base = time_base
return frame