我正在尋找一種方式來捕捉用戶的聲卡輸出和它傳輸實時通過RTMP一個RED5服務器的用戶的聲卡輸出。捕獲在一個Java小程序
使用音頻重新定向,例如與Windows立體聲混合不是一個選項,因爲它很難配置,並且在配置和Windows版本中不一致。
我打開這個方向的各種可能的解決方案 - 即使JNI/JNA可能?
感謝您的建議!
我正在尋找一種方式來捕捉用戶的聲卡輸出和它傳輸實時通過RTMP一個RED5服務器的用戶的聲卡輸出。捕獲在一個Java小程序
使用音頻重新定向,例如與Windows立體聲混合不是一個選項,因爲它很難配置,並且在配置和Windows版本中不一致。
我打開這個方向的各種可能的解決方案 - 即使JNI/JNA可能?
感謝您的建議!
好的 - 在Java中肯定沒有原生的方式來捕獲聲卡輸出的瀏覽器。可以使用Java本地接口編寫特定於平臺的代碼來攔截行,並將原始音頻數據傳遞給小程序以進一步處理它。
如果您打算使用JNI/JNA,爲什麼不通過C++或C訪問聲卡驅動程序,那將更容易一些,因爲無論如何,您要用Java編寫接口,但是它們的實現將使用C++或C.
我不是100%確定,但我不認爲這會有所幫助。據我所知,沒有一個聲音驅動程序可以獲得的「祕密」輸出,通過捕獲Windows立體聲混合,您無法獲得Java。換句話說,如果用戶已經設法配置他們的機器,以使Windows立體聲混音沒有任何東西出現,那麼複用聲音驅動程序也不會捕獲任何東西。儘管如此,我認爲在海報上研究這一點並沒有什麼壞處。 – 2011-04-18 14:24:47
見Capturing Audio在Java教程。
一個applet將需要由最終用戶進行數字簽名,以及可信的之前,將有可能攔截在聲音線的數據。
如果沒有軟件或硬件「音頻環回」被啓用,它可能完全失效(甚至在完全可信的小程序)。
正如我在問題中所說的,我不想捕獲聲卡輸入信號(或回送設備),而是聲卡的_output_。 – nanoman 2011-04-08 08:21:21
是的,我明白你的原始問題。你想說啥?順便說一句 - 一個小程序可以在沙箱中發出聲音,但要**攔截聲音線**中的數據(例如,讀取**輸出**),您將需要一個已簽名的小程序。 – 2011-04-08 09:08:21
@Andrew--你真的嘗試過嗎?我有一種感覺,這不是真的。 (文檔說你需要一個已簽名的Applet,但至少在某些版本的Java插件中,這看起來並不是真的。) – 2011-04-18 14:26:26
這不是微不足道的,因爲它看起來。
你需要做什麼[第1部分 - 創建存儲信息的地方]:
比方說你有1個MB的文件,(例如.OGG)音頻文件的最大尺寸,你想上傳到服務器數據庫。如果你要創建一個自動化的上傳,你可能會藏漢創建一個網頁前端,您可以手動使用。
如果你想你的問題的答案,然後形成明確的問題,即人能夠回答。如果不指定限制,那麼它是IMO非專業,至少我永遠不會寫一個複雜的解決方案。
對不起,我的第一個答案對你沒有用處。我試圖簡化這個問題,但我簡化了它。 "Everything should be made as simple as possible, but not simpler." A. Einstein.
作爲一個潛在的解決您的問題,我可以建議:
如果不解決您的問題,那麼我希望它至少對你有用。
我認爲這很清楚,我想捕捉用戶的聲卡輸出並實時流到服務器。常用的解決方案使用Windows立體聲混音功能,將聲卡輸出路由到虛擬輸入。這是我不想要的解決方案。 – nanoman 2011-04-17 15:36:41
使用Windows音頻混音時,您的配置有什麼困難? – 2011-04-17 15:42:41
我同意@Neil Coffey--立體聲混音選項可以在Windows上的所有現代版本中始終如一地工作。自Vista以來,該設備默認情況下通常處於禁用狀態,但有很多教程可以解決這個問題 - http://www.howtogeek.com/howto/39532/how-to-enable-stereo-mix-in-windows-7 -to-record-audio/ – 2011-04-18 05:39:56
我覺得用戶太難了。即使在我們自己的辦公室裏,我們也發現了立體聲混音不能工作的配置(XP)。該功能對我們的應用至關重要。 – nanoman 2011-04-18 08:36:03