因为服务器空间有限,所以视频时长必须有所限制。

在xml中先布局一个按钮,点击开始录频。布局一个TextView用于显示倒计时的时间。

一、使用Hander+TimerTask完成定时操作

private TextView btn_stop;
private int recLen = 11;
Timer timer = new Timer();
//时间倒计时放在开始按钮事件后,看标题7那里是时间倒计时开始的时候
//timer.schedule(task,1000,1000);
final Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg){switch (msg.what){case 1:btn_stop.setText(""+recLen);if(recLen<0){timer.cancel();btn_stop.setVisibility(View.GONE);}}}};TimerTask task = new TimerTask() {@Overridepublic void run() {recLen--;Message message = new Message();message.what = 1;handler.sendMessage(message);//当倒计时时间到1的时候关闭录像if (recLen == 1){customTimer.Stop();stopRecord();}}};

二、初始化摄像头

private void initCamera() {mCamera = Camera.open(0);  //①mCamera.setDisplayOrientation(90);try {mCamera.setPreviewDisplay(mSurfaceHolder);mCamera.cancelAutoFocus();//此句加上 可自动聚焦 必须加Camera.Parameters parameters = mCamera.getParameters();//查询摄像头支持的分辨率parameters.getSupportedPreviewSizes();for (int i = 0; i < parameters.getSupportedPreviewSizes().size(); i++) {Log.i("<><><><>Width", parameters.getSupportedPreviewSizes().get(i).width + "");Log.i("<><><><>Height", parameters.getSupportedPreviewSizes().get(i).height + "");}//设置分辨率parameters.setPreviewSize(1280, 720);//设置聚焦模式parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);//缩短Recording启动时间parameters.setRecordingHint(true);//是否支持影像稳定能力,支持则开启if (parameters.isVideoStabilizationSupported())parameters.setVideoStabilization(true);mCamera.setParameters(parameters);mCamera.startPreview();} catch (Exception e) {Log.i(TAG, "Error starting camera preview: " + e.getMessage());}}

三、创建视频文件

private boolean createRecordDir() {if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {Toast.makeText(this, "SD卡不存在!", Toast.LENGTH_SHORT).show();return false;}File sampleDir = new File("/sdcard/myVideo/");if (!sampleDir.exists()) {sampleDir.mkdirs();}videoName = "VID_" + DateUtils.getData(DateUtils.FORMAT_YYYYMMDDHHMMSS) + ".mp4";mVecordFile = new File(sampleDir, videoName);return true;}

四、配置MediaRecorder

private void setConfigRecord() {mediaRecorder = new MediaRecorder();mediaRecorder.reset();mediaRecorder.setCamera(mCamera);mediaRecorder.setOnErrorListener(onErrorListener);//录像角度mediaRecorder.setOrientationHint(90);//使用SurfaceView预览mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());//1.设置采集声音mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置采集图像mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//2.设置视频,音频的输出格式 mp4mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);//3.设置音频的编码格式mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);//设置图像的编码格式mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);CamcorderProfile mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);mediaRecorder.setAudioEncodingBitRate(44100);if (mProfile.videoBitRate > 2 * 1024 * 1024) {mediaRecorder.setVideoEncodingBitRate(2 * 1024 * 1024);} else {mediaRecorder.setVideoEncodingBitRate(1024 * 1024);}mediaRecorder.setVideoFrameRate(mProfile.videoFrameRate);mediaRecorder.setVideoSize(1280, 720);mediaRecorder.setOutputFile(mVecordFile.getAbsolutePath());}

五、停止录制

private void stopRecord() {try {if (isRecording && mediaRecorder != null) {mediaRecorder.setOnErrorListener(null);mediaRecorder.setPreviewDisplay(null);mediaRecorder.stop();mediaRecorder.reset();mediaRecorder.release();mediaRecorder = null;isRecording = false;Log.i(TAG, "" + mVecordFile.toString());//new imageTask().execute(mVecordFile);MessageData md = new MessageData();md.srdatatype = SRDataType.录像返回;md.Data = mVecordFile.getAbsolutePath();Intent intent = new Intent(BroadCastParameter.action);intent.putExtra("data", md);sendBroadcast(intent);// Fragment页面广播通知LocalBroadcastManager.getInstance(CustomRecorder.this).sendBroadcast(intent);finish();}}catch (Exception ex){//Toast.makeText(getApplicationContext(),ex.getMessage(),1).show();}}

六、关闭摄像头

 private void stopCamera() {if (mCamera != null) {mCamera.setPreviewCallback(null);mCamera.stopPreview();mCamera.release();mCamera = null;}}

七、点击开始录像按钮

public void onViewClicked(View view) {if (Build.VERSION.SDK_INT >= 23) {int REQUEST_CODE_CONTACT = 101;//验证是否许可权限for (String str : permissions) {if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {Toast.makeText(getApplicationContext(),"存储权限未授权",1).show();return;}}}switch (view.getId()) {//开始case R.id.btn_start:btn_start.setVisibility(View.GONE);btn_stop.setVisibility(View.VISIBLE);//这是是判断视频文件有没有创建,如果没有就返回boolean creakOk = createRecordDir();if (!creakOk) {return;}try {mCamera.unlock();setConfigRecord();mediaRecorder.prepare();mediaRecorder.start();} catch (Exception e) {//Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();}StartTime = new Date(System.currentTimeMillis());isRecording = true;customTimer.ReStart();timer.schedule(task,1000,1000);break;

Android实现调用手机摄像头录像限制录像时长相关推荐

  1. Android实现调用手机摄像头进行拍照并存储为文件

    目录 声明权限 拍照按钮触发事件` 后记 参考文章: 声明权限 首先应该在"AndroidManifest"文件中声明手机内存读写权限: <uses-permission a ...

  2. (亲测可用)html5 file调用手机摄像头

    在切图网一个客户的webapp项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api  然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 in ...

  3. html调起苹果手机摄像头_html5 file调用手机摄像头

    在切图网一个客户的webapp项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api  然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 in ...

  4. 使用HTML5+调用手机摄像头和相册

    前言: 前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...

  5. 原生html调手机拍照,如何让HTML5调用手机摄像头拍照——实践就是一切

    原文:如何让HTML5调用手机摄像头拍照--实践就是一切 NanShan 小编将思路提供给了大家,学编程最重要的是实践,我这虽然有完善的代码,但是希望大家都可以自己写出属于自己的代码 HTML5 Th ...

  6. html调起苹果手机摄像头_使用HTML5+调用手机摄像头和相册

    前言: 前端时间使用HTML5作了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了很多时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...

  7. 关于采用浏览器调用手机摄像头问题

    之前一直做后台开发,最近项目客户想要采用android平板扫描物品条码,所以开始在网上看了众多关于采用浏览器调用摄像头的问题,让我十分疑惑的是,为什么很多解决案例并没有讲到移动端浏览器的支持问题,以致 ...

  8. html调起苹果手机摄像头_HTML5如何调用手机摄像头拍照实现方法介绍

    HTML5如何调用安卓手机摄像头拍照实现方法介绍.HTML5 The Media Capture API提供了对摄像头的可编程访问,可以直接用getUserMedia获得摄像头提供的视频流.其实实际上 ...

  9. 【计算机视觉 · OpenCV】使用 OpenCV 调用手机摄像头

    一.前言 Droidcam 是一款可以将手机变成网络摄像头的工具,我们可以利用 Droidcam 让 OpenCV 拥有调用手机摄像头的能力. 二.步骤 2.1 安装 DroidCam 在手机和电脑上 ...

最新文章

  1. Python 基础 一
  2. SAP Spartacus里unit list tree节点expanded属性的赋值逻辑
  3. OpenCV_01 简介+无版权安装+模块分析
  4. django之分页、cookie装饰器
  5. conda 环境迁移
  6. Linux下常用组的权限特点,Linux中的用户与用户组
  7. 软件测试-常见数据库笔试题
  8. 浅谈怎样入侵服务器,仅供学习用
  9. 百度网盘提取码_利用审查元素自定义百度网盘提取码教程 无需工具
  10. 2019配电安规电子版_2018年配电安规.docx
  11. 声效表达在游戏沉浸方面的影响力
  12. 关于abd.exe 报错的解决方法总结
  13. window10 彻底关闭自动更新
  14. 深度学习英文文献_深度学习中英文电子版(直领)
  15. 《手把手教你学51单片机》之十三------1602液晶与串口的应用实例
  16. 聊一聊 InnoDB 引擎中的索引类型
  17. 请问如何判断一段文本中是否含有词典中的词语,并且把它们统计出来呀,有无大神赐教呀!!!
  18. TIOBE 6 月编程语言排行榜:C++ 即将超越 Java
  19. 天干地支计算公式_求天干地支的计算方法,
  20. unc0ver更新适用于iOS14的越狱工具

热门文章

  1. 右键菜单的新建菜单中添加EXCEL
  2. 3Ds Max Design2009与PhotoshopCS4建筑设计经典案例指导视频教程
  3. 《笨法Pythn(第3版)》简介及PDF电子格式
  4. SerializationException: Could not read JSON: Unrecognized token “xxx“
  5. JSON对象转成formData对象,formData对象转成JSON对象
  6. Oracle SQL 调优健康检查脚本
  7. python turtle color_Python turtle.color方法代碼示例
  8. 156-161.网络安全渗透测试—[Cobalt Strike系列]—[内网渗透之Windos域环境的搭建]
  9. 国产投影仪什么牌子好?当贝投影仪怎么样
  10. 【python数据分析实战】电商打折套路解析(1)—— 各个品牌都有多少商品参加了双十一活动?