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

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.程序运行预览:

31546439ecaf4b0b72d6b0cd1c04b939.png

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的详解大家可...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值