此刻,我显示VideoImageTrack
类,下面显示了波纹管(改编自here),该类返回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
尽管我不知道处理是否会更快,但是您可以尝试使用GStreamer的videoconvert,即transcodes多种格式之间的视频帧。
示例管道:
v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=BGR,width=640,height=480,framerate=15/1 ! appsink