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

public void startRecord() {
        mediarecorder = new MediaRecorder();// 创建mediarecorder对象
        mCamera = getCameraInstance();
        Parameters parameters = mCamera.getParameters();
        mCamera.autoFocus(null);
        // 解锁camera
        mCamera.setDisplayOrientation(90);
        mCamera.unlock();
        mediarecorder.setCamera(mCamera);

        List<Size> supportedPreviewSizes = parameters.getSupportedPreviewSizes();
        for(int i=0;i<supportedPreviewSizes.size();i++)
        {
            Log.v("startRecord", "width="+supportedPreviewSizes.get(i).width+";height="+supportedPreviewSizes.get(i).height);
        }
        // 设置录制视频源为Camera(相机)
//        mediarecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
        mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        // 设置录制文件质量,格式,分辨率之类,这个全部包括了
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_480P));  //7.43M  10frame
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_1080P));   //70.94M  10frame
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_CIF));  // 2.6M  5frame/10frame
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_QCIF));  //0.76M   30frame  模糊
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_QVGA));  //2.1M
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_CIF));  //不支持
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));  //766KB  还行  比QUALITY_QCIF好
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_LOW));  //1M 质量类似LOW
//        mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_480P));  //480p效果
//        mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.);
//        mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

//        boolean isSupQUALITY_TIME_LAPSE_CIF = CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_TIME_LAPSE_CIF);
//        boolean isSupQUALITY_LOW = CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_LOW);
//        Log.v("startRecord", "isSupQUALITY_TIME_LAPSE_CIF="+isSupQUALITY_TIME_LAPSE_CIF+";isSupQUALITY_LOW="+isSupQUALITY_LOW);
//
//        mediarecorder.setVideoFrameRate(30);

      //start实现录像静音
        mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//        mediarecorder.setVideoSize(640,480);
        mediarecorder.setVideoSize(1280,720);
        //设置编码比特率,不设置会使视频图像模糊
//        mediarecorder.setVideoEncodingBitRate(5*1024*1024);  //清晰     512*1024(不清楚)
        mediarecorder.setVideoEncodingBitRate(900*1024); //较为清晰,且文件大小为3.26M(30秒)
        mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);  //H263的貌似有点不清晰
//        mediarecorder.setVideoFrameRate(10);  //设置无效
        //end

        mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());

        // 设置视频文件输出的路径
        mediarecorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/data/data/"+System.currentTimeMillis()+".mp4");
        try {
            // 准备录制
            mediarecorder.prepare();
            // 开始录制
            mediarecorder.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

一般情况下,我们直接调用  mediarecorder 会产生很大的视频文件,30秒的为70M,因此,我们需要在录制视频时尽量控制视频文件的大小!

mediarecorder.setVideoEncodingBitRate(900*1024);   //设置编码比特率,不设置会使视频图像模糊
时间: 2024-10-08 12:55:02

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

Android 使用意图录制视频

本文章主要将通过意图触发内置的Camera应用程序来录制视频. 源代码: 布局文件: activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" androi

Android使用的开发MediaRecorder录制视频

MediaRecorder除了使用录制音频.还可用于录制视频.关于MediaRecorder的具体解释大家能够參考<Android开发之MediaRecorder类具体解释>.使用MediaRecorder录制视频与录制音频的步骤基本同样.仅仅是录制视频时不仅须要採集声音.还须要採集图像.为了让MediaRecorder录制时採集图像,应该在调用setAudioSource(int audio source)方法时再调用setVideoSource(int video source)方法来设置

vlc android 截图和录制视频(vlc0.9.9)

1.下载编译vlc 0.9.9 参考https://wiki.videolan.org/AndroidCompile/ 我的系统是Ubuntu 14.04 64位 2.在项目根目录../android,打上补丁 git apply *.patch 3.在../android/vlc,打上补丁 4.重新编译即可 要截图和录制视频的时候 只要使用LibVLC.java中的下面接口 public boolean takeSnapShot(String file, int width, int heig

Android拍照,录制视频,相机简单功能实现

1.效果图,功能没有录制出来. 基本实现了拍照,录制视频,前后摄像头切换的功能,可以转屏,聚焦. 代码在最下面,可以看代码,运行apk看实际效果. 2.工具类 package com.example.mycamera; import android.content.Context; import android.hardware.Camera; import android.media.MediaRecorder; import android.util.Log; import android.

Android拍照丶录制视频功能实现

基本实现了拍照,录制视频,前后摄像头切换的功能,可以转屏,聚焦 源码:https://gitee.com/lyc96/android_video 1.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app

Android开发系列(十七):读取assets目录下的数据库文件

在做Android应用的时候,不可避免要用到数据库.但是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的. (PS:这篇博客解决了我前面博客中写的一个小游戏的一个问题,另外也可以读取Raw目录下的数据库文件) 这就造成了一个问题,这个问题其实很好解决,解决方法如下: 我们首先把有数据的数据库文件放在assets资源目录下边,然后在apk应用启动的时候,把assets目录下的数据库文件的数据写入到真机的内存中去. 下边开始我们的代码编写:

android开发(3):列表listview的实现 | 下拉刷新

APP里面的列表太常用了,系统提供的listview或grideview可以做到.另外,我希望这个列表能够下拉时触发刷新,于是考虑使用封装了这个功能的开源项目,这里介绍这个: https://github.com/Yalantis/Phoenix 这是一个支持下拉刷新的控件,里面包括了ListView. (1)引入下拉刷新库 同样,先引入这个库,在app/build.gradle的dependencies中增加一行: implementation 'com.yalantis:phoenix:1.

Android开发所有视频教程汇总

1.Mars的Android开发视频教程作者讲解的很详细,很全面,系统.以前出了两套视频,分别是<Java4Android视频教程>.<Android视频教程>,以及最新刚新出的<Android视频教程重制版>.很负责人的老师.具体的Mars开发视频见其个人论坛:http://www.marschen.com/bbs/forum.php <Android视频教程重制版>下载地址:http://dl.vmall.com/c0qs8budkm 2.老罗Andro

【转】Android开发笔记(序)写在前面的目录

原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入门上:其次是想拾缺补漏,写写虽然小众却又用得着的东西:另外就是想以实用为主,不求大而全,但求小而精:还有就是有的知识点是java的,只是Android开发也会经常遇上,所以蛮记下来.个人的经