Rk3288板子插2个摄像头,其中一个做监控用,需要录制视频,代码如下

public class Recorder {private String TAG = Recorder.class.getSimpleName();private static final int MEDIA_RECORDER_REQUEST = 0;private Camera mCamera;private TextureView mPreview;private MediaRecorder mMediaRecorder;private File mOutputFile;private boolean isRecording = false;int frontCamera = 1;private int previewWidth = 320;private int previewHeight = 240;int defaultVideoFrameRate = -1;private final String[] requiredPermissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.RECORD_AUDIO,Manifest.permission.CAMERA,};public Recorder(TextureView mPreview) {this.mPreview = mPreview;}public void startCapture(String rid) {dLog.e(TAG, "开始录制视频rid=" + rid);if (isRecording) {// BEGIN_INCLUDE(stop_release_media_recorder)// stop recording and release cameratry {mMediaRecorder.stop();  // stop the recording} catch (RuntimeException e) {// RuntimeException is thrown when stop() is called immediately after start().// In this case the output file is not properly constructed ans should be deleted.Log.d(TAG, "RuntimeException: stop() is called immediately after start()");//noinspection ResultOfMethodCallIgnoredmOutputFile.delete();}releaseMediaRecorder(); // release the MediaRecorder objectmCamera.lock();         // take camera access back from MediaRecorder// inform the user that recording has stoppedisRecording = false;releaseCamera();// END_INCLUDE(stop_release_media_recorder)};new MediaPrepareTask(rid).execute(null, null, null);}public void stopCapture() {dLog.e(TAG, "结束录制视频");if (isRecording) {// BEGIN_INCLUDE(stop_release_media_recorder)// stop recording and release cameratry {mMediaRecorder.stop();  // stop the recording} catch (RuntimeException e) {// RuntimeException is thrown when stop() is called immediately after start().// In this case the output file is not properly constructed ans should be deleted.Log.e(TAG, "RuntimeException: stop() is called immediately after start()");//noinspection ResultOfMethodCallIgnoredmOutputFile.delete();}releaseMediaRecorder(); // release the MediaRecorder objectmCamera.lock();         // take camera access back from MediaRecorder// inform the user that recording has stoppedisRecording = false;releaseCamera();// END_INCLUDE(stop_release_media_recorder)new Thread(new Runnable() {@Overridepublic void run() {clearFile();}}).start();}}private void clearFile() {Long dirLgngth = FileUtils.getDirLength(UploadVideoUtils.FolderPath);if (dirLgngth / 1048576 > 20) {deleteAnyVideo(FileUtils.getFileByPath(UploadVideoUtils.FolderPath));}}public static long deleteAnyVideo(final File dir) {if (!FileUtils.isDir(dir)) return -1;long len = 0;File[] files = dir.listFiles();if (files != null && files.length != 0) {for (int i = 0; i < files.length / 3; i++) {FileUtils.delete(files[i]);}}return len;}protected void onPause() {// if we are using MediaRecorder, release it firstreleaseMediaRecorder();// release the camera immediately on pause eventreleaseCamera();}private void releaseMediaRecorder() {if (mMediaRecorder != null) {// clear recorder configurationmMediaRecorder.reset();// release the recorder objectmMediaRecorder.release();mMediaRecorder = null;// Lock camera for later use i.e taking it back from MediaRecorder.// MediaRecorder doesn't need it anymore and we will release it if the activity pauses.mCamera.lock();}}private void releaseCamera() {if (mCamera != null) {mCamera.release();mCamera = null;}}@SuppressLint("NewApi")private boolean initCamera() {try {if (frontCamera == 0) {mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);} else {mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);}Camera.Parameters camParams = mCamera.getParameters();mCamera.lock();try {mCamera.setPreviewTexture(mPreview.getSurfaceTexture());//注意处,如果没有设置preview,录像会报错.坑1} catch (IOException e) {e.printStackTrace();dLog.e(TAG, e.getMessage());}mCamera.setDisplayOrientation(90);} catch (RuntimeException ex) {dLog.e(TAG, ex.getMessage());return false;}return true;}void initCameraParameter(){boolean hasSupportRate = false;Camera.Parameters parameters = mCamera.getParameters();List<Integer> supportedPreviewFrameRates = parameters.getSupportedPreviewFrameRates();if (supportedPreviewFrameRates != null&& supportedPreviewFrameRates.size() > 0) {Collections.sort(supportedPreviewFrameRates);for (int i = 0; i < supportedPreviewFrameRates.size(); i++) {int supportRate = supportedPreviewFrameRates.get(i);if (supportRate == 15) {hasSupportRate = true;}}if (hasSupportRate) {defaultVideoFrameRate = 15;} else {defaultVideoFrameRate = supportedPreviewFrameRates.get(0);}}// 获取摄像头的所有支持的分辨率List<Camera.Size> resolutionList = parameters.getSupportedVideoSizes();if (resolutionList != null && resolutionList.size() > 0) {
//            Collections.sort(resolutionList, new Utils.ResolutionComparator());Camera.Size previewSize = null;boolean hasSize = false;// 如果摄像头支持640*480,那么强制设为640*480for (int i = 0; i < resolutionList.size(); i++) {Camera.Size size = resolutionList.get(i);if (size != null && size.width == 320 && size.height == 240) {previewSize = size;previewWidth = previewSize.width;previewHeight = previewSize.height;hasSize = true;break;}}// 如果不支持设为中间的那个if (!hasSize) {int mediumResolution = resolutionList.size() / 2;if (mediumResolution >= resolutionList.size())mediumResolution = resolutionList.size() - 1;previewSize = resolutionList.get(mediumResolution);previewWidth = previewSize.width;previewHeight = previewSize.height;}}}private boolean prepareVideoRecorder(String rid) {try {initCamera();initCameraParameter();mMediaRecorder = new MediaRecorder();mCamera.unlock();mMediaRecorder.setCamera(mCamera);// 设置录制视频源为Camera(相机)mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);if (frontCamera == 1) {mMediaRecorder.setOrientationHint(270);} else {mMediaRecorder.setOrientationHint(90);}// 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);// 设置录制的视频编码h263 h264mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错mMediaRecorder.setVideoSize(previewWidth, previewHeight);// 设置视频的比特率mMediaRecorder.setVideoEncodingBitRate(384 * 1024);// // 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错if (defaultVideoFrameRate != -1) {//mMediaRecorder.setVideoFrameRate(defaultVideoFrameRate);}mOutputFile = CameraHelper.getOutputMediaFile(CameraHelper.MEDIA_TYPE_VIDEO, rid);dLog.e(TAG, "录制视频地址=" + mOutputFile.getAbsolutePath());if (mOutputFile == null) {return false;}mMediaRecorder.setOutputFile(mOutputFile.getPath());mMediaRecorder.setMaxFileSize(1024 * 1024 * 200);try {mMediaRecorder.prepare();} catch (IllegalStateException e) {dLog.e(TAG, "IllegalStateException preparing MediaRecorder: ${e.message}");releaseMediaRecorder();return false;} catch (IOException e) {releaseMediaRecorder();return false;}return true;} catch (Exception e) {Log.e("recorderError", e.getMessage());releaseMediaRecorder();return false;}}class MediaPrepareTask extends AsyncTask<Void, Void, Boolean> {private String rid;public MediaPrepareTask(String rid) {this.rid = rid;}@Overrideprotected Boolean doInBackground(Void... Void) {// initialize video cameraif (prepareVideoRecorder(rid)) {// Camera is available and unlocked, MediaRecorder is prepared,// now you can start recordingtry {mMediaRecorder.start();isRecording = true;} catch (IllegalStateException e) {isRecording = false;releaseMediaRecorder();Log.e(TAG, "mMediaRecorder start Error" + e.getMessage());return false;} catch (Exception e) {isRecording = false;releaseMediaRecorder();Log.e(TAG, "mMediaRecorder start Error" + e.getMessage());}} else {// prepare didn't work, release the camerareleaseMediaRecorder();return false;}return true;}@Overrideprotected void onPostExecute(Boolean result) {if (!result) {
//                Recorder.this.finish();}}}}

Rk3288 android USB双摄像头录制视频相关推荐

  1. 全景视频拼接(二):双摄像头获取视频

    项目要求:利用双摄像头同时采集两个视频,离线拼接,将两个视频拼接成一个视频. 该部分代码实现功能: 利用双摄像头获取视频 #include <iostream> #include < ...

  2. Android OpenGL添加水印并录制视频--抖音视频录制原理

    Android OpenGL添加水印并录制视频–抖音视频录制原理 简单的视频录制,我们可以使用MediaRecorder,具体示例可以参考Gitee: Camera2VideoJava 本文将介绍采集 ...

  3. android开发,静音录制视频,在一般清晰度的前提下保证文件大小越小越好

    public void startRecord() {mediarecorder = new MediaRecorder();// 创建mediarecorder对象mCamera = getCame ...

  4. android边直播边录制视频软件,实现Android本机 视频录制播放 边录边放

    [实例简介]实现Android本机 视频录制播放 边录边放 [实例截图] [核心代码] package yzriver.avc.avccodec; import android.app.Activit ...

  5. Android 如何通过 Mac 录制视频

    步骤: 首先确保你的 Android 系统版本大于 4.2 否则请看咔咔截屏录屏大师如何录制手机视频 1.在 Android 手机上下载安装 Mobizen App 下载地址:http://downl ...

  6. Android 如何通过 Windows 录制视频

    步骤: 首先确保你的 Android 系统版本大于 4.2 否则请看咔咔截屏录屏大师如何录制手机视频 1.在 Android 手机上下载安装 Mobizen App 下载地址:http://downl ...

  7. android 边录制视频边写软字幕

    目前,对于边录制视频,边要显示时间戳的需求,都是通过用对应字符的bitmap图片的yuv数据,来替换每一帧yuv数据的像素点来实现的.这样做的坏处显而易见,这个时间戳数据,是硬生生的印在每一帧数据上的 ...

  8. 3d摄像头android手机多少钱,双摄像头2.0、3D动态全景拍照: 荣耀V8 手机 发布

    双摄像头2.0.3D动态全景拍照: 荣耀V8 手机 发布2299元起 2016-05-11 08:25:29 192点赞 54收藏 457评论 直达链接 华为近两年一直在推双平行摄像头技术,也确实让这 ...

  9. android 美颜录像,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频

    前言 上次我写了一遍文章<Android 关于美颜/滤镜 从OpenGl录制视频的一种方案>,里面利用ImageReader来从获取Surface上获取数据,但是经过@熊皮皮的提醒,我发现 ...

  10. android拍照截图组件,Android截图命令screencap与视频录制命令screenrecord(示例代码)...

    查看帮助命令[email protected] ~$ adb shell screencap -v screencap: invalid option -- v usage: screencap [- ...

最新文章

  1. linux设置ulimit值永久生效
  2. 二值图像--形态学处理3 开操作和闭操作
  3. Html5中新增的表单元素详解
  4. Java 在指定目录中查找文件
  5. java容易掉发吗_容易被忽略的面试题—Java高并发
  6. 在测试中发现错误,不要着急去改,静下心来,想一想错误的关联性( 错误展开确认 )。
  7. Cortex-M0详解(2)--寄存器
  8. MySQL回滚日志(undo log)总结
  9. python如何识别图片中的文字_如何利用Python识别图片中的文字
  10. 互联网大数据与物联网大数据的区别 你有必要了解下
  11. 激活win10专业版
  12. 洛谷----P1036 [NOIP2002 普及组] 选数
  13. h3c无线管理 dns服务器,H3C FIT AP与AC连接时三种的注册流程
  14. linux彻底卸载nginx,linux彻底删除nginx
  15. MsCOCO数据集标注详解
  16. android 使用mediaplayer播放视频的时候设置请求头header
  17. uwp版的音乐播放器练手
  18. Python第三方库pygame学习笔记(一)
  19. linux命令 清空文件夹,linux清空文件夹命令问题
  20. win7internet信息服务器安装,Win7如何安装启用Internet信息服务(IIS)管理器

热门文章

  1. vue3 动态获取屏幕尺寸
  2. 群论中的拉格朗日定理(子群的阶必然能整除群阶)
  3. AltiumDesigner2020导入3D Body-SOLIDWORKS三维模型
  4. stata抓取html,stata reshape
  5. java gbk编码_Java GBK 中文乱码问题分析
  6. 华为云D-Plan解决方案为企业数智升级注入AI新动力
  7. 知我者谓我心忧,不知者谓我何求!
  8. 计算机开机配置失败6,win7开机配置windows update失败怎么跳过?-win7配置update失败,安全模式还是配置失败...
  9. Mysql工作原理——redo日志文件和恢复操作
  10. HLK 微软驱动签名过程中踩过的坑