Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 第57章、錄制視頻(從零開始學Android)

第57章、錄制視頻(從零開始學Android)

編輯:Android技術基礎

錄制視頻顯然要比音頻復雜點,那麼我們一起看看錄制視頻又該如何做呢?

(1)首先,我們肯定要用到攝像頭,因此需要在Manifest文件中聲明使用權限:

<uses-permission android:name="android.permission.CAMERA" />
(2)其次,還要使用一些硬件屬性,那還要做額外的聲明:

<uses-feature android:name="android.hardware.camera"/>
<uses-feature:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />

(3)第三,當我們在錄制的時候,通常都想要看到我們正在拍什麼,這就需要預覽,而預覽需要在一個SurfaceView上實現。

 

一、設計界面

1、首先把record.png、stop.png兩張圖片復制到res/drawable-hdpi文件夾內。

\

2、布局文件

打開activity_main.xml文件。

輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2.   
  3. <LinearLayout   
  4.     xmlns:android="http://schemas.android.com/apk/res/android"   
  5.     android:orientation="vertical"   
  6.     android:layout_width="fill_parent"   
  7.     android:layout_height="fill_parent">  
  8.   
  9.   
  10.     <ImageButton  
  11.         android:id="@+id/record"  
  12.         android:layout_width="wrap_content"  
  13.         android:layout_height="wrap_content"  
  14.         android:src="@drawable/record" />  
  15.   
  16.     <ImageButton  
  17.         android:id="@+id/stop"  
  18.         android:layout_width="wrap_content"  
  19.         android:layout_height="wrap_content"  
  20.         android:src="@drawable/stop" />  
  21.   
  22.     <SurfaceView  
  23.         android:id="@+id/surfaceview"  
  24.         android:layout_width="300dip"  
  25.         android:layout_height="400dip" />  
  26.       
  27.   
  28. </LinearLayout>  


二、程序文件

打開“src/com.genwoxue.recordvideo/MainActivity.java”文件。

然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.recordvideo;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import android.media.MediaRecorder;  
  6. import android.os.Bundle;  
  7. import android.os.Environment;  
  8. import android.view.SurfaceHolder;  
  9. import android.view.SurfaceView;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.ImageButton;  
  13. import android.app.Activity;  
  14.   
  15.   
  16. public class MainActivity extends Activity {  
  17.   
  18.     private ImageButton btnRecord=null;  
  19.     private ImageButton btnStop=null;  
  20.     private SurfaceView mSurfaceView=null;             
  21.     private SurfaceHolder mSurfaceHolder=null;  
  22.     private MediaRecorder recorder=null;   
  23.       
  24.     private File myRecAudioFile=null;   
  25.     private File dir=null;  
  26.         
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState) {  
  29.          super.onCreate(savedInstanceState);              
  30.          setContentView(R.layout.activity_main);              
  31.          mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview);                 
  32.          mSurfaceHolder = mSurfaceView.getHolder();               
  33.          mSurfaceHolder.setKeepScreenOn(true);  
  34.          mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);               
  35.          btnRecord=(ImageButton)findViewById(R.id.record);              
  36.          btnStop=(ImageButton)findViewById(R.id.stop);              
  37.            
  38.          File defaultDir = Environment.getExternalStorageDirectory();              
  39.          String path = defaultDir.getAbsolutePath()+File.separator+"V"+File.separator;//創建文件夾存放視頻             
  40.          dir = new File(path);              
  41.          if(!dir.exists()){                  
  42.              dir.mkdir();              
  43.              }              
  44.            
  45.          recorder = new MediaRecorder();       
  46.            
  47.          //開始錄制視頻  
  48.          btnRecord.setOnClickListener(new OnClickListener() {                  
  49.              @Override                  
  50.              public void onClick(View v) {                      
  51.                  recorder();                  
  52.             }              
  53.         });                          
  54.            
  55.         //停止錄制視頻  
  56.          btnStop.setOnClickListener(new OnClickListener() {                  
  57.              @Override                  
  58.              public void onClick(View v) {                       
  59.                  recorder.stop();                       
  60.                  recorder.reset();                       
  61.                  recorder.release();                       
  62.                  recorder=null;                  
  63.             }              
  64.         });          
  65.            
  66.      }                      
  67.        
  68.      public void recorder() {              
  69.          try {                  
  70.              myRecAudioFile = File.createTempFile("video", ".3gp",dir);//創建臨時文件                 
  71.              recorder.setPreviewDisplay(mSurfaceHolder.getSurface());//預覽                 
  72.              recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//視頻源                 
  73.              recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //錄音源為麥克風                 
  74.              recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//輸出格式為3gp                  
  75.              recorder.setVideoSize(800, 480);//視頻尺寸                  
  76.              recorder.setVideoFrameRate(15);//視頻幀頻率                  
  77.              recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//視頻編碼                 
  78.              recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音頻編碼                  
  79.              recorder.setMaxDuration(10000);//最大期限                  
  80.              recorder.setOutputFile(myRecAudioFile.getAbsolutePath());//保存路徑                 
  81.              recorder.prepare();                  
  82.              recorder.start();              
  83.         } catch (IOException e) {                  
  84.             e.printStackTrace();              
  85.         }          
  86.     }      
  87.        
  88.   
  89. }  


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved