Android多媒体四:MediaRecorder录制视频短片
Android多媒体四:MediaRecorder录制视频短片
MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同。
只是录制视频时不仅需要采集声音,还需要采集图像。为了让MediaRecorder录制时采集图像,应该在调用setAudioSource(int audio_source)方法时
再调用setVideoSource(int video_source)方法来设置图像来源。
除此之外,还需要在调用setOutputFormat()设置输出文件格式之后进行如下步骤:
1、调用MediaRecorder对象的setVideoEncoder()、setVideoEncodingBitRate(int bitRate)、setVideoFrameRate()设置所录制的视频的编码格式、编码位率、每秒多少帧等,这些参数将可以控制所录制的视频的品质、文件的大小。一般来说,视频品质越好,视频文件越大。2、调用MediaRecorder的setPreviewDisplay(SurfaceView sv)方法设置使用哪个SurfaceView来显示视频预览。
实例:录制视频并保存
layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="vertical"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal"><Buttonandroid:id="@+id/recode"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="录制" /><Buttonandroid:id="@+id/stop"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="停止" /></LinearLayout><!-- 显示视频预览的SurfaceView --><SurfaceViewandroid:id="@+id/sView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>
com/example/administrator/MainActivity.java
package com.example.administrator;import android.Manifest;import android.app.Activity;import android.hardware.Camera;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;import com.example.administrator.Permission.PermissionManager;import java.io.File;import java.io.IOException;public class MainActivity extends Activity implements OnClickListener, PermissionManager.PermissionsResultListener {private final String TAG = "MainActivity";//程序中的两个按钮Button recode;Button stop;//系统的视频文件File videoFile;MediaRecorder mRecorder;//显示视频预览的SurfaceViewSurfaceView sView;//记录是否正在进行录制private boolean isRecoding = false;private Camera mCamera;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);PermissionManager.requestPermission(this, "录制视频", 5, this, Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);//获取程序界面中的两个按钮recode = findViewById(R.id.recode);stop = findViewById(R.id.stop);//让stop按钮不可用stop.setEnabled(false);//为按钮的单击事件绑定监听器recode.setOnClickListener(this);stop.setOnClickListener(this);//获取程序界面中的SurfaceViewsView = this.findViewById(R.id.sView);//下面设置Surface不需要自己维护缓冲区sView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//设置分辨率sView.getHolder().setFixedSize(320, 280);//设置该组件让屏幕不会自动关闭sView.getHolder().setKeepScreenOn(true);}@Overridepublic void onClick(View source) {switch (source.getId()) {//单击录制按钮case R.id.recode:Toast.makeText(this, "SD卡不存在,请插入SD卡!", 5000).show();if (!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {return;}//创建保存录制视频的视频文件try {videoFile = new File(Environment.getDownloadCacheDirectory().getCanonicalFile() + "/myvideo.mp4");} catch (IOException e) {e.printStackTrace();}Log.i(TAG, "onClick: path = " + videoFile.toString());//创建MediaRecorder对象mRecorder = new MediaRecorder();mCamera = Camera.open();Camera.Parameters params = mCamera.getParameters();mCamera.setDisplayOrientation(90);//旋转了90度,最好先判断下JDK的版本号,再决定旋转不mCamera.setParameters(params);mCamera.stopPreview();mCamera.unlock();//解锁mRecorder.setCamera(mCamera);mRecorder.reset();//设置从麦克风采集声音mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置从摄像头采集图像mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//设置视频文件的输出格式(必须在设置声音编码格式、图像编码格式之前设置)mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);//设置声音编码的格式mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);//设置图像编码的格式mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);// mRecorder.setVideoSize(320, 280);//每秒4帧mRecorder.setVideoFrameRate(30);mRecorder.setOutputFile(videoFile.getAbsolutePath());//指定使用SurfaceView来预览视频mRecorder.setPreviewDisplay(sView.getHolder().getSurface());try {mRecorder.prepare();} catch (IOException e) {e.printStackTrace();}//开始录制mRecorder.start();System.out.println("----recoding----");//让recorde按钮不可用recode.setEnabled(false);//让stop按钮可用stop.setEnabled(true);isRecoding = true;break;//单击停止按钮case R.id.stop://如果正在进行录制if (isRecoding) {//停止录制mRecorder.stop();//释放资源mRecorder.release();//让record按钮可用recode.setEnabled(true);//让stop按钮不可用stop.setEnabled(false);mCamera.release();}break;}}@Overridepublic void onPermissionGranted(int requestCode) {}@Overridepublic void onPermissionDenied(int requestCode) {}}
Android多媒体四:MediaRecorder录制视频短片相关推荐
- 使用MediaRecorder录制视频短片
MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同.只是录制视频时不仅需要采集声音,还需要采集图像.为了让MediaRe ...
- Android音视频之MediaRecorder录制视频
1 MediaRecorder 录制视频步骤 这篇文章介绍了Android录音MediaRecorder使用和SoundPool的使用 主要讲解了音频的录制和播放,这篇AudioRecord和Audi ...
- Android OpenGL添加水印并录制视频--抖音视频录制原理
Android OpenGL添加水印并录制视频–抖音视频录制原理 简单的视频录制,我们可以使用MediaRecorder,具体示例可以参考Gitee: Camera2VideoJava 本文将介绍采集 ...
- 前端 mediaRecorder 录制视频源代码实例,和本地播放器无法定位进度条问题分析和解决
问题 mediaRecorder 本质上录制的是webm 当我们使用getUserMedia.MediaRecorder等API生成的webm视频时,会发现最终的webm是无法拖动进度条的 解决方案 ...
- MediaRecorder录制视频时计算文件大小
MediaRecorder录制视频时通过音频编码率和视频编码率计算文件大小或时间 计算公式:(音频编码率(单位k)+视频编码率(单位k))/8*时间(秒) = 文件大小(kb) 例: mediaRec ...
- Android MediaRecorder录制视频详细步骤
使用MediaRecorder能够编写从设备麦克风与相机捕获音视频,保存音频并(使用MediaPlayer)进行播放的应用. 1.添加权限: <uses-permission android:n ...
- Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)
之前写得太乱,回头看看感觉自己都有点看不懂,重新写下. 在android上需要做一个录像留言功能,需要生成MP4或者waw格式视频.但是使用MediaRecorder录制出的MP4视频格式音量太小,几 ...
- Android音视频开发:MediaRecorder录制视频
简介 安卓api提供了Camera类控制相机捕获图像,在api21以后,安卓也提供了Camera2,Camera变得过时了,但为了兼容性,这里还是使用Camera. 对于录制视频,可以使用MediaR ...
- Android MediaRecorder录制视频提示start failed的解决办法
转自https://blog.csdn.net/w815878564/article/details/49247411 今天测试MediaRecorder录制功能的时候出现一个蛋疼的BUG,按照官方提 ...
最新文章
- tarjan详解(转)
- Python计算机视觉:第十章 OpenCV
- ASP.NET程序中常用的三十三种代码(二)
- c4.5算法python实现_算法:用Python实现—最优化算法
- 常用JS正则匹配函数
- 常见问题_自动打螺丝机常见问题及解决办法
- NSNtification 在多线程中的运用
- 分布式-图片上传到Lgnix
- 中国人民公安大学(PPSUC) 网络对抗技术作业一
- Latex 公式速查
- 华为小程序怎么弄出来_华为手机窗口小程序 华为窗口小程序怎么弄出来
- 【ROM制作工具】线刷包转卡刷包制作教程
- Wework的线上社交,能否支撑其169亿估值?
- 梦三国测试服显示连接服务器失败,《梦三国》梦三国服务器未连接攻略
- Android的Scroller介绍
- PlayMaker 1.9 烦人的小提示
- Debussy VerilogVHDL ISE仿真平台搭建步骤
- 苹果ios签名证书的生成方法
- Tensorflow与keras学习 (3)——循环神经网络RNN
- Yau 近代几何讲座