2011-04-06 49 views
2

我正在尋找一種方式來捕捉用戶的聲卡輸出和它傳輸實時通過RTMP一個RED5服務器的用戶的聲卡輸出。捕獲在一個Java小程序

使用音頻重新定向,例如與Windows立體聲混合不是一個選項,因爲它很難配置,並且在配置和Windows版本中不一致。

我打開這個方向的各種可能的解決方案 - 即使JNI/JNA可能?

感謝您的建議!

+0

使用Windows音頻混音時,您的配置有什麼困難? – 2011-04-17 15:42:41

+0

我同意@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

+0

我覺得用戶太難了。即使在我們自己的辦公室裏,我們也發現了立體聲混音不能工作的配置(XP)。該功能對我們的應用至關重要。 – nanoman 2011-04-18 08:36:03

回答

0

好的 - 在Java中肯定沒有原生的方式來捕獲聲卡輸出的瀏覽器。可以使用Java本地接口編寫特定於平臺的代碼來攔截行,並將原始音頻數據傳遞給小程序以進一步處理它。

0

如果您打算使用JNI/JNA,爲什麼不通過C++或C訪問聲卡驅動程序,那將更容易一些,因爲無論如何,您要用Java編寫接口,但是它們的實現將使用C++或C.

+0

我不是100%確定,但我不認爲這會有所幫助。據我所知,沒有一個聲音驅動程序可以獲得的「祕密」輸出,通過捕獲Windows立體聲混合,您無法獲得Java。換句話說,如果用戶已經設法配置他們的機器,以使Windows立體聲混音沒有任何東西出現,那麼複用聲音驅動程序也不會捕獲任何東西。儘管如此,我認爲在海報上研究這一點並沒有什麼壞處。 – 2011-04-18 14:24:47

0

Capturing Audio在Java教程。

一個applet將需要由最終用戶進行數字簽名,以及可信的之前,將有可能攔截在聲音線的數據。

如果沒有軟件或硬件「音頻環回」被啓用,它可能完全失效(甚至在完全可信的小程序)。

+0

正如我在問題中所說的,我不想捕獲聲卡輸入信號(或回送設備),而是聲卡的_output_。 – nanoman 2011-04-08 08:21:21

+0

是的,我明白你的原始問題。你想說啥?順便說一句 - 一個小程序可以在沙箱中發出聲音,但要**攔截聲音線**中的數據(例如,讀取**輸出**),您將需要一個已簽名的小程序。 – 2011-04-08 09:08:21

+1

@Andrew--你真的嘗試過嗎?我有一種感覺,這不是真的。 (文檔說你需要一個已簽名的Applet,但至少在某些版本的Java插件中,這看起來並不是真的。) – 2011-04-18 14:26:26

0

這不是微不足道的,因爲它看起來。

你需要做什麼[第1部分 - 創建存儲信息的地方]:

  • 描述的服務器,存儲文件。 (例如:Google App Engine)
  • 描述您要如何存儲文件。 (例如:數據存儲)
  • 描述了數據的完整性有多重要。 (例如:它更容易上傳文件,與現有的上傳API,然後將數據流實例的Apache的FileUpload)

比方說你有1個MB的文件,(例如.OGG)音頻文件的最大尺寸,你想上傳到服務器數據庫。如果你要創建一個自動化的上傳,你可能會藏漢創建一個網頁前端,您可以手動使用。

如果你想你的問題的答案,然後形成明確的問題,即人能夠回答。如果不指定限制,那麼它是IMO非專業,至少我永遠不會寫一個複雜的解決方案。


對不起,我的第一個答案對你沒有用處。我試圖簡化這個問題,但我簡化了它。 "Everything should be made as simple as possible, but not simpler." A. Einstein.

作爲一個潛在的解決您的問題,我可以建議:

  • Screener - 一個Java程序,不僅流音頻,而且還包括截屏視頻。 enter image description here

如果不解決您的問題,那麼我希望它至少對你有用。

+0

我認爲這很清楚,我想捕捉用戶的聲卡輸出並實時流到服務器。常用的解決方案使用Windows立體聲混音功能,將聲卡輸出路由到虛擬輸入。這是我不想要的解決方案。 – nanoman 2011-04-17 15:36:41