Ngrok потоковое аудио исключение - PullRequest
1 голос
/ 07 октября 2019

Я написал код клиент / сервер, используя сокет Java-сервера (TCP). Сервер работает как радио, слушает микрофон и отправляет байты подключенным клиентам. Когда я запускаю код, используя «localhost» в качестве имени сервера, он работает очень хорошо, и я могу слышать голос в динамиках без каких-либо проблем.

Теперь, когда я хочу выставить localhost в интернет, используя ngrok:

Forwarding                    tcp://0.tcp.ngrok.io:11049 -> localhost:5000

Я начинаю получать ниже исключения на стороне клиента:

java.lang.IllegalArgumentException: illegal request to write non-integral number of frames (1411 bytes, frameSize = 2 bytes)
    at com.sun.media.sound.DirectAudioDevice$DirectDL.write(Unknown Source)
    at client.Client.Start(Client.java:79)
    at client.Receiver.main(Receiver.java:17)

Кто-нибудь знает, почему и как я могу решить такую ​​проблему?

Я попытался изменить длину массива байтов.

// код сервера

byte _buffer[] = new byte[(int) (_mic.getFormat().getSampleRate() *0.4)];
 // byte _buffer[] = new byte[1024];
  _mic.start();
   while (_running) {
   // returns the length of data copied in buffer
   int count = _mic.read(_buffer, 0, _buffer.length);
   //if data is available
    if (count > 0) {
       server.SendToAll(_buffer, 0, count);
        }
      }

// код клиента, где происходит исключение:

_streamIn = _server.getInputStream();

            _speaker.start();

            byte[] data = new byte[8000];
            System.out.println("Waiting for data...");

            while (_running) {
                //  checking if the data is available to speak
                if (_streamIn.available() <= 0)
                    continue;   //  data not available so continue back to start of loop

                //  count of the data bytes read
                int readCount= _streamIn.read(data, 0, data.length);
                if(readCount>0){
                    _speaker.write(data, 0, readCount); // here throws exception
                }
            }

должен воспроизводить звук черездинамик.

...