我正在爲這段安靜的時間而苦苦掙扎,我決定需要幫助。 這裏描述的基本思路:LinkAndroid:使用ParcelFileDescriptor通過套接字與Mediarecorder進行視頻流式傳輸
我想在錄製時將MediaRecorder的輸出直接流式傳輸到我的服務器套接字上。 (在這個特定的情況下,我想看看這是不可能的,只需通過HTTP-POST使用任何流協議。)
我目前的方法的錯誤是:E/MediaRecorder:啓動失敗:-2147483648 - RuntimeException
之前,我曾指點我到這個話題mediarecorder-issue-on-lollipop
我使用的AsyncTask類叫我recordData()函數的錯誤:
new sendAsync().execute("test");
private void recordData(Socket socket){
try{
OutputStream out = socket.getOutputStream();
InputStream is = null;
ParcelFileDescriptor[] parcelFileDescriptors = ParcelFileDescriptor.createPipe();
parcelRead = new ParcelFileDescriptor(parcelFileDescriptors[0]);
parcelWrite = new ParcelFileDescriptor(parcelFileDescriptors[1]);
try{
is = new ParcelFileDescriptor.AutoCloseInputStream(parcelRead);
} catch (Exception e){
e.printStackTrace();
}
//pfd = ParcelFileDescriptor.fromSocket(socket);
sft = new SurfaceTexture(0);
sf = new Surface(sft);
if(recorder == null) {
recorder = new MediaRecorder();
recorder.reset();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
recorder.setVideoFrameRate(30);
recorder.setPreviewDisplay(sf);
recorder.setOutputFile(parcelWrite.getFileDescriptor());
recorder.setMaxDuration(10000); // 10 seconds
try {
recorder.prepare();
recorder.start();
System.out.println("This is Recorder running");
} catch (IOException e) {
e.printStackTrace();
}
byte[] buffer = new byte[16384];
int byteread = 0;
while ((byteread = is.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, byteread);
}
out.flush();
}else{
stopRecording();
}
} catch (Exception e) {
e.printStackTrace();
}
}
對不起對於t他糟糕的編碼風格。
我試着改變OutputFormat和VideoEncoder下面找到的主題的其他解決方案。但是,我仍然不確定我是否正朝着正確的方向前進。
即使遇到這個錯誤,我想我需要讀出併發送到服務器在自己的線程的流。
每個提示都可以提供幫助。