Android如何实现调用手机摄像头录像限制录像时长
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下Android如何实现调用手机摄像头录像限制录像时长,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下因为服务器空间有限,所以视频时长必须有所限制。在xml
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
瑰夏咖啡
北京路客互联网科技有限公司
新华互联网科技学校
互联网科技行业发展
互联网科技深圳
科技与互联网发展
广州凡科互联网科技
苏州大垚互联网科技
科技互联网创业计划书
卓越科技互联网 招聘
互联网金融科技公司干啥的
湖南诚度互联网科技有限公司
广西互联网科技孵化中心
互联网金融科技展
江苏苏星互联网科技有限公司
深圳无忧互联网科技
浙南科技城互联网大厦招聘
科技和互联网行业的特点
宁波允成互联网科技有限公司
现代科技的标志之一的互联网
百单网互联网科技有限公司怎么样
江苏根荣互联网科技
互联网属科技
互联网科技排名
天扬科技互联网广告
中国互联网金融科技基金
西藏七维空间互联网科技有限公司
苏州五指互联网络科技有限
互联网科技数字货币
北京瑞云互联网科技有限公司