获取源代码功能

2024-05-19 14:00:43 发布

您现在位置:Python中文网/ 问答频道 /正文

使用gst启动和调试标志,我可以查询我的网络摄像头的功能。 例如

➜ GST_DEBUG=v4l2src:6 gst-launch-1.0 v4l2src device=/dev/video0 ! xvimagesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:00.173516041 29482 0x559bc3ff6ca0 DEBUG                v4l2src gstv4l2src.c:512:gst_v4l2src_negotiate:<v4l2src0> caps of src: video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1; video/x-raw, format=(string)YUY2, width=(int)960, height=(int)540, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1; video/x-raw, format=(string)YUY2, width=(int)848, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)20/1; video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-raw, format=(string)YUY2, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-raw, format=(string)YUY2, width=(int)424, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-raw, format=(string)YUY2, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-raw, format=(string)YUY2, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-raw, format=(string)YUY2, width=(int)320, height=(int)180, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)960, height=(int)540, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)848, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)424, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; image/jpeg, width=(int)320, height=(int)180, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }
...

以更具可读性的方式,它说大写字母是:

 video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
 video/x-raw, format=(string)YUY2, width=(int)960, height=(int)540, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1
...
 image/jpeg, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }
 image/jpeg, width=(int)960, height=(int)540, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }
...

我想做一个python程序来提取这些信息。你知道吗

我一直在使用this example program,可以提取v4l2src的功能和协商的caps。你知道吗

我无法从物理硬件中提取可用的实际上限。你知道吗

做这样的事


source_factory = Gst.ElementFactory.find("v4l2src")
pads = source_factory.get_static_pad_templates()
print("*** v4l2src has a lot of capabilities ****")
print_pad_templates_information(source_factory)

source = source_factory.create("source")
source.set_property('device', "/dev/video0")
print("*** Physical v4l2src device has no capabilities ****")
print_pad_capabilities(source, "src")


在v4l2src上显示很多cap,而没有实际的元素。你知道吗

打印函数来自教程文件](https://github.com/gkralik/python-gst-tutorial/blob/master/basic-tutorial-6.py

当我把它放到管道中时,我得到的是与管道兼容的功能列表,而不是整个列表。你知道吗

那么回到问题上来:如何制作一个小型python程序来展示我的硬件功能?你知道吗

链接或代码片段将不胜感激。你知道吗


Tags: imageformatstringrawvideowidthjpegint
1条回答
网友
1楼 · 发布于 2024-05-19 14:00:43

你可以检查你的摄像头作为一个消费税装置把所有可用的帽子都拿出来。GStreamer的V4L2支持提供了一个设备提供商工厂,它能够为您的系统提供所有V4L2网络摄像头。你知道吗

device_provider = Gst.DeviceProviderFactory.get_by_name("v4l2deviceprovider")
devices = device_provider.get_devices()

接下来,您需要在列表中找到您感兴趣的设备。我通过匹配设备对象的“设备路径具有已知路径的属性,如“/dev/video0”。完成此操作后,可以通过调用get_caps()获取设备的可用上限。你知道吗

for device in devices:
    path = device.get_properties().get_string("device.path")
    if path == my_path:
        caps = device.get_caps()

相关问题 更多 >