package com.yuanxuzhen.androidmedia.video;
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageFormat;
import android.graphics.Rect;
import android.graphics.YuvImage;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
import android.hardware.camera2.TotalCaptureResult;
import android.hardware.camera2.params.OutputConfiguration;
import android.hardware.camera2.params.SessionConfiguration;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.media.Image;
import android.media.ImageReader;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;
import android.util.Size;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.yuanxuzhen.androidmedia.DirUtil;
import com.yuanxuzhen.androidmedia.databinding.ActivityCameraLayoutBinding;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.RuntimePermissions;
@RuntimePermissions
public class CameraActivity extends AppCompatActivity {
ActivityCameraLayoutBinding binding;
ExecutorService mExecutorService;
CameraManager cameraManager;
CameraDevice mCamera;
private String frontCameraId = "";
private String backCameraId = "";
CameraCaptureSession mCameraPreviewCaptureSession;
CameraCaptureSession mCameraRecordCaptureSession;
ImageReader mImageReader;
HandlerThread subHandlerThread;
Handler subHandler;
HandlerThread sub1HandlerThread;
Handler sub1Handler;
int width, height;
private String savePicPath = null;
private String yuvPath = null;
private FileOutputStream mFileOutputStream = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
savePicPath = DirUtil.getCacheDir() + File.separator + "save";
yuvPath = savePicPath + File.separator + "123.yuv";
cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
mExecutorService = Executors.newCachedThreadPool();
binding = ActivityCameraLayoutBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
subHandlerThread = new HandlerThread("sub");
subHandlerThread.start();
subHandler = new Handler(subHandlerThread.getLooper());
sub1HandlerThread = new HandlerThread("sub1");
sub1HandlerThread.start();
sub1Handler = new Handler(sub1HandlerThread.getLooper());
binding.startRecord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
record();
}
});
binding.stopRecord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if(mFileOutputStream != null){
mFileOutputStream.close();
mFileOutputStream = null;
}
} catch (IOException e) {
e.printStackTrace();
}
preview();
}
});
binding.surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(@NonNull SurfaceHolder holder) {
CameraActivityPermissionsDispatcher.startCameraWithPermissionCheck(CameraActivity.this);
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
}
});
}
@NeedsPermission({Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA})
public void startCamera() {
Log.e("CameraActivity", "startCamera");
mExecutorService.execute(new Runnable() {
@Override
public void run() {
try {
if (ActivityCompat.checkSelfPermission(CameraActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
String[] cameraIdArray = cameraManager.getCameraIdList();
for (String ele : cameraIdArray) {
CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(ele);
if (cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT) {
frontCameraId = ele;
} else if (cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK) {
backCameraId = ele;
}
}
calculateCameraParameters();
cameraManager.openCamera(backCameraId,
mExecutorService,
new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
Log.e("CameraActivity", "onOpened");
mCamera = camera;
preview();
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
Log.e("CameraActivity", "onDisconnected");
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
Log.e("CameraActivity", "onError");
}
}
);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public void stopCamera() {
Log.e("Camer
没有合适的资源?快使用搜索试试~ 我知道了~
Android相机数据回掉
共89个文件
java:41个
xml:25个
png:10个
0 下载量 116 浏览量
2024-05-07
09:17:08
上传
评论
收藏 209KB ZIP 举报
温馨提示
Android相机数据回掉
资源推荐
资源详情
资源评论
收起资源包目录
android-media-master.zip (89个子文件)
android-media-master
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 230B
app
src
androidTest
java
com
yuanxuzhen
androidmedia
ExampleInstrumentedTest.java 768B
test
java
com
yuanxuzhen
androidmedia
ExampleUnitTest.java 388B
main
java
com
yuanxuzhen
androidmedia
CommItemDecoration.java 3KB
IHanlderCallback.java 150B
decode
DecodeActivity.java 3KB
AacDecoder.java 7KB
YuvDecoder.java 10KB
record
RecordActivity.java 22KB
RecordActivityV1.java 17KB
ThreadUtils.java 3KB
encode
AacEncoder.java 8KB
YuvEncoder.java 6KB
EncodeActivity.java 5KB
demux
MediaUtil.java 6KB
ExecutorAudio.java 6KB
AudioMediaInfo.java 718B
VideoMediaInfo.java 1KB
DemuxActivity.java 2KB
handler
YuanThread.java 200B
DirUtil.java 1KB
mediaplayer
MediaPlayerActivity.java 6KB
audio
WavPlayer.java 7KB
AudioActivity.java 6KB
AudioTrackManager.java 4KB
ITimerListener.java 96B
DemoPermissionActivity.java 2KB
AndroidMediaApplication.java 639B
DensityUtil.java 816B
opengl
MyGlRender.java 1KB
BufferUtil.java 1KB
ImagePrint.java 74B
OpenGLActivity.java 2KB
Triangle.java 4KB
TriangleRender.java 4KB
BackgroundRender.java 940B
YuvRender.java 476B
MainActivity.java 5KB
YuanTimerTask.java 534B
video
CameraActivity.java 26KB
CompareSizesByArea.java 314B
ItemMainData.java 411B
res
mipmap-xxhdpi
ic_launcher_round.png 12KB
ic_launcher.png 8KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 4KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
values-night
themes.xml 834B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 3KB
mipmap-xxxhdpi
ic_launcher_round.png 16KB
ic_launcher.png 10KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 5KB
values
colors.xml 378B
strings.xml 74B
themes.xml 834B
layout
activity_medio_recorder_camera2.xml 1KB
activity_open_g_l.xml 1018B
activity_decode.xml 1KB
activity_encode.xml 2KB
activity_main.xml 974B
activity_demux.xml 1KB
activity_media_player.xml 3KB
activity_camera_layout.xml 1KB
item_main.xml 586B
activity_audio.xml 3KB
activity_record.xml 1KB
drawable
ic_launcher_background.xml 5KB
aidl
com
yuanxuzhen
testandroid
Yuan.aidl 405B
AndroidManifest.xml 2KB
proguard-rules.pro 750B
build.gradle 1KB
.gitignore 6B
gradlew.bat 2KB
build.gradle 868B
.idea
jarRepositories.xml 2KB
vcs.xml 180B
misc.xml 372B
compiler.xml 170B
gradle.xml 859B
.gitignore 47B
settings.gradle 48B
gradlew 5KB
.gitignore 225B
共 89 条
- 1
资源评论
fwjzm
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功