recordview视频录制和播放

不喜勿喷,谢谢,有问题多沟通
* 主界面
*
* */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button mBtn_Record;
    Button mBtn_Video;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    public void onContentChanged() {
        super.onContentChanged();
        initView();

    }

    private void initView() {
        mBtn_Record = (Button) findViewById(R.id.btn_Record);
        mBtn_Video = (Button) findViewById(R.id.btn_Video);
        mBtn_Video.setOnClickListener(this);
        mBtn_Record.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_Record:
                startActivity(new Intent(MainActivity.this, RecordActivity.class));
                break;
            case R.id.btn_Video:
                startActivity(new Intent(MainActivity.this, VideoActivity.class));
                break;
        }
    }

}

===========================================================================================

/**
 * 录制视频界面
 */

public class RecordActivity extends AppCompatActivity implements SurfaceHolder.Callback {
    //显示视频预览的SurfaceView
    SurfaceView mSurfaceView;
    //系统的视频文件
    File videoFile;
    //录制视频的封装类
    MediaRecorder mRecorder;
    //记录是否正在进行视频录制
    private boolean isRecording;
    private Camera mCamera;
    private SurfaceHolder mHolder;
    private ToggleButton mToggleButton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_record);
    }

    @Override
    public void onContentChanged() {
        super.onContentChanged();
//设置CallBack回调
        mSurfaceView = (SurfaceView) this.findViewById(R.id.record_surfaceView);
        mHolder = mSurfaceView.getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        //设置开关按钮
        mToggleButton = (ToggleButton) findViewById(R.id.togbtn);
        mToggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if (isChecked) {//true时,从关闭状态到开启状态
                    startmediaRecorder();
                    Toast.makeText(RecordActivity.this, "开始录像", Toast.LENGTH_SHORT).show();
                } else {//false时,从开启状态到关闭状态
                    stopmediaRecorder();
                    Toast.makeText(RecordActivity.this, "录像完成", Toast.LENGTH_SHORT).show();
                }
            }


        });


    }

    @Override
    protected void onResume() {
        super.onResume();
        openCamera();
        if (mHolder != null) {
            setStartPreview(mHolder, mCamera);
        }
    }

    /**
     * 获取Camera硬件对象
     */
    private void openCamera() {
        if (mCamera == null) {
            mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
        }
    }

    /**
     * 释放相机资源
     */
    private void releaseCamera() {
        if (mCamera != null) {
            mCamera.setPreviewCallback(null);
            mCamera.stopPreview();
            mCamera.release();
            mCamera = null;
        }


    }

    /*
    * 开始前的准备
    * */
    private void setStartPreview(SurfaceHolder surfaceHolder, Camera camera) {
        try {
            camera.setPreviewDisplay(surfaceHolder);
            //将系统预览的角度设为横屏
            camera.setDisplayOrientation(90);
            camera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        setStartPreview(mHolder, mCamera);
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
        mCamera.stopPreview();
        setStartPreview(mHolder, mCamera);
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        releaseCamera();
    }

    /*
    * 结束录制的方法
    * */
    private void stopmediaRecorder() {
        if (mRecorder != null) {
            if (isRecording) {//如果正在录制
                mRecorder.stop();
                mRecorder.reset();
                mRecorder.release();
                mRecorder = null;
                isRecording = false;
                try {
                    mCamera.reconnect();
                } catch (IOException e) {
                    Toast.makeText(this, "reconect fail", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }

            }
        }


    }

    /*
    * 开始录制的方法
    * */
    private void startmediaRecorder() {
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            Toast.makeText(RecordActivity.this, "SD卡不存在,请插入SD卡", Toast.LENGTH_SHORT).show();
            return;
        }
        //创建保存录制视频的视频文件
        try {
            Integer i = 0;
            videoFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/" + new Date() + ".mp4");
        } catch (IOException e) {
            e.printStackTrace();
        }

        mCamera.unlock();
        isRecording = true;
        mRecorder = new MediaRecorder();
        mRecorder.reset();
        mRecorder.setCamera(mCamera);
        mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
        mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
       //设置录像机拍摄参数,
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        mRecorder.setVideoFrameRate(5);
        mRecorder.setVideoSize(640, 480);
        mRecorder.setOutputFile(videoFile.getAbsolutePath());
        mRecorder.setPreviewDisplay(mHolder.getSurface());
        try {
            mRecorder.prepare();
        } catch (IOException e) {
            isRecording = false;
            mCamera.lock();
            Toast.makeText(RecordActivity.this, "fail", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }


        mRecorder.start();

    }

}
===============================================================================================

public class VideoPath {
    File videoFile=new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/myvideo.mp4");
    public VideoPath() throws IOException {
    }
}
===========================================================================================

//播放视频界面
public class VideoActivity extends AppCompatActivity {
    //播放视频的SurfaceView
    SurfaceView mSurfaceView;
    SurfaceHolder mSurfaceHolder;
    //播放视频的封装类使用的是vitamio包的
    MediaPlayer mMediaPlayer;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
    }

    @Override
    public void onContentChanged() {
        super.onContentChanged();
        mSurfaceView = (SurfaceView) findViewById(R.id.video_surface);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.setFormat(PixelFormat.RGBA_8888);
        mSurfaceHolder.addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder surfaceHolder) {
                // 初始化MediaPlayer
                mMediaPlayer = new MediaPlayer(getApplicationContext());
                //将MediaPlayer与surfaceHolder进行绑定
                mMediaPlayer.setDisplay(mSurfaceHolder);
                //设置数据
                try {
                    mMediaPlayer.setDataSource(new VideoPath().videoFile.getCanonicalPath());
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //准备播放
                mMediaPlayer.prepareAsync();
                //播放,监听是否准备好
                mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mMediaPlayer.start();
                    }
                });
                //无法播放,黑屏
                mMediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                    @Override
                    public boolean onInfo(MediaPlayer mp, int what, int extra) {

                        if (what == MediaPlayer.MEDIA_INFO_FILE_OPEN_OK) {
                            //对audio进行处理
                            mMediaPlayer.audioInitedOk(mMediaPlayer.audioTrackInit());
                            return true;
                        }

                        return false;
                    }
                });
            }

            @Override
            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

            }

            @Override
            public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

            }
        });

    }
}
========================================================================================

demo地址:

链接:http://pan.baidu.com/s/1bHtGK2 密码:cs87

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值