コンピューターのマイクとビデオカメラをキャプチャするGStreamerアプリケーション(GStreamerはWindowsの内部でDirectShowを使用します)を作成しています。正常に動作しますが、デバイス名を手動で指定する必要があります。プログラムにこれらを自動的に検出させたいのですが。誰かがそれを行う方法を知っていますか?
2301 次
2 に答える
1
GStreamerにデバイスを列挙する機能がない場合は驚きますが、DirectShowには確かにあります。
システムデバイス列挙子の使用に関する記事を参照し、正しいフィルターカテゴリで使用し てください-あなたの場合CLSID_AudioInputDeviceCategory
とCLSID_VideoInputDeviceCategory
。
于 2010-01-29T10:34:39.460 に答える
1
GStreamerのプロービングインターフェイスを使用する必要があります。これにより、特定のプロパティ(この場合は「device-name」)のすべての可能な値を一覧表示できます。
次に例を示します。
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");
}
于 2012-06-14T16:26:17.293 に答える