Android 使用 CameraX 快速实现仿微信短视频录制 屏蔽按压两次电源键 相机Camera和Image sensor技术基础笔记HDR Camera2

Android 使用 CameraX 快速实现仿微信短视频录制(轻触拍照、长按录像)
https://github.com/ldlywt/MyCameraX

微信短视频android端
https://github.com/jiangqianghua/WXVideos-androidclient


Android平台Camera开发实践指南
https://blog.csdn.net/wudouxingjun/article/details/126298052

Android CameraX适配Android13的踩坑之路
https://blog.csdn.net/c6E5UlI1N/article/details/132419145

android8.0以上新增Camera(七)
https://download.csdn.net/blog/column/10134276/107582934
 

android 7.1 屏蔽按压两次电源键(KEYCODE_POWER)打开相机
https://blog.csdn.net/ansondroider/article/details/109713965


是的,这个看起来是ESD的误触发。现在平时系统不会进入休眠了吧,我们代码里面在几个界面下是禁止休眠了 是干扰电信号触发的

Android - 在后台杀死相机进程
https://www.coder.work/article/3709988  

LockCamera
https://github.com/barneyElDinosaurio/LockCamera

Camera和Image sensor技术基础笔记(5) -- HDR相关技术_dol和dcg-CSDN博客

Android Camera2 之 CameraCharacteristics 详解
https://blog.csdn.net/afei__/article/details/85960343

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用CameraX和GLSurfaceView实现录制视频的代码示例: 1. 添加依赖项 在build.gradle文件中添加以下依赖项: ```gradle implementation "androidx.camera:camera-core:1.0.0-beta07" implementation "androidx.camera:camera-camera2:1.0.0-beta07" implementation "androidx.camera:camera-lifecycle:1.0.0-beta07" ``` 2. 创建GLSurfaceView 在布局文件中添加GLSurfaceView: ```xml <android.opengl.GLSurfaceView android:id="@+id/glsurfaceview" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 在代码中获取GLSurfaceView实例: ```java GLSurfaceView glSurfaceView = findViewById(R.id.glsurfaceview); ``` 3. 创建CameraX实例 在代码中创建CameraX实例: ```java private void startCamera() { ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this); cameraProviderFuture.addListener(() -> { try { ProcessCameraProvider cameraProvider = cameraProviderFuture.get(); bindPreview(cameraProvider); } catch (ExecutionException | InterruptedException e) { e.printStackTrace(); } }, ContextCompat.getMainExecutor(this)); } private void bindPreview(ProcessCameraProvider cameraProvider) { Preview preview = new Preview.Builder().build(); CameraSelector cameraSelector = new CameraSelector.Builder() .requireLensFacing(CameraSelector.LENS_FACING_BACK) .build(); preview.setSurfaceProvider(glSurfaceView.getSurfaceProvider()); cameraProvider.unbindAll(); cameraProvider.bindToLifecycle(this, cameraSelector, preview); } ``` 4. 创建MediaRecorder实例 在代码中创建MediaRecorder实例: ```java private void prepareMediaRecorder() { mediaRecorder = new MediaRecorder(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mediaRecorder.setOutputFile(getOutputFile().getAbsoluteFile()); } else { mediaRecorder.setOutputFile(getOutputFile().getAbsolutePath()); } mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mediaRecorder.setVideoEncodingBitRate(10000000); mediaRecorder.setVideoFrameRate(30); mediaRecorder.setVideoSize(1920, 1080); try { mediaRecorder.prepare(); } catch (IOException e) { e.printStackTrace(); } } ``` 5. 开始录制 在GLSurfaceView.Renderer的onDrawFrame()方法中开始录制: ```java @Override public void onDrawFrame(GL10 gl) { GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); if (isRecording) { GLES20.glViewport(0, 0, width, height); GLES20.glUseProgram(programId); // 绘制 ... // 录制 if (mediaRecorder != null) { Surface surface = mediaRecorder.getSurface(); surfaceTexture.updateTexImage(); surfaceTexture.getTransformMatrix(transformMatrix); GLES20.glUniformMatrix4fv(uMatrixLocation, 1, false, transformMatrix, 0); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureId); GLES20.glUniform1i(uTextureUnitLocation, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBuffer[0]); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureId, 0); GLES20.glViewport(0, 0, 1920, 1080); GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); mediaRecorder.start(); } } // 刷新 glSurfaceView.requestRender(); } ``` 6. 停止录制 在代码中停止录制: ```java private void stopRecording() { mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; } private void stopCamera() { CameraX.unbindAll(); } ``` 以上就是使用CameraX和GLSurfaceView实现录制视频的代码示例。需要注意的是,在录制视频时,需要使用MediaRecorder的setVideoSource()方法将其设置为MediaRecorder.VideoSource.SURFACE,并将Surface传递给MediaRecorder,以便将OpenGL ES渲染的图像捕捉到视频中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值