2011-12-20 2 views
7

Я хотел бы понять, как работает сокет, особенно мне нужны некоторые примеры кода для серверной части для приема потока, отправленного с помощью mediarecorder с устройства.android stream audio to server

Благодарим за помощь.

Мое настоящее окончательное намерение - поговорить на устройстве и послушать его на ПК только в одном направлении.

На данный момент я могу отправить поток, используя следующий код:

String hostname = "192.168.1.10"; 
int port = 8000; 
Socket socket = null; 
    try { 
     socket = new Socket(InetAddress.getByName(hostname), port); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); 

recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(pfd.getFileDescriptor()); 

    try { 
     recorder.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

recorder.start(); 
+0

Какой язык вы используете на ПК? – Axis

+0

Я использую платформу .NET, vb.net или C# - то же самое. – Giuseppe

ответ

4

вроде нормально, но я бы лично предпочел, чтобы буфер аудио на устройстве и отправить его на сервер от другого нить вместо привязки рекордера к сокету так же, как вы. Поскольку буферизация локально позволит вам обрабатывать разрывы соединений изящно.

Представьте, что вы записываете, и пользователь проходит через туннель и теряет интернет-соединение - если вы прямо потоковещаете, розетка закрывается, и пользователь будет раздражаться :-) Однако, если вы буферизируете данные локально , вы можете восстановить соединение и продолжить отправку звука на сервер с того места, где вы остановились, и, надеюсь, пользователь даже не должен знать, что перерыв в соединении только что произошел, потому что он просто волшебным образом работает.

Для того, чтобы это сработало, вам нужно записать запись в локальный буфер и провести отдельную проверку потока для новых данных в этом буфере и как можно скорее отправить их на сервер.

+2

какой-нибудь пример пункт? – Giuseppe

 Смежные вопросы

  • Нет связанных вопросов^_^