2011-12-20 34 views
7

Soket çalışmasının nasıl yapıldığını anlamak istiyorum, özellikle sunucu tarafında mediarecorder tarafından gönderilen akışı almak için bazı kod örneklerine ihtiyacım var.android akışı sunucuya ses akışı

Yardımlarınız için çok teşekkür ederim.

Gerçek son amacım cihazda konuşmak ve PC'de sadece bir yönde dinlemek. Şu anda

Aşağıdaki kodu kullanarak akışı dışarı göndermek mümkün duyuyorum:

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'de hangi dili kullanıyorsunuz? – Axis

+0

.NET platformu kullanıyorum, vb.net veya C# aynıdır. – Giuseppe

cevap

4

Tamam görünüyor, ama ben şahsen cihazda ses tampon ve birbirinden sunucuya göndermek için tercih ediyorum Kayıt cihazını doğrudan sizin yaptığınız gibi sokete bağlamak yerine takın. Yerel olarak arabelleğe almak, bağlantı aralarını incelikle işlemenizi sağlar.

Kaydettiğinizi ve kullanıcının bir tünelden geçtiğini ve internet bağlantısının kaybedildiğini düşünün; doğrudan akış yapıyorsanız, yuva kapanacak ve kullanıcı rahatsız olacaktır :-) Ancak, verileri yerel olarak arabelleğe alıyorsanız Bağlantıyı yeniden kurabilir ve bıraktığınız yerden sunucuya ses göndermeye devam edebilirsiniz ve umarız ki kullanıcı bağlantıda bir kopma olduğunu bile bilmez, çünkü sadece sihirli bir şekilde çalışır.

Bunu işe almak için, kaydı yerel bir arabelleğe yazmanız ve bu arabelle ilgili yeni veriler için ayrı bir iş parçacığına sahip olmanız ve sunucuya en kısa zamanda göndermeniz gerekir.

+2

bazı örnek nokta? – Giuseppe