我目前正在嘗試將直播麥克風音頻從Android設備流式傳輸到Java程序。我首先在兩個android設備之間發(fā)送實時音頻,以確認我的方法正確。在接收設備上幾乎沒有任何延遲地可以完美地聽到音頻。接下來,我將相同的音頻流發(fā)送到一個小型Java程序,并驗證了數據也已正確發(fā)送到此處?,F(xiàn)在,我想要做的是對這些數據進行編碼,并以某種方式在運行Java程序的服務器上對其進行回放。我寧愿在使用HTML5或JavaScript的網絡瀏覽器中播放它,但可以使用VLC等替代方法。這是發(fā)送實時麥克風音頻的Android應用的代碼public class MainActivity extends Activity {private Button startButton,stopButton;public byte[] buffer;public static DatagramSocket socket; AudioRecord recorder;private int sampleRate = 44100; private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO; private int audioFormat = AudioFormat.ENCODING_PCM_16BIT; int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); private boolean status = true;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startButton = (Button) findViewById (R.id.start_button); stopButton = (Button) findViewById (R.id.stop_button); startButton.setOnClickListener(startListener); stopButton.setOnClickListener(stopListener); minBufSize += 2048;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true;}這是Java程序讀取數據的代碼。class Server{ public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(50005); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); String sentence = new String( receivePacket.getData().toString()); System.out.println("RECEIVED: " + sentence); } }}我知道在將音頻發(fā)送到Java程序之前,應該先在應用程序端對音頻進行編碼,但是我不確定在使用AudioRecorder時如何進行編碼。我寧愿不使用NDK,因為我沒有使用它的經驗,也沒有足夠的時間學習如何使用它。...:)
3 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
由于您的android代碼中的以下行,聲音被打斷了:
minBufSize += 2048;
您只是添加空字節(jié)。另外,使用CHANNEL_IN_MONO代替CHANNEL_CONFIGURATION_MONO
添加回答
舉報
0/150
提交
取消