Android使用的开发MediaRecorder录制视频
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录制视频的更多相关文章
- Android使用的开发MediaRecorder录制声音
至 Android 录制声音的应用,Android提供 MediaRecorder 类别.大约MediaRecorder可以参考一个特定的解释<Android开发之MediaRecorder类具 ...
- 使用MediaRecorder录制视频短片
MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同.只是录制视频时不仅需要采集声音,还需要采集图像.为了让MediaRe ...
- Android ADB工具-截图和录制视频(五)
Android ADB工具-截图和录制视频(五) 标签(空格分隔): Android ADB 7. 截图和录制视 命令 功能 adb shell screencap –p <path/file& ...
- 【Android 直播软件开发:音视频硬解码篇】
开篇 炙手可热,望而生畏的音视频开发 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多 ...
- 【Android】用MediaRecorder录制视频太短崩的问题
具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...
- Android 用MediaRecorder录制视频太短崩的问题
具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...
- Android Studio 集成开发工具教学视频
简介 经过2年时间的研发,Google终于正式发布了面向Android开发者的集成开发环境Android Studio 1.2(稳定版).Android Studio是Google开发的一款面向And ...
- Android 开发 MediaRecorder使用Camera1配合录制视频
前言 MediaRecorder可以不依靠Camera API 实现视频的录制,但是如果需要切换摄像头/设置对焦/选择分辨率等等就需要Camera来参与配合录制视频.这篇博客将介绍使用Camera1来 ...
- Android开发之打开闪光灯录制视频
Android的SDK在线API上对录制视频的方法.步骤都写得非常清楚,但是如果没有一点思路,写起来也比较式费事.录制视频的全过程要打开闪光灯(可能是因为项目需要,或者特殊原因),则必须按照一定的顺序 ...
随机推荐
- ORACLE:profile的管理
PROFILE的管理(资源文件) 当需要设置资源限制时,必须设置数据库系统启动参数RESOURCE_LIMIT,此参数默认值为FALSE 可以使用如下命令来启动当前资源限制: ...
- SharePoint 2010 Pop-Up Dialogs
转:http://kyleschaeffer.com/sharepoint/sharepoint-2010-pop-up-dialogs/ SharePoint 2010 makes it incre ...
- Eclipse文件编码设置的问题
Eclipse中设置编码的方式 如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出, 则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace)的缺 ...
- ollydbg z
通达信l2密码器方法: 1:使用Ollydbg,点文件,打开,选择通达信的可执行文件(或者把通达信的执行文件直接拖进Ollydbg的窗口),按F9运行程序. 2:正常使用通达信,进入到K线图后,在k线 ...
- How to Convert a Date Time to “X minutes ago” in C# z
http://www.codeproject.com/Articles/770323/How-to-Convert-a-Date-Time-to-X-minutes-ago-in-Csh In one ...
- codeforces 401D (数位DP)
思路:很明显的数位dp,设dp[i][j] 表示选取数字的状态为i,模m等于j的数的个数,那么最后的答案就是dp[(1<<n)-1][0].状态转移方程就是,dp[i|(1<< ...
- Java8 Stream API
Stream是Java8中,操作集合的一个重要特性. 从iteration到Stream操作 当你操作一个集合的时候,你通常的做法是迭代每一个元素,然后处理你想要的事情.举个例子: String co ...
- 开启sa账户以及如何用JDBC进行连接
做实验需要用Java与SQL Server连接,因为使用的 SQL 2008 Express Edition 是基于 Visual Studio2010 安装包安装时一起安装的,所以为了方便数据库的操 ...
- SQL2008R2日志传送需要注意点
当SQL2008R2采用日志传送方式进行备份/还原时需要注意事项 主从数据库机器必须是局域网内可互相通过共享访问的主机 主从数据库须添加系统帐号,并将sqlagent服务的启动帐号设定为此帐号,最好主 ...
- 关于PCB布线的顺序到底是怎样才合理?
有人说先布好电源线和地线,让它们尽量靠近走,然后再考虑信号线:也有人说先布好关键的信号线,然后再走电源和地线:还有人说先布好电源线,再布信号线,地线最后布.到底怎么样才算好呢?或者说,一般应按照什么顺 ...