获取源功能
Getting source capabilities
使用 gst-launch 和调试标志,我能够查询我的网络摄像头的功能。
例如
➜ 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 的功能和协商的上限。
我无法从物理硬件中提取实际可用的上限。
做这样的事情
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 和实际元素的 none 上显示了很多上限。
打印函数来自教程文件](https://github.com/gkralik/python-gst-tutorial/blob/master/basic-tutorial-6.py)
当我将其放入管道时,我得到了与管道兼容的功能列表,而不是整个列表。
回到问题:如何制作一个小的 python 程序来显示我的硬件功能?
链接或代码片段将不胜感激。
您可以将您的网络摄像头作为 Gst.Device 检查并以这种方式获取所有可用的上限。 GStreamer 的 V4L2 支持提供了一个设备供应商工厂,能够为您的系统提供所有 V4L2 网络摄像头。
device_provider = Gst.DeviceProviderFactory.get_by_name("v4l2deviceprovider")
devices = device_provider.get_devices()
接下来,您需要在列表中找到您感兴趣的设备。我通过将设备对象的 "device.path" 属性 与已知路径匹配来完成此操作,例如“/dev/video0”。执行此操作后,您可以通过调用 get_caps()
.
获取设备的可用上限
for device in devices:
path = device.get_properties().get_string("device.path")
if path == my_path:
caps = device.get_caps()
使用 gst-launch 和调试标志,我能够查询我的网络摄像头的功能。 例如
➜ 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 的功能和协商的上限。
我无法从物理硬件中提取实际可用的上限。
做这样的事情
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 和实际元素的 none 上显示了很多上限。
打印函数来自教程文件](https://github.com/gkralik/python-gst-tutorial/blob/master/basic-tutorial-6.py)
当我将其放入管道时,我得到了与管道兼容的功能列表,而不是整个列表。
回到问题:如何制作一个小的 python 程序来显示我的硬件功能?
链接或代码片段将不胜感激。
您可以将您的网络摄像头作为 Gst.Device 检查并以这种方式获取所有可用的上限。 GStreamer 的 V4L2 支持提供了一个设备供应商工厂,能够为您的系统提供所有 V4L2 网络摄像头。
device_provider = Gst.DeviceProviderFactory.get_by_name("v4l2deviceprovider")
devices = device_provider.get_devices()
接下来,您需要在列表中找到您感兴趣的设备。我通过将设备对象的 "device.path" 属性 与已知路径匹配来完成此操作,例如“/dev/video0”。执行此操作后,您可以通过调用 get_caps()
.
for device in devices:
path = device.get_properties().get_string("device.path")
if path == my_path:
caps = device.get_caps()