Ошибка типа: GstFraction неизвестного типа

#python-3.x #gstreamer #gstreamer-1.0 #python-gstreamer

#python-3.x #gstreamer #gstreamer-1.0 #python-gstreamer

Вопрос:

Я пытаюсь использовать Gstreamer с привязками python для поиска доступных камер в моей системе. В результате я хотел бы получить список устройств с их соответствующими возможностями (ширина, высота, частота кадров …).

Gstreamer предлагает очень полезный класс под названием Gst.DeviceMonitor для получения доступных устройств. Однако я столкнулся с проблемами при привязке к возможностям извлечения из обнаруженных устройств. Конкретно, у меня возникают проблемы только с получением возможностей «pixel-aspect-ratio» и «framerate», которые оба относятся к типу Gst.Fraction.

Вот минимальный пример кода:

 import gi

gi.require_version('Gst', '1.0')
from gi.repository import Gst

Gst.init(None)

caps = Gst.Caps.from_string('video/x-h264,width=640,height=480,framerate={30/1, 20/1, 15/1, 1/1}')
structure = caps.get_structure(0)

width = structure.get_int('width').value
height = structure.get_int('height').value
framerates = structure.get_list('framerate').array

print('width = ', width)
print('height = ', height)
for i in range(framerates.n_values):
    print(' - framerate = ', framerates.get_nth(i))
  

В последней строке выдается следующее исключение:

 TypeError: unknown type GstFraction
  

Я обнаружил здесь, что у кого-то была аналогичная проблема в 2012 году, но я не нашел никаких решений. У кого-нибудь есть какие-либо предложения?

PS: я использую Python 3.5.5 и Gstreamer 1.14.5 .

Ответ №1:

У меня была точно такая же проблема, и я, наконец, нашел решение: установите пакет python3-gst-1.0 :

 sudo apt install python3-gst-1.0
  

Я удивлен, что все остальное работало без этого пакета.

Ответ №2:

Ваш код отлично работает на Ubuntu 18:

 $ python3 --version
Python 3.6.9

$ gst-inspect-1.0 --version
gst-inspect-1.0 version 1.14.5

  
 width =  640
height =  480
 - framerate =  30/1
 - framerate =  20/1
 - framerate =  15/1
 - framerate =  1/1
  

Так что это может быть ошибка в привязках самоанализа Python GStreamer / GObject.

Комментарии:

1. Я обновил Python до версии 3.8.6. Я запускаю пример кода ранее, и я все еще получаю ту же ошибку. Я также пробовал с Python 3.6.9 (как и вы), и снова результат тот же. Единственное отличие в том, что я использую Ubuntu 20. Есть ли у вас какие-либо другие рекомендации, которые могут отличаться?