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录制视频短片相关推荐

  1. 使用MediaRecorder录制视频短片

    MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同.只是录制视频时不仅需要采集声音,还需要采集图像.为了让MediaRe ...

  2. Android音视频之MediaRecorder录制视频

    1 MediaRecorder 录制视频步骤 这篇文章介绍了Android录音MediaRecorder使用和SoundPool的使用 主要讲解了音频的录制和播放,这篇AudioRecord和Audi ...

  3. Android OpenGL添加水印并录制视频--抖音视频录制原理

    Android OpenGL添加水印并录制视频–抖音视频录制原理 简单的视频录制,我们可以使用MediaRecorder,具体示例可以参考Gitee: Camera2VideoJava 本文将介绍采集 ...

  4. 前端 mediaRecorder 录制视频源代码实例,和本地播放器无法定位进度条问题分析和解决

    问题 mediaRecorder 本质上录制的是webm 当我们使用getUserMedia.MediaRecorder等API生成的webm视频时,会发现最终的webm是无法拖动进度条的 解决方案 ...

  5. MediaRecorder录制视频时计算文件大小

    MediaRecorder录制视频时通过音频编码率和视频编码率计算文件大小或时间 计算公式:(音频编码率(单位k)+视频编码率(单位k))/8*时间(秒) = 文件大小(kb) 例: mediaRec ...

  6. Android MediaRecorder录制视频详细步骤

    使用MediaRecorder能够编写从设备麦克风与相机捕获音视频,保存音频并(使用MediaPlayer)进行播放的应用. 1.添加权限: <uses-permission android:n ...

  7. Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)

    之前写得太乱,回头看看感觉自己都有点看不懂,重新写下. 在android上需要做一个录像留言功能,需要生成MP4或者waw格式视频.但是使用MediaRecorder录制出的MP4视频格式音量太小,几 ...

  8. Android音视频开发:MediaRecorder录制视频

    简介 安卓api提供了Camera类控制相机捕获图像,在api21以后,安卓也提供了Camera2,Camera变得过时了,但为了兼容性,这里还是使用Camera. 对于录制视频,可以使用MediaR ...

  9. Android MediaRecorder录制视频提示start failed的解决办法

    转自https://blog.csdn.net/w815878564/article/details/49247411 今天测试MediaRecorder录制功能的时候出现一个蛋疼的BUG,按照官方提 ...

最新文章

  1. tarjan详解(转)
  2. Python计算机视觉:第十章 OpenCV
  3. ASP.NET程序中常用的三十三种代码(二)
  4. c4.5算法python实现_算法:用Python实现—最优化算法
  5. 常用JS正则匹配函数
  6. 常见问题_自动打螺丝机常见问题及解决办法
  7. NSNtification 在多线程中的运用
  8. 分布式-图片上传到Lgnix
  9. 中国人民公安大学(PPSUC) 网络对抗技术作业一
  10. Latex 公式速查
  11. 华为小程序怎么弄出来_华为手机窗口小程序 华为窗口小程序怎么弄出来
  12. 【ROM制作工具】线刷包转卡刷包制作教程
  13. Wework的线上社交,能否支撑其169亿估值?
  14. 梦三国测试服显示连接服务器失败,《梦三国》梦三国服务器未连接攻略
  15. Android的Scroller介绍
  16. PlayMaker 1.9 烦人的小提示
  17. Debussy VerilogVHDL ISE仿真平台搭建步骤
  18. 苹果ios签名证书的生成方法
  19. Tensorflow与keras学习 (3)——循环神经网络RNN
  20. Yau 近代几何讲座

热门文章

  1. MySQL数据库快速入门
  2. 羊了个羊微信小程序开发丨源码交付
  3. 智慧经营| 物业数字化管理系统
  4. Internet Explorer 各版本文件上传和下载限制
  5. 使用libyuv库解决视频后处理性能不足问题
  6. 用c语言编写程序输出* ***,用C语言如何编写程序输出以下图形
  7. 选择恐惧症的福音!教你认清MVC,MVP和MVVM
  8. 如何将SOCKS5代理转换成HTTP代理?
  9. VTK重建CT图像,写入和读取STL格式文件
  10. 电磁场中相位常数K和β的关系