Android 音视频录制

Android音频,视频录制,涉及到AudioRecorder,MediaRecorder,其中,AudioRecorder只能录制声音,MediaRecorder可以录制声音和视频。还有许多音视频编码格式,文件格式等,详见https://developer.android.com/guide/topics/media/media-formats.html。整理的音视频录制,及播放,Android 7.0 亲测代码,可运行(其中SurfaceView需要具体指定)。转载请载明出处,https://blog.csdn.net/sdbzmyh0/article/details/79947850

邮箱:sdbzmyh@163.com,qq:279931514,微信:sdbzmyh

import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Handler;
import android.os.Message;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.io.File;
import java.io.IOException;

/**
 * Created by Administrator on 2018-04-11.
 */
public class MediaUtil{
    MediaRecorder mediarecorder;
    SurfaceView surfaceView=null;//需要在Activity中指定
    SurfaceHolder surfaceHolder=null;
    MediaPlayer mediaPlayer;
    File mAudioFile;
    String mFilePath;
    long startTime;
    private void recordAudioAAC() {
        //创建MediaRecorder对象
        mediarecorder = new MediaRecorder();
        //创建录音文件,.m4a为MPEG-4音频标准的文件的扩展名
        mAudioFile = new File(mFilePath + System.currentTimeMillis() + ".m4a");
        //创建父文件夹
        mAudioFile.getParentFile().mkdirs();
        try {
            //创建文件
            mAudioFile.createNewFile();
            //配置mMediaRecorder相应参数
            //从麦克风采集声音数据
            mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            //设置保存文件格式为MP4
            mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            //设置采样频率,44100是所有安卓设备都支持的频率,频率越高,音质越好,当然文件越大
            mediarecorder.setAudioSamplingRate(44100);
            //设置声音数据编码格式,音频通用格式是AAC
            mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
            //设置编码频率
            mediarecorder.setAudioEncodingBitRate(96000);
            //设置录音保存的文件
            mediarecorder.setOutputFile(mAudioFile.getAbsolutePath());
            //开始录音
            mediarecorder.prepare();
            mediarecorder.start();
            //记录开始录音时间
            startTime = System.currentTimeMillis();
        } catch (Exception e) {
            e.printStackTrace();
            mediarecorder.stop();
            if (null != mediarecorder) {
                mediarecorder.release();
                mediarecorder = null;
            }
        }
    }
    private void Media3gp(){
        mediarecorder = new MediaRecorder();

                /*Camera camera = Camera.open();
                Camera.Parameters parameters = camera.getParameters();
//              parameters.setRotation(90);
                parameters.setPreviewSize(640, 480);
                parameters.setPictureSize(640, 480);
                camera.setParameters(parameters);
                camera.setDisplayOrientation(90);
                camera.unlock();
                mediarecorder.setCamera(camera);
                mediarecorder.reset();*/

        /*mediarecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
            @Override
            public void onInfo(MediaRecorder mr, int what, int extra) {

            }
        });
        mediarecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
            @Override
            public void onError(MediaRecorder mr, int what, int extra) {

            }
        });*/
        /*mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);*/

        mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        //mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        //mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        mediarecorder.setVideoSize(640,480);
        //mediarecorder.setVideoFrameRate(20);
                /*CamcorderProfile cProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
                mediarecorder.setProfile(cProfile);*/
        //mediarecorder.setVideoEncodingBitRate(9995*1024*1024);// 设置帧频率,然后就清晰了
        mediarecorder.setVideoEncodingBitRate(5*1920*1080);// 设置帧频率,然后就清晰了
        //mediarecorder.setOrientationHint(90);// 输出旋转90度,保持竖屏录制

        mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
        mediarecorder.se
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值