Android开发之使用MediaRecorder录制视频,android视频录制

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

*

*/

public class RecordVideo extends Activity

implements OnClickListener

{

// 程序中的两个按钮

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);

// 获取程序界面中的两个按钮

record = (ImageButton) findViewById(R.id.record);

stop = (ImageButton) findViewById(R.id.stop);

// 让stop按钮不可用。

stop.setEnabled(false);

// 为两个按钮的单击事件绑定监听器

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())

{

// 单击录制按钮

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---");

// 让record按钮不可用。

record.setEnabled(false);

// 让stop按钮可用。

stop.setEnabled(true);

isRecording = true;

}

catch (Exception e)

{

e.printStackTrace();

}

break;

// 单击停止按钮

case R.id.stop:

// 如果正在进行录制

if (isRecording)

{

// 停止录制

mRecorder.stop();

// 释放资源

mRecorder.release();

mRecorder = null;

// 让record按钮可用。

record.setEnabled(true);

// 让stop按钮不可用。

stop.setEnabled(false);

}

break;

}

}

}

2.布局文件:

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/sView"

android:layout_width="match_parent"

android:layout_height="match_parent" />

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">

android:id="@+id/record"

android:layout_width="66dp"

android:layout_height="66dp"

android:scaleType="fitCenter"

android:src="@drawable/recored" />

android:id="@+id/stop"

android:layout_width="66dp"

android:layout_height="66dp"

android:scaleType="fitCenter"

android:src="@drawable/stop" />

3.为程序添加相应权限:

4.程序运行预览:

Android MediaRecorder类调用问题,开发视频监控系统的问题,Android系统中录制视频的方法

MeidaRecord要先申请空间,申请不到就录不上

MediaRecorder OnErrorListener 的原因 android 用MediaRecorder 将视频数据录制,发送到远程主机

发一下log。。

http://www.dengb.com/Androidjc/864770.htmlwww.dengb.comtruehttp://www.dengb.com/Androidjc/864770.htmlTechArticleAndroid开发之使用MediaRecorder录制视频,android视频录制 MediaRecorder除了可以用于 录制音频 ,还可用于录制视频。 关于MediaRecorder的详解大家可...

android调用系统录制视频教程,Android开发之使用MediaRecorder录制视频,android视频录制...相关推荐

  1. android 调用系统短信接口开发,聚合数据Android SDK 短信api接口验证演示示例

    1.到libs聚合SDK是聚合数据平台,为移动开发者提供的免费数据接口.使用前请先到聚合平台(http://www.juhe.cn/)注册,申请相关数据. 2.下载聚合数据SDK,将开发包里的smsc ...

  2. android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法

    Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...

  3. Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享

    Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享 标签: Android系统分享QQ分享朋友圈图文分享 2016-09-27 22:54 279人阅读 评论(0) 收藏 举报 ...

  4. android 调用系统播放器

    今天,简单讲讲android如何调用手机自带的播放器. 昨天,从服务器下载一个AVI的视频,下载后需要进行播放,所以想调用系统自带的播放器.但是由于很少用到,所以自己当时不知道怎么写,于是在网上查找资 ...

  5. linux 短信功能,Android调用系统短信功能发送短信

    Android调用系统短信功能发送短信有两种方法: 第一种,设定发送的号码,和内容,界面没有联系人,群组组等按钮,如下图所示: 代码如下: Uri smsToUri = Uri.parse(" ...

  6. android 默认浏览器 视频播放 二维码,Android调用系统默认浏览器访问的方法

    一.启动android默认浏览器 这样子,android就可以调用起手机默认的浏览器访问. 二.指定相应的浏览器访问 1.指定android自带的浏览器访问 ( "com.android.b ...

  7. android系统应用程序,Android调用系统应用程序

    Android调用系统应用程序: 1.直接拨打电话: Intent callIntent = new Intent(Intent.ACTION_CALL, Uri .parse("tel:1 ...

  8. Android调用系统相机拍照并保存到指定位置

    Android调用系统相机拍照并保存到指定位置 @Click(R.id.btn_takePhoto)void onclick() {Intent intent = new Intent(MediaSt ...

  9. Qt Android 调用系统文件管理

    1.了解 使用JNI扩展Qt应用 参考<Qt on Android核心编程>15章 源码https://download.csdn.net/download/dinosaurx/10149 ...

  10. Android 调用系统裁剪,适配11和12及手机

    前言:发现Android 调用系统裁剪时,在各Android 版本出现各种问题,踩了一堆坑,做一下总结,免得以后忘记 后面会有完整裁剪代码 1,一加手机报错 intent.putExtra(" ...

最新文章

  1. pps服务器未响应_服务响应时间与分布
  2. 复杂的数据类型3 - C++快速入门09
  3. spark 应用场景2-身高统计
  4. 【youcans 的 OpenCV 例程 200 篇】110. 投影和雷登变换
  5. 护士资格证延续注册WEB服务调用失败_服务熔断
  6. 动态规划求解所有字符的组合数
  7. python虚拟变量回归_虚拟变量提升多元线性回归模型精度(附Python代码与数据)...
  8. alpha-beta剪枝五子棋c语言,五子棋AI算法第三篇-Alpha Beta剪枝
  9. 联想thinkcentre微型计算机,联想ThinkCentre一体机_ThinkCentre台式机-ThinkPad官网
  10. 第1章 对象入门——Thinking-in-Java
  11. Github搭建免费图床
  12. Java基础概念——变量联系-计算公交车的人数
  13. 筒仓计算表格_小时,速度,筒仓团队和甘特兹
  14. 国内五大最贵的两字母域名
  15. 2022杭电多校5题解报告(同步自语雀)
  16. mac版idea下载(亲测有效)
  17. 《Python笔记》安装(pip)第三方包报错
  18. Leetcode 538 - Convert BST to Greater Tree
  19. TF-IDF 词向量
  20. 推荐一些煲音箱的音乐

热门文章

  1. 字符集和字符集编码详解
  2. Ubuntu 16.04中cartographer安装过程中的troubleshooting,以及demo的实现
  3. Windows10系统右键无法新建文本文档解决方案
  4. 劫持ZwQuerySystemInformation函数实现进程隐藏
  5. HTML内嵌内联外联——它们之间的优先级如何?
  6. ps网页效果图转html,Photoshop制作简洁干净的网页效果图
  7. CSAPP 第三版 第六章 家庭作业and so on
  8. 基于OpenCv+Django的网络实时视频流传输(前后端分离)
  9. 通达信sar源码和分时均价线(结算价)源码
  10. Zookeeper隐藏通道和羊群效应