我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android如何实现调用手机摄像头录像限制录像时长

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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如何实现调用手机摄像头录像限制录像时长”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android如何实现调用手机摄像头录像限制录像时长

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android如何实现调用手机摄像头录像限制录像时长

小编给大家分享一下Android如何实现调用手机摄像头录像限制录像时长,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下因为服务器空间有限,所以视频时长必须有所限制。在xml中先布局一个按钮,点击开始录频。布局一个
2023-06-29

android开发之调用手机的摄像头使用MediaRecorder录像并播放

我们玩玩手机的录像功能吧。做个DEMO。 看看录制过程: 代码如下: mediarecorder = new MediaRecorder();// 创建mediarecorder对象 // 设置录制视频源为Camera(相机) media
2022-06-06

Android怎么调用手机摄像头拍照和录音功能

本文小编为大家详细介绍“Android怎么调用手机摄像头拍照和录音功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android怎么调用手机摄像头拍照和录音功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。调
2023-06-29

Html5中如何调用手机摄像头并实现人脸识别

这篇文章主要介绍了Html5中如何调用手机摄像头并实现人脸识别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求混合App开发,原生壳子+webApp,在web部分调用原生摄
2023-06-09

Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作

1. CameraX架构 看官方文档 CameraX架构 有如下这一段话 使用CameraX,借助名为"用例"的抽象概念与设备的相机进行交互。 预览 : 接受用于显示预览的Surface,例如PreviewView图片分析 : 为分析 (例
2023-08-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录