Skip to main content
 首页 » 编程设计

python之无法使用 python 通过 v4l2loopback 设备生成稳定的视频流

2025年05月04日7tintown

我正在为我的视频映射集开发流生成器,但我无法使图像稳定。 我用 python-v4l2 打开一个 v4l2loopback 设备并通过它基于 png 生成视频流,因此可以在我的 vj 集中生成实时视频,并且仍然可以对它们进行视频映射并应用效果。

测试用例: 1)加载v4l2loopback模块

2) 运行 python:

import fcntl, numpy 
from v4l2 import * 
from PIL import Image 
height = 600 
width = 634 
device = open('/dev/video4', 'wr') 
print(device) 
capability = v4l2_capability() 
print(fcntl.ioctl(device, VIDIOC_QUERYCAP, capability)) 
print("v4l2 driver: " + capability.driver) 
format = v4l2_format() 
format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT 
format.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB32 
format.fmt.pix.width = width 
format.fmt.pix.height = height 
format.fmt.pix.field = V4L2_FIELD_NONE 
format.fmt.pix.bytesperline = format.fmt.pix.width * 4 
format.fmt.pix.sizeimage = format.fmt.pix.width * format.fmt.pix.height * 4 
format.fmt.pix.colorspace = V4L2_COLORSPACE_SRGB 
print(fcntl.ioctl(device, VIDIOC_S_FMT, format)) 
img = Image.open('img/0.png') 
img = img.convert('RGBA') 
while True: 
    device.write(numpy.array(img)) 

3) 运行 Cheese 或其他 v4l2 流查看器。

结果是一幅颜色和大小都合适的图像,但它在每一帧都从左到右跳动,并且总是向左跳动一点,因此您会得到滑动和跳跃的视频效果。 我做错了什么?

最好的问候,

clown

ps:如果您想查看结果,请检查:link到目前为止,LiVES、puredate、gem 视频映射设置与 v4l2 流配合得很好。

请您参考如下方法:

所以我得到了一种工作,但不确定它是否是正确的方法。我需要为稳定的视频流做些什么:

1) 不要使用自定义分辨率,它们会变得困惑。

2) 每帧发送两次。我认为这与隔行扫描/顶部/底部框架有关。

3) 对于 640x480,将所有像素向阵列左侧移动 260 个空格,否则图像不直,对于 1024x768 doh...不知道为什么会这样。

4) 播放帧率略低于程序生成的帧率。

毕竟它每 10 秒稳定 99%。大约有一个 buggy 框架。我认为程序生成的帧率不是 100% 稳定的。

仍然欢迎就为什么或如何做得更好提出建议。

有关更新,请参阅:https://github.com/umlaeute/v4l2loopback/issues/32