Added a second Recorder based on CameraX. Not working yet
This commit is contained in:
parent
675d4423e4
commit
d37766ffaf
@ -10,7 +10,6 @@ import androidx.camera.core.ExperimentalGetImage;
|
||||
import android.Manifest;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.view.SurfaceView;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
@ -19,8 +18,7 @@ import android.widget.ToggleButton;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Array;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Arrays;
|
||||
|
||||
@ExperimentalGetImage
|
||||
@ -37,13 +35,14 @@ public class MainActivity extends AppCompatActivity {
|
||||
TextView textView = findViewById(R.id.textView);
|
||||
SurfaceView surfaceView = findViewById(R.id.surfaceView);
|
||||
VideoView videoView = findViewById(R.id.videoView);
|
||||
PreviewView previewView = findViewById(R.id.previewView);
|
||||
|
||||
File directory = getFilesDir();
|
||||
|
||||
|
||||
Recorder recorder = new Recorder(this);
|
||||
recorder.setSurfaceView(surfaceView);
|
||||
|
||||
RecorderX recorderX = new RecorderX(this);
|
||||
//recorderX.setPreviewView(previewView);
|
||||
|
||||
ToggleButton toggleButton = findViewById(R.id.previewButton);
|
||||
toggleButton.setOnClickListener(new View.OnClickListener() {
|
||||
@ -53,23 +52,16 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
if (isRecordVideoAllowed() && toggleButton.isChecked())
|
||||
{
|
||||
//textView.setText(file.getAbsolutePath());
|
||||
recorder.startRecording();
|
||||
|
||||
File file = new File(directory, "file.txt");
|
||||
|
||||
try {
|
||||
file.createNewFile();
|
||||
} catch (IOException e) {
|
||||
recorderX.startRecording();
|
||||
} catch (URISyntaxException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
recorderX.stopRecording();
|
||||
File[] files = directory.listFiles();
|
||||
//textView.setText(Arrays.toString(files));
|
||||
recorder.stopRecording();
|
||||
recorder.playVideo(videoView);
|
||||
textView.setText(Arrays.toString(files));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
152
app/src/main/java/com/example/ueberwachungssystem/RecorderX.java
Normal file
152
app/src/main/java/com/example/ueberwachungssystem/RecorderX.java
Normal file
@ -0,0 +1,152 @@
|
||||
package com.example.ueberwachungssystem;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.provider.MediaStore;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import androidx.camera.core.Camera;
|
||||
import androidx.camera.core.CameraSelector;
|
||||
import androidx.camera.core.Preview;
|
||||
import androidx.camera.lifecycle.ProcessCameraProvider;
|
||||
import androidx.camera.video.FallbackStrategy;
|
||||
import androidx.camera.video.MediaStoreOutputOptions;
|
||||
import androidx.camera.video.Quality;
|
||||
import androidx.camera.video.QualitySelector;
|
||||
import androidx.camera.video.Recorder;
|
||||
import androidx.camera.video.Recording;
|
||||
import androidx.camera.video.VideoCapture;
|
||||
import androidx.camera.video.VideoRecordEvent;
|
||||
import androidx.camera.view.PreviewView;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.util.Consumer;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class RecorderX {
|
||||
|
||||
private final Context context;
|
||||
private PreviewView previewView = null;
|
||||
private ProcessCameraProvider cameraProvider;
|
||||
|
||||
private Recording recording = null;
|
||||
|
||||
public RecorderX(Context context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("MissingPermission")
|
||||
public void startRecording() throws URISyntaxException {
|
||||
|
||||
final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(context);
|
||||
try {
|
||||
cameraProvider = cameraProviderFuture.get();
|
||||
} catch (ExecutionException | InterruptedException ignored) {
|
||||
}
|
||||
|
||||
|
||||
QualitySelector qualitySelector = QualitySelector
|
||||
.from(Quality.HD, FallbackStrategy.higherQualityOrLowerThan(Quality.SD));
|
||||
|
||||
|
||||
Recorder.Builder recorderBuilder = new Recorder.Builder();
|
||||
recorderBuilder.setQualitySelector(qualitySelector);
|
||||
Recorder recorder = recorderBuilder.build();
|
||||
|
||||
VideoCapture<Recorder> videoCapture = VideoCapture.withOutput(recorder);
|
||||
|
||||
|
||||
// Create Preview
|
||||
Preview preview = new Preview.Builder().build();
|
||||
// Specify which Camera to use
|
||||
CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
|
||||
// Update PreviewView if set
|
||||
if (previewView != null)
|
||||
preview.setSurfaceProvider(previewView.getSurfaceProvider());
|
||||
|
||||
try {
|
||||
Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner) context, cameraSelector, videoCapture, preview);
|
||||
} catch (Exception e) {
|
||||
Log.e("Error", "Use case binding failed", e);
|
||||
}
|
||||
|
||||
String name = "recording.mp4";
|
||||
Uri filesDirURI = Uri.fromFile(context.getFilesDir());
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(MediaStore.Video.Media.DISPLAY_NAME, name);
|
||||
|
||||
MediaStoreOutputOptions mediaStoreOutput = new MediaStoreOutputOptions
|
||||
.Builder(context.getContentResolver(), filesDirURI)
|
||||
.setContentValues(contentValues)
|
||||
.build();
|
||||
|
||||
|
||||
Consumer<VideoRecordEvent> recordingListener = new Consumer<VideoRecordEvent>() {
|
||||
@Override
|
||||
public void accept(VideoRecordEvent videoRecordEvent) {
|
||||
if (videoRecordEvent instanceof VideoRecordEvent.Start) {
|
||||
Toast.makeText(context, "Carture started", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
else if (videoRecordEvent instanceof VideoRecordEvent.Finalize) {
|
||||
VideoRecordEvent.Finalize finalize = (VideoRecordEvent.Finalize) videoRecordEvent;
|
||||
|
||||
if (!finalize.hasError()) {
|
||||
Toast.makeText(context, "Carture succeeded", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
else {
|
||||
recording.close();
|
||||
recording = null;
|
||||
Toast.makeText(context, "Carture failed", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
recording = videoCapture.getOutput()
|
||||
.prepareRecording(context, mediaStoreOutput)
|
||||
.withAudioEnabled()
|
||||
.start(ContextCompat.getMainExecutor(context), recordingListener);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void stopRecording() {
|
||||
recording.stop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Set PreviewView to show Image */
|
||||
public void setPreviewView(PreviewView previewView) {
|
||||
this.previewView = previewView;
|
||||
}
|
||||
|
||||
private void playAudio() {
|
||||
MediaPlayer mp = new MediaPlayer();
|
||||
try {
|
||||
mp.setDataSource(context.getFilesDir() + "/audio.gpp");
|
||||
mp.prepare();
|
||||
mp.start();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void playVideo(VideoView videoView) {
|
||||
videoView.setVideoPath(context.getFilesDir() + "/video.mp4");
|
||||
videoView.start();
|
||||
}
|
||||
}
|
@ -30,7 +30,12 @@
|
||||
<SurfaceView
|
||||
android:id="@+id/surfaceView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="400dp" />
|
||||
android:layout_height="200dp" />
|
||||
|
||||
<androidx.camera.view.PreviewView
|
||||
android:id="@+id/previewView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp" />
|
||||
|
||||
<VideoView
|
||||
android:id="@+id/videoView"
|
||||
|
Loading…
x
Reference in New Issue
Block a user