Пиша приложение GStreamer (GStreamer използва DirectShow под капака на Windows), което улавя микрофона и видеокамерата на компютъра. Работи добре, но изисква да посоча имената на устройствата ръчно. Бих искал програмата ми да ги открива автоматично. Някой знае ли как се прави това?
Как да откриете името на устройството за устройство за заснемане?
comment
Не ви ли позволява да изброите такива устройства?
- person Vilx-   schedule 29.01.2010
comment
можете ли да дадете примерен команден ред, който работи добре, например sake?
- person rogerdpack   schedule 16.09.2011
Отговори (2)
Ще ме изненада, ако GStreamer няма възможности за изброяване на устройства, но DirectShow определено има.
Вижте статията за използване на системния изброител на устройства и го използвайте с правилните категории на филтри - във вашия случай CLSID_AudioInputDeviceCategory
и CLSID_VideoInputDeviceCategory
.
person
Georg Fritzsche
schedule
29.01.2010
Трябва да използвате интерфейса за сондиране на GStreamer, който ви позволява да изброите всички възможни стойности за дадено свойство, във вашия случай „име на устройство“.
Ето един пример:
GList*
gst_camera_capturer_enum_devices(gchar* device_name)
{
GstElement* device;
GstPropertyProbe* probe;
GValueArray* va;
GList* list=NULL;
guint i=0;
device = gst_element_factory_make (device_name, "source");
gst_element_set_state(device, GST_STATE_READY);
gst_element_get_state(device, NULL, NULL, 5 * GST_SECOND);
if (!device || !GST_IS_PROPERTY_PROBE(device))
goto finish;
probe = GST_PROPERTY_PROBE (device);
va = gst_property_probe_get_values_name (probe, "device-name");
if (!va)
goto finish;
for(i=0; i < va->n_values; ++i) {
GValue* v = g_value_array_get_nth(va, i);
list = g_list_append(list, g_string_new(g_value_get_string(v)));
}
g_value_array_free(va);
finish:
{
gst_element_set_state (device, GST_STATE_NULL);
gst_object_unref(GST_OBJECT (device));
return list;
}
}
GList*
gst_camera_capturer_enum_video_devices(void)
{
return gst_camera_capturer_enum_devices("dshowvideosrc");
}
GList*
gst_camera_capturer_enum_audio_devices(void)
{
return gst_camera_capturer_enum_devices("dshowaudiosrc");
}
person
ylatuya
schedule
14.06.2012
Не трябва ли да изследвате
"device"
вместо "device-name"
?
- person Has QUIT--Anony-Mousse; 17.02.2013
Очевидно на alsa и импулсните поглътители трябва да проверите
device
, докато на DirectShow трябва да проверите device-name
? Аргх
- person Has QUIT--Anony-Mousse; 17.02.2013