为了账号安全,请及时绑定邮箱和手机立即绑定

将实时Android音频流传输到服务器

将实时Android音频流传输到服务器

喵喵时光机 2020-02-04 15:38:39
我目前正在尝试将直播麦克风音频从Android设备流式传输到Java程序。我首先在两个android设备之间发送实时音频,以确认我的方法正确。在接收设备上几乎没有任何延迟地可以完美地听到音频。接下来,我将相同的音频流发送到一个小型Java程序,并验证了数据也已正确发送到此处。现在,我想要做的是对这些数据进行编码,并以某种方式在运行Java程序的服务器上对其进行回放。我宁愿在使用HTML5或JavaScript的网络浏览器中播放它,但可以使用VLC等替代方法。这是发送实时麦克风音频的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);           }  }}我知道在将音频发送到Java程序之前,应该先在应用程序端对音频进行编码,但是我不确定在使用AudioRecorder时如何进行编码。我宁愿不使用NDK,因为我没有使用它的经验,也没有足够的时间学习如何使用它。...:)
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

由于您的android代码中的以下行,声音被打断了:


minBufSize += 2048;

您只是添加空字节。另外,使用CHANNEL_IN_MONO代替CHANNEL_CONFIGURATION_MONO


查看完整回答
反对 回复 2020-02-04
  • 3 回答
  • 0 关注
  • 1714 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信