android调用系统录制视频教程,Android开发之使用MediaRecorder录制视频,android视频录制...
Android開發(fā)之使用MediaRecorder錄制視頻,android視頻錄制
MediaRecorder除了可以用于錄制音頻,還可用于錄制視頻。關(guān)于MediaRecorder的詳解大家可以參考《Android開發(fā)之MediaRecorder類詳解》。使用MediaRecorder錄制視頻與錄制音頻的步驟基本相同。只是錄制視頻時(shí)不僅需要采集聲音,還需要采集圖像。為了讓MediaRecorder錄制時(shí)采集圖像,應(yīng)該在調(diào)用setAudioSource(int
audio source)方法時(shí)再調(diào)用setVideoSource(int video source)方法來設(shè)置圖像來源。
除此之外,還需在調(diào)用setOutputFormat()設(shè)置輸出文件格式之后進(jìn)行如下步驟:
1)調(diào)用MediaRecorder 對象的setVideoEncoder()、setVideoEncodingBitRate(intbitRate)、setVideoFrameRate設(shè)置所錄制的視頻的編碼格式、編碼位率、每秒多少幀等,這些參數(shù)將可以控制所錄制的視頻的品質(zhì)、文件的大小。一般來說,視頻品質(zhì)越好,視頻文件越大。
2)
調(diào)用 MediaRecorder的setPreviewDisplay(Surfacesv)方法設(shè)置使用哪個(gè)SurfaceView來顯示視頻預(yù)覽。
剩下的代碼則與錄制音頻的代碼基本相同:
實(shí)例使用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
{
// 程序中的兩個(gè)按鈕
ImageButton record , stop;
// 系統(tǒng)的視頻文件
File videoFile ;
MediaRecorder mRecorder;
// 顯示視頻預(yù)覽的SurfaceView
SurfaceView sView;
// 記錄是否正在進(jìn)行錄制
private boolean isRecording = false;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 去掉標(biāo)題欄 ,必須放在setContentView之前
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
// 設(shè)置橫屏顯示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 設(shè)置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 選擇支持半透明模式,在有surfaceview的activity中使用。
getWindow().setFormat(PixelFormat.TRANSLUCENT);
// 獲取程序界面中的兩個(gè)按鈕
record = (ImageButton) findViewById(R.id.record);
stop = (ImageButton) findViewById(R.id.stop);
// 讓stop按鈕不可用。
stop.setEnabled(false);
// 為兩個(gè)按鈕的單擊事件綁定監(jiān)聽器
record.setOnClickListener(this);
stop.setOnClickListener(this);
// 獲取程序界面中的SurfaceView
sView = (SurfaceView) this.findViewById(R.id.sView);
// 設(shè)置分辨率
sView.getHolder().setFixedSize(1280, 720);
// 設(shè)置該組件讓屏幕不會(huì)自動(dòng)關(guān)閉
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
{
// 創(chuàng)建保存錄制視頻的視頻文件
videoFile = new File(Environment
.getExternalStorageDirectory()
.getCanonicalFile() + "/testvideo.3gp");
// 創(chuàng)建MediaPlayer對象
mRecorder = new MediaRecorder();
mRecorder.reset();
// 設(shè)置從麥克風(fēng)采集聲音(或來自錄像機(jī)的聲音AudioSource.CAMCORDER)
mRecorder.setAudioSource(MediaRecorder
.AudioSource.MIC);
// 設(shè)置從攝像頭采集圖像
mRecorder.setVideoSource(MediaRecorder
.VideoSource.CAMERA);
// 設(shè)置視頻文件的輸出格式
// 必須在設(shè)置聲音編碼格式、圖像編碼格式之前設(shè)置
mRecorder.setOutputFormat(MediaRecorder
.OutputFormat.THREE_GPP);
// 設(shè)置聲音編碼的格式
mRecorder.setAudioEncoder(MediaRecorder
.AudioEncoder.AMR_NB);
// 設(shè)置圖像編碼的格式
mRecorder.setVideoEncoder(MediaRecorder
.VideoEncoder.H264);
mRecorder.setVideoSize(1280, 720);
// 每秒 4幀
mRecorder.setVideoFrameRate(20);
mRecorder.setOutputFile(videoFile.getAbsolutePath());
// 指定使用SurfaceView來預(yù)覽視頻
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:
// 如果正在進(jìn)行錄制
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.為程序添加相應(yīng)權(quán)限:
4.程序運(yùn)行預(yù)覽:
Android MediaRecorder類調(diào)用問題,開發(fā)視頻監(jiān)控系統(tǒng)的問題,Android系統(tǒng)中錄制視頻的方法
MeidaRecord要先申請空間,申請不到就錄不上
MediaRecorder OnErrorListener 的原因 android 用MediaRecorder 將視頻數(shù)據(jù)錄制,發(fā)送到遠(yuǎn)程主機(jī)
發(fā)一下log。。
http://www.dengb.com/Androidjc/864770.htmlwww.dengb.comtruehttp://www.dengb.com/Androidjc/864770.htmlTechArticleAndroid開發(fā)之使用MediaRecorder錄制視頻,android視頻錄制 MediaRecorder除了可以用于 錄制音頻 ,還可用于錄制視頻。 關(guān)于MediaRecorder的詳解大家可...
總結(jié)
以上是生活随笔為你收集整理的android调用系统录制视频教程,Android开发之使用MediaRecorder录制视频,android视频录制...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: loj6225「网络流 24 题」火星探
- 下一篇: android sina oauth2.