# MobileCamera **Repository Path**: yqqGitee/MobileCamera ## Basic Information - **Project Name**: MobileCamera - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-04-28 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MobileCamera camera入门系列,基于camera,后期换为camera2实现。主要实现的功能有: 1. 相机预览画面 2. 使用Mediacodec编码pcm格式数据为aac 3. 使用Mediacodec解码aac格式数据为pcm 4. 使用Mediacodec编码yuv格式数据为h264 5. 使用MediaRecorder录制视频 6. 使用Mediacodec+AudioRecord获取原始数据,使用MediaMuxer混合音视频数据并封装为mp4格式文件。 ####使用方法: 使用之前添加权限: ```xml ``` 在布局文件中加入: ```xml ``` 切换相机: ```java CameraView mCameraView = findViewById(R.id.mCameraView); mCameraView.changeCamera(); ``` 拍照: ```java mCameraView.takePicture(Environment.getExternalStorageDirectory().getAbsolutePath() + "/CameraPictures","demo.jpg"); mCameraView.setPicTakenListener(new CameraView.PictureTakenCallBack() { @Override public void onPictureTaken(String result, File file) { if (result.isEmpty()) { Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } } }); ``` 使用MediaRecorder录像: ```java if (mCameraView.isRecoder()){//先判断是否正在录制 mCameraView.stopRecorde(); }else { String filePath = ContentValue.MAIN_PATH + "/mediaRecorder_" + getSystemTime() + ".mp4"; mCameraView.startRecorde(filePath); Toast.makeText(getApplicationContext(), "文件保存在:" + filePath, Toast.LENGTH_LONG).show(); } ``` 使用Mediacodec+AudioRecord混合录制,在录制之前先配置好参数: ```java private EncoderParams getVideoParams(){ EncoderParams params = new EncoderParams(); params.setAudioSampleRate(44100); params.setAudioBitrate(1024 * 100); params.setFrameWidth(mCameraView.getFrameWidth()); params.setFrameHeight(mCameraView.getFrameHeight()); params.setFrameRate(framerate); params.setVideoQuality(EncoderParams.MIDDLE_VIDEO_BIT_RATE); params.setAudioChannelConfig(AudioFormat.CHANNEL_IN_MONO); params.setAudioFormat(AudioFormat.ENCODING_PCM_16BIT); params.setAudioSouce(MediaRecorder.AudioSource.MIC); params.setVideoPath(ContentValue.MAIN_PATH + "/muxer_" + getSystemTime() + ".mp4"); return params; } if (!mCameraView.isRecoder()){ mCameraView.startHardRecorde(getVideoParams()); mBtnMuxer.setText("停止混合编码"); }else { mCameraView.stopHardRecorde(); mBtnMuxer.setText("音视频混合"); } ```