我正在編寫一個GStreamer應用程序(GStreamer使用Windows下的DirectShow)來捕獲計算機的麥克風和攝像機。它工作正常,但需要我手動指定設備名稱。我想讓我的程序自動檢測這些。有誰知道這是怎麼做到的嗎?如何檢測捕獲設備的設備名稱?
2
A
回答
1
如果GStreamer沒有枚舉設備的能力,但是DirectShow肯定會有這個功能,這會讓我感到驚訝。
參見using the system device enumerator的文章,並用正確filter categories使用它 - 在你的情況CLSID_AudioInputDeviceCategory
和CLSID_VideoInputDeviceCategory
。
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");
}
+0
你不應該探測'''device''而不是''device'name'''嗎? – 2013-02-17 10:14:59
+0
顯然,在alsa和脈衝接收器上,你需要探測'device',而在DirectShow上你需要探測'device-name'?哎呀。 – 2013-02-17 10:28:27
相關問題
- 1. 如何獲取iPhone的設備名稱
- 2. 獲取設備名稱
- 3. 如何獲取設備名稱?
- 4. 從rfcomm設備服務中檢索藍牙設備的名稱
- 5. Genymotion設備名稱
- 6. 獲取設備標誌的設備名稱
- 7. 獲取磁盤設備的物理設備對象名稱
- 8. Silverlight檢測設備
- 9. 檢測Android設備
- 10. 如何根據zenoss中的組名稱獲取設備名稱?
- 11. 如何獲得我的設備的設備名稱使用WiFi p2p
- 12. 從黑莓設備獲取所有圖像名稱設備
- 13. Linux和bash - 如何獲取輸入設備事件的設備名稱?
- 14. 從設備的名稱獲得Bluetoothdevice
- 15. Xamarin表單 - 如何檢測設備是否是觸摸設備?
- 16. 如何從DEV_BROADCAST_DEVICEINTERFACE和設備實例ID獲取友好設備名稱
- 17. 如何捕獲外部設備按鍵?
- 18. 如何檢測設備的移動?
- 19. 如何檢測設備中的A-GPS?
- 20. 檢測的iOS設備11
- 21. 獲取電池設備名稱
- 22. 從javascript獲取(移動)設備名稱
- 23. Corebluetooth使用Swift獲取設備名稱
- 24. OpenSUSE - 獲取設備ID(或名稱)
- 25. Android設備名稱==「BlueZ」?
- 26. iPhone藍牙設備名稱
- 27. ios設備名稱列表
- 28. CoreBluetooth設備名稱更改
- 29. 重命名設備(硬編碼設備名稱)
這豈不是讓你列舉這樣的設備? – 2010-01-29 09:11:57
你能舉一個例子,爲什麼「工作正常」的示例命令行? – rogerdpack 2011-09-16 15:54:00