2011-12-20 5 views
7

소켓 작업을 이해하고 싶습니다. 특히 장치에서 mediarecorder가 보낸 스트림을 수신하려면 서버 측에 대한 코드 샘플이 필요합니다.서버로의 안드로이드 스트림 오디오

도움을 주셔서 감사합니다.

나의 진정한 최종 의도는 장치에서 이야기하고 한 방향으로 PC에서 듣는 것입니다. 순간

나는 다음과 같은 코드를 사용하여 스트림을 보낼 수 있어요 :

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

PC에서 사용하는 언어는 무엇입니까? – Axis

+0

.NET 플랫폼, vb.net 또는 C#을 사용합니다. – Giuseppe

답변

4

가 좋아 보인다,하지만 나는 개인적으로 장치의 오디오 버퍼 및 다른에서 서버로 전송하는 것을 선호 스레드 대신 레코더를 직접 소켓에 묶어 두는 것이 좋습니다. 로컬에서 버퍼링하면 정상적으로 연결이 끊어지는 것을 처리 할 수 ​​있습니다.

녹화 중이며 사용자가 터널을 통과하여 인터넷 연결이 끊어지는 것을 상상해보십시오. 직접 스트리밍하는 경우 소켓이 닫히고 사용자가 짜증을냅니다 .-) 그러나 데이터를 로컬로 버퍼링하는 경우 , 연결을 다시 설정하고 중단 한 지점에서 오디오를 서버로 계속 보낼 수 있습니다. 사용자는 연결이 끊어 졌음을 알 필요조차 없습니다. 단지 마술처럼 작동하기 때문입니다.

작동하려면 로컬 버퍼에 기록을 쓰고 별도의 스레드에서 해당 버퍼의 새 데이터를 확인하고 가능한 빨리 서버에 보내야합니다.

+2

몇 가지 예를 들면? – Giuseppe

관련 문제