MediaRecorder除了使用录制音频。还可用于录制视频。关于MediaRecorder的具体解释大家能够參考《Android开发之MediaRecorder类具体解释》。使用MediaRecorder录制视频与录制音频的步骤基本同样。仅仅是录制视频时不仅须要採集声音。还须要採集图像。为了让MediaRecorder录制时採集图像,应该在调用setAudioSource(int
audio source)方法时再调用setVideoSource(int video source)方法来设置图像来源。

除此之外,还需在调用setOutputFormat()设置输出文件格式之后进行例如以下步骤:

1) 调用MediaRecorder 对象的setVideoEncoder()、setVideoEncodingBitRate(intbitRate)、setVideoFrameRate设置所录制的视频的编码格式、编码位率、每秒多少帧等。这些參数将能够控制所录制的视频的品质、文件的大小。

一般来说。视频品质越好,视频文件越大。

2)
调用 MediaRecorder的setPreviewDisplay(Surfacesv)方法设置使用哪个SurfaceView来显示视频预览。

剩下的代码则与录制音频的代码基本同样:

实例使用MediaRecorder录制视频:

1.RecordVideo类:

package com.jph.recordvideo;

import java.io.File;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.Toast; /**
* Description:
* 使用MediaRecorder录制视频
* @author jph
* Date:2014.08.14
* <br/>
*/
public class RecordVideo extends Activity
implements OnClickListener
{
// 程序中的两个button
ImageButton record , stop;
// 系统的视频文件
File videoFile ;
MediaRecorder mRecorder;
// 显示视频预览的SurfaceView
SurfaceView sView;
// 记录是否正在进行录制
private boolean isRecording = false; @Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 去掉标题栏 ,必须放在setContentView之前
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
// 设置横屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 选择支持半透明模式,在有surfaceview的activity中使用。
getWindow().setFormat(PixelFormat.TRANSLUCENT);
// 获取程序界面中的两个button
record = (ImageButton) findViewById(R.id.record);
stop = (ImageButton) findViewById(R.id.stop);
// 让stopbutton不可用。
stop.setEnabled(false);
// 为两个button的单击事件绑定监听器
record.setOnClickListener(this);
stop.setOnClickListener(this);
// 获取程序界面中的SurfaceView
sView = (SurfaceView) this.findViewById(R.id.sView);
// 设置分辨率
sView.getHolder().setFixedSize(1280, 720);
// 设置该组件让屏幕不会自己主动关闭
sView.getHolder().setKeepScreenOn(true);
} @Override
public void onClick(View source)
{
switch (source.getId())
{
// 单击录制button
case R.id.record:
if (!Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED))
{
Toast.makeText(RecordVideo.this
, "SD卡不存在,请插入SD卡!"
, Toast.LENGTH_SHORT).show();
return;
}
try
{
// 创建保存录制视频的视频文件
videoFile = new File(Environment
.getExternalStorageDirectory()
.getCanonicalFile() + "/testvideo.3gp");
// 创建MediaPlayer对象
mRecorder = new MediaRecorder();
mRecorder.reset();
// 设置从麦克风採集声音(或来自录像机的声音AudioSource.CAMCORDER)
mRecorder.setAudioSource(MediaRecorder
.AudioSource.MIC);
// 设置从摄像头採集图像
mRecorder.setVideoSource(MediaRecorder
.VideoSource.CAMERA);
// 设置视频文件的输出格式
// 必须在设置声音编码格式、图像编码格式之前设置
mRecorder.setOutputFormat(MediaRecorder
.OutputFormat.THREE_GPP);
// 设置声音编码的格式
mRecorder.setAudioEncoder(MediaRecorder
.AudioEncoder.AMR_NB);
// 设置图像编码的格式
mRecorder.setVideoEncoder(MediaRecorder
.VideoEncoder.H264);
mRecorder.setVideoSize(1280, 720);
// 每秒 4帧
mRecorder.setVideoFrameRate(20);
mRecorder.setOutputFile(videoFile.getAbsolutePath());
// 指定使用SurfaceView来预览视频
mRecorder.setPreviewDisplay(sView
.getHolder().getSurface()); //①
mRecorder.prepare();
// 開始录制
mRecorder.start();
System.out.println("---recording---");
// 让recordbutton不可用。
record.setEnabled(false);
// 让stopbutton可用。 stop.setEnabled(true);
isRecording = true;
}
catch (Exception e)
{
e.printStackTrace();
}
break;
// 单击停止button
case R.id.stop:
// 假设正在进行录制
if (isRecording)
{
// 停止录制
mRecorder.stop();
// 释放资源
mRecorder.release();
mRecorder = null;
// 让recordbutton可用。
record.setEnabled(true);
// 让stopbutton不可用。
stop.setEnabled(false);
}
break;
}
}
}

2.布局文件:

<?xml version="1.0" encoding="utf-8"?

>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 显示视频预览的SurfaceView -->
<SurfaceView
android:id="@+id/sView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
<ImageButton
android:id="@+id/record"
android:layout_width="66dp"
android:layout_height="66dp"
android:scaleType="fitCenter"
android:src="@drawable/recored" />
<ImageButton
android:id="@+id/stop"
android:layout_width="66dp"
android:layout_height="66dp"
android:scaleType="fitCenter"
android:src="@drawable/stop" />
</LinearLayout>
</RelativeLayout>

3.为程序加入对应权限:

<!-- 授予该程序录制声音的权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- 授予该程序使用摄像头的权限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 授予使用外部存储器的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

4.程序执行预览:

Android使用的开发MediaRecorder录制视频的更多相关文章

  1. Android使用的开发MediaRecorder录制声音

    至 Android 录制声音的应用,Android提供 MediaRecorder 类别.大约MediaRecorder可以参考一个特定的解释<Android开发之MediaRecorder类具 ...

  2. 使用MediaRecorder录制视频短片

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

  3. Android ADB工具-截图和录制视频(五)

    Android ADB工具-截图和录制视频(五) 标签(空格分隔): Android ADB 7. 截图和录制视 命令 功能 adb shell screencap –p <path/file& ...

  4. 【Android 直播软件开发:音视频硬解码篇】

    开篇 炙手可热,望而生畏的音视频开发 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多 ...

  5. 【Android】用MediaRecorder录制视频太短崩的问题

    具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...

  6. Android 用MediaRecorder录制视频太短崩的问题

    具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...

  7. Android Studio 集成开发工具教学视频

    简介 经过2年时间的研发,Google终于正式发布了面向Android开发者的集成开发环境Android Studio 1.2(稳定版).Android Studio是Google开发的一款面向And ...

  8. Android 开发 MediaRecorder使用Camera1配合录制视频

    前言 MediaRecorder可以不依靠Camera API 实现视频的录制,但是如果需要切换摄像头/设置对焦/选择分辨率等等就需要Camera来参与配合录制视频.这篇博客将介绍使用Camera1来 ...

  9. Android开发之打开闪光灯录制视频

    Android的SDK在线API上对录制视频的方法.步骤都写得非常清楚,但是如果没有一点思路,写起来也比较式费事.录制视频的全过程要打开闪光灯(可能是因为项目需要,或者特殊原因),则必须按照一定的顺序 ...

随机推荐

  1. foreach中引用 的问题

    在工作中遇到 关于 php foreach 引用的一个问题 简单来说,如下代码 $arr=array('a','b','c' ,'d'); foreach($arr as $k=>&$v ...

  2. poj3666

    一道不错的dp题 就是最小修改代价,使序列变为一个非下降序或非上升(由于数据较弱直接求非下降即可,当然非上升非下降本质是一样的) 观察可得到,修改后得到的数列中的元素最后一定都在原序列中: 由此我们可 ...

  3. SQL、LINQ、Lambda 三种用法

    SQL   LinqToSql   Lambda 1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from studentL ...

  4. apache开源项目--lume

    lume 是一个分布式.可靠和高可用的服务,用于收集.聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型.这是一个可靠.容错的服务.

  5. 剑指Offer:第一个只出现一次的字符

    题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",这输出'b' // 第一个只出现一次的字符 #include <stdio.h> char f ...

  6. 【转】Eclipse配置Struts2问题:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    我的解决方案 一开始,我是依照某本教材,配置了User Libraries(名为struts-2.2.3, 可供多个项目多次使用), 然后直接把struts-2.2.3引入过来(这个包不会真正的放在项 ...

  7. 在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)

    版本:v1.2   Crifan Li 摘要 本文主要介绍了如何在嵌入式Linux系统运行的时候,进行升级整个Linux系统,包括uboot,kernel和rootfs.以及简介Linux中的已有的通 ...

  8. DELPHI 中的Delay函数,利用GetTickCount和Application.ProcessMessages构建

      作者 关劲松           delphi 开发中有些时候需要停留片刻,等待界面输入,或异步操作完成,如果使用sleep函数的话,整个程序都会停顿,界面还会出现冻结的情况.因此需要自行编写一个 ...

  9. Poj 1953 World Cup Noise之解题报告

    World Cup Noise Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16369   Accepted: 8095 ...

  10. FZU 2127 养鸡场

     Problem Description Jason买来了n米长的竹篱笆,打算将n米长的竹篱笆全部用来围成一个三角形的养鸡场.为方便起见,养鸡场三条边的长度都为正整数.同时,他想让自己的养鸡场看起来更 ...