我正在試圖制定一個錄製音頻的例子,MediaRecorder
,錄製的數據通過Android上的UDP套接字(> = 4.0)傳遞。任何人有MediaRecorder使用ParcelFileDescriptor.fromDatagramSocket?
閱讀一篇文章: Broadcasting video with Android - without writing to local files, 我使用ParcelFileDescriptor.fromDatagramSocket
下面是一個簡單的僞代碼,我目前的工作:
//private DatagramSocket ds;
//private MediaRecorder mRecorder;
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromDatagramSocket(ds);
mRecorder = new MediaRecorder();
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(pfd.getFileDescriptor());
mRecorder.prepare();
mRecorder.start();
這裏只是一個簡單的DatagramSocket(UDP)偵聽器線程循環觀察DatagramSocket ds
//...
private DatagramSocket ds;
private int localPort = 39000;
private MediaRecorder mRecorder;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
ds = new DatagramSocket(localPort);
}
catch (SocketException e)
{
System.out.println(e);
}
class IOThread extends Thread
{
@Override
public void run()
{
byte []buf = new byte[1024];
DatagramPacket packet= new DatagramPacket(buf, buf.length);
while (true)
{
try
{
ds.receive(packet);
SocketAddress sockAddress = packet.getSocketAddress();
int len = packet.getLength();
String msg = new String(buf, 0, len);
System.out.println(msg + ":" + len + "byte receive by "+ sockAddress.toString());
}
catch (IOException e)
{
System.out.println(e);
}
}
}
}
IOThread io1 = new IOThread();
io1.start();
//..........
原則上,我期望通過MediaRecorder
記錄緩衝區通過UDP FileDescriptor,並以某種方式我可以管理套接字,但到目前爲止,我沒有觀察到任何事情發生。
我確認了UDP偵聽器單元與其他UDP輸入正常工作,並且MediaRecorder
單元應該沒問題,因爲它與localFiles而不是UDP socket FileDescriptor一起工作。
有什麼建議嗎?
在此先感謝!