Ich kämpfe mit diesem ruhigen lange und ich entschied, dass ich Hilfe brauche. Die Grundidee ist hier beschrieben: LinkAndroid: Video-Streaming mit Mediarecorder über Sockets mit ParcelFileDescriptor
Ich möchte die Ausgabe von der MediaRecorder direkt auf meinem Server über Sockets während der Aufnahme streamen. (In diesem speziellen Fall möchte ich sehen, ob dies ohne Verwendung eines Streaming-Protokolls nur über einen HTTP-POST möglich ist.)
Der Fehler meines aktuellen Ansatzes ist: E/MediaRecorder: Start fehlgeschlagen: -2147483648 - RuntimeException
Bevor ich hatte einen Fehler zu diesem Thema zeigt mir mediarecorder-issue-on-lollipop
ich eine AsyncTask Klasse verwenden, um meine record() aufrufen Funktion:
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();
}
}
Sorry für t er hat einen schlechten Programmierstil.
Ich habe versucht, das OutputFormat und VideoEncoder nach anderen Lösungen zu dem Thema zu ändern. Aber ich bin mir immer noch nicht sicher, ob ich in die richtige Richtung gehe.
Auch nachdem ich diesen Fehler entdeckt habe, denke ich, dass ich den Stream irgendwie auslesen und an den Server in seinem eigenen Thread senden muss.
Jeder Hinweis könnte helfen.