Android如何实现调用手机摄像头录像限制录像时长
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,小编给大家分享一下Android如何实现调用手机摄像头录像限制录像时长,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下因为服务器空间有限,所以视频时长必须有所限制。在xml
千家信息网最后更新 2025年11月10日Android如何实现调用手机摄像头录像限制录像时长
小编给大家分享一下Android如何实现调用手机摄像头录像限制录像时长,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
具体内容如下
因为服务器空间有限,所以视频时长必须有所限制。
在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(){ @Override public 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() { @Override public 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.设置视频,音频的输出格式 mp4 mediaRecorder.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如何实现调用手机摄像头录像限制录像时长"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
录像
摄像头
摄像
时间
倒计时
视频
时长
限制
按钮
格式
支持
手机
分辨率
图像
布局
文件
时候
权限
篇文章
编码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技企业有什么区别
陆丰数据局数据库
页面接收不到数据库的值
数据库创建表含有name
上海软件开发工程师培训
网络安全示范活动总结
连接服务器后如何关闭无线网络
电脑服务器匹配卡
浙江聚维网络技术有限公司
国家网络安全网络传销
网络技术方面的技术创新
imp备份数据库
数据库dump什么意思
轻应用服务器ipv6
网络安全投标书的编写
数据库索引的应用
sql数据库共享锁
软件开发一般保密期限
有线网络安全问题有哪些
软件开发造成事故赔偿
深圳专业优定软件开发
滴滴升级网络安全
海讯网络技术有限公司运营
科技互联网是什么意思
计算机网络技术设计logo
网络安全预防知识发言
宁河区智能软件开发服务供应
网络安全法专题学习
要怎样打开数据库
网络安全作文五百字高中