android录制视频实现
来源:互联网 发布:去重sql语句 distinct 编辑:程序博客网 时间:2024/03/29 16:17
Android视频录制使用MediaRecorder来录制,SurfaceView来预览视频
与录制音频类似,录制视频的步骤为:
1. 构造MediaRecorder对象
2. 设置视频的声音和视频来源
3. 设置视频文件的输出格式 // 3必须在4 之前
4. 设置视频图像的编码格式
5. 设置保存到文件
6. 使用SurfaceView预览视频
7. mediaRecorder.prepre() 和 mediaRecorder.start()
停止视频录制采用mediaRecorder.stop(),mediaRecorder.release();
编写布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <SurfaceView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/sView"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center" > <Button android:id="@+id/record" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="record"/> <Button android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="stop"/> </LinearLayout></RelativeLayout>编写Activity:
public class RecordVedio extends Activity implements View.OnClickListener{ MediaRecorder mediaRecorder; File videoFile; Button record,stop; SurfaceView surfaceView; private boolean isRecording = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.record_video); record = (Button) findViewById(R.id.record); stop = (Button) findViewById(R.id.stop); surfaceView = (SurfaceView) findViewById(R.id.sView); // 设置Surface不用自己维护缓冲区 surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // 设置分辨率 surfaceView.getHolder().setFixedSize(320,280); // 设置该组件不会让屏幕自动关闭 surfaceView.getHolder().setKeepScreenOn(true); record.setOnClickListener(this); stop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.record: recordVideo(); break; case R.id.stop: if(isRecording){ mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; record.setEnabled(true); stop.setEnabled(false); isRecording = false; } break; } } private void recordVideo(){ if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ Toast.makeText(RecordVedio.this, "SD卡未找到", Toast.LENGTH_SHORT).show(); return; } try { videoFile = new File(Environment.getExternalStorageDirectory().getCanonicalPath()+ "/myvideo.mp4"); } catch (IOException e) { e.printStackTrace(); } if(mediaRecorder == null){ mediaRecorder = new MediaRecorder(); } mediaRecorder.reset(); // 设置视频声音的来源 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置视频来源 mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置视频文件的输出格式 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // 设置声音的编码格式 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 设置视频的编码格式 mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); // 设置录制的视频的宽高// mediaRecorder.setVideoSize(320,280);// // 设置视频帧数/秒// mediaRecorder.setVideoFrameRate(4); // 设置视频保存到文件 mediaRecorder.setOutputFile(videoFile.getAbsolutePath()); // 将视频显示到SurfaceView上 mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface()); try { mediaRecorder.prepare(); mediaRecorder.start(); record.setEnabled(false); stop.setEnabled(true); isRecording = true; } catch (IOException e) { e.printStackTrace(); } } @Override protected void onDestroy() { mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; super.onDestroy(); }}
加上权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" />出现过的问题:
1. 之前使用了下面两句,发现不能录制,原因是我的手机摄像头不一定支持下面的属性设置,去掉就行
// mediaRecorder.setVideoSize(320,280);// // 设置视频帧数/秒// mediaRecorder.setVideoFrameRate(4);2. 录制视频是发现视频总是旋转了90度,在AndroidManifest.xml文件中对实现屏幕捕捉的Activity增加如下属性值:
<activity android:name=".ScreenCapture" android:screenOrientation="landscape">
1 0
- android实现视频录制
- android录制视频实现
- Android实现录制视频
- Android上实现视频录制
- Android上实现视频录制
- Android 实现视频录制播放
- Android 实现视频录制并播放
- Android基础--MediaRecorder类实现视频录制
- Android 微信小视频录制功能实现
- Android 拍照和视频录制实现mediaRecorder
- Android视频录制以及声音视频特效实现研究
- android视频录制(调用系统视频录制)
- 实现语音视频录制
- iOS实现视频录制
- opencv实现视频录制
- Android 视频录制
- android视频录制
- android 音视频录制
- 检测格式化字符串攻击脚本
- uva11168 Airport(凸包)
- 编译linux内核入门
- Intellij IDEA 中JAR包的导出
- EventBus集成和使用
- android录制视频实现
- [LeetCode-Java]11. Container With Most Water
- 音乐推荐&Audioscrobbler数据集
- 在LCD1602上面显示DS1302掉电时钟和日期
- 这是我的第一篇博文
- MySQL常用命令
- linked-list-cycle-ii
- 使用Linux工作之Fedora KDE
- linux内核态和用户态