2013-01-21 19 views
7

android.media.MediaRecorder'ı istiyorum. ses, dosyaya değil, aynı değişkene, örneğin char [] veya bayt [] veya başka bir datta tampon yapısına kaydedilmesidir. Wi-Fi üzerinden uzak sunucuya göndermek istiyorum, android.media.MediaRecorder bu işlevselliği sağlayabilir mi?Ses, Android'de dosyaya kaydedilmiyor

+0

mümkündür üzerine yazacak yazmak için veri var. MediaRecorder, bir Dosyaya mutlaka bir FileDescriptor yazıyor. Bunun "akış" olmadığını unutmayın! Sunucu tarafında bir dosyaya tekrar yazmanız gerekecek. Bu yardımcı olabilir: http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system – Fildor

+0

aslında sadece yazıyor bir dosya tanıtıcı oluşturabilirsiniz Bir dosya yerine bir iç arabelleğe, soketlere yazmak için yazdığınız soketlerin de bir dosya tanıtıcıya sahip olduğunu da unutmayın. Bu paketleri almak ve bunları uygun şekilde işlemek için doğru soket adresini dinledikçe bir dosya sunucusu tarafı yazmaya gerek yoktur. –

cevap

14

Burada neler yapabileceğiniz ParcelFileDescriptor sınıfını kullanmaktadır.

//make a pipe containing a read and a write parcelfd 
ParcelFileDescriptor[] fdPair = ParcelFileDescriptor.createPipe(); 

//get a handle to your read and write fd objects. 
ParcelFileDescriptor readFD = fdPair[0]; 
ParcelFileDescriptor writeFD = fdPair[1]; 

//next set your mediaRecorder instance to output to the write side of this pipe. 
mediaRecorder.setOutputFile(writeFD.getFileDescriptor()); 

//next create an input stream to read from the read side of the pipe. 
FileInputStream reader = new FileInputStream(readFD.getFileDescriptor()); 

//now to fill up a buffer with data, we just do a simple read 
byte[] buffer = new byte[4096];//or w/e buffer size you want 

//fill up your buffer with data from the stream 
reader.read(buffer);// may want to do this in a separate thread 

ve şimdi kaydedici üzerinden bir sokete doğrudan veri yazmak isteyebilirsiniz,

alternatif ses verilerinin bir tampon dolu var. Bu ParcelFileDescriptor sınıfı ile de elde edilebilir.

//create a socket connection to another device 
Socket socket = new Socket("123.123.123.123",65535);//or w/e socket address you are using 

//wrap the socket with a parcel so you can get at its underlying File descriptor 
ParcelFileDescriptor socketWrapper = ParcelFileDescriptor.fromSocket(socket); 

//set your mediaRecorder instance to write to this file descriptor 
mediaRecorder.setOutputFile(socketWrapper.getFileDescriptor()); 

şimdi istediğiniz zaman medya kaydedici otomatik soket

İlgili konular