2010-11-14 106 views
4

我有一些設計問題想與有興趣幫助我的人討論。我打算開發一個簡單的VoIP程序,允許同一網絡中的兩部Android手機使用VoIP。我的目標是簡單地捕捉聲音,使用UDP發送數據,接收UDP數據並播放聲音。Android:實施VoIP程序

我目前的設計是有2個線程:一個捕獲麥克風併發送數據;另一個接收字節並播放它們。

我開始實施使用MediaPlayer和MediaRecorder。出現的問題是我如何錄製和播放聲音?因此,我想知道是否需要使用文件,儘管看起來很慢,或者如果有記錄會自動發送到我的UDP套接字嗎?

基本上,我不知道是否有記錄到文件中,然後才能夠發揮它,或者,如果我可以只通過一個插槽(用於記錄和播放)。

有沒有人有任何建議嗎?

非常感謝您

+0

你的意思是「在同一網絡中的電話」並不是互聯網上的所有這些設備? – 2010-11-14 02:05:47

+2

同樣的網絡,我的意思是它不會離開NAT盒子(例如那些Linksys路由器)。問題在於防火牆:傳入的連接將被拒絕,因爲它不知道將其轉發給哪個設備,並且出於安全原因。出於這個原因,所有設備都將連接到同一臺路由器,並且我將手動輸入IP地址。 – Jary 2010-11-14 02:17:49

回答

1

MediaRecorder需要一個FD的話,你可以使用套接字爲好。我沒有看到任何問題。這完全取決於你如何設計你的系統。

+0

當我使用「Socket」類時,我可以將套接字傳遞給MediaRecorder,但Socket類似乎使用TCP。我一直在嘗試使用DatagramSocket和DatagramPacket類,因爲它使用UDP,但MediaRecorder不會接受這些類。我使用ParcelFileDescriptor.fromSocket(),但它需要一個Socket,而不是DatagramSocket。請有任何想法嗎? – Jary 2010-11-14 18:25:08

1

請勿將這些類用於流式音頻 - 請改用AudioTrack和AudioRecord。

它們提供播放和錄製原始音頻數據所需的功能,而無需處理FD。

當您錄製幀(byte []或short [])時,將其包裝爲一個UDP數據包。 當您收到一個UDP數據包時,解壓相關字節[]或短[]並播放它。