1. 程式人生 > >android開發 19 呼叫手機的攝像頭錄影,並播放

android開發 19 呼叫手機的攝像頭錄影,並播放

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

我們玩玩手機的錄影功能吧。做個DEMO。

 

 

 

 

 

看看錄製過程:

 

 mediarecorder = new MediaRecorder();// 建立mediarecorder物件

    // 設定錄製視訊源為Camera(相機)     mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);     // 設定錄製完成後視訊的封裝格式THREE_GPP為3gp.MPEG_4為mp4     mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);     // 設定錄製的視訊編碼h263 h264     mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);     // 設定視訊錄製的解析度。必須放在設定編碼和格式的後面,否則報錯     mediarecorder.setVideoSize(176, 144);     // 設定錄製的視訊幀率。必須放在設定編碼和格式的後面,否則報錯     mediarecorder.setVideoFrameRate(20);     mediarecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());     // 設定視訊檔案輸出的路徑     lastFileName = newFileName();     mediarecorder.setOutputFile(lastFileName);     try {     // 準備錄製     mediarecorder.prepare();     // 開始錄製     mediarecorder.start();     } catch (IllegalStateException e) {     // TODO Auto-generated catch block     e.printStackTrace();     } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();     }  

 結束拍攝:

    if (mediarecorder != null) {     // 停止     mediarecorder.stop();     mediarecorder.release();     mediarecorder = null;  

 

 

 

貼出我自己的封裝類:

 

 

    package zyf.demo.moviedemo; 

import java.io.File; 
import java.io.IOException; 
import java.util.Timer; 
import java.util.TimerTask; 

import android.media.MediaRecorder; 
import android.view.SurfaceView; 

public   class MovieRecorder { 
      private MediaRecorder mediarecorder; 
      boolean isRecording; 

      public   void startRecording(SurfaceView surfaceView) { 
        mediarecorder =   new MediaRecorder();  //   建立mediarecorder物件
        
  //   設定錄製視訊源為Camera(相機) 
        mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
          //   設定錄製完成後視訊的封裝格式THREE_GPP為3gp.MPEG_4為mp4 
        mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
          //   設定錄製的視訊編碼h263 h264 
        mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
          //   設定視訊錄製的解析度。必須放在設定編碼和格式的後面,否則報錯 
        mediarecorder.setVideoSize(176, 144); 
          //   設定錄製的視訊幀率。必須放在設定編碼和格式的後面,否則報錯 
        mediarecorder.setVideoFrameRate(20); 
        mediarecorder.setPreviewDisplay(surfaceView.getHolder().getSurface()); 
          //   設定視訊檔案輸出的路徑 
        lastFileName = newFileName(); 
        mediarecorder.setOutputFile(lastFileName); 
          try { 
              //   準備錄製 
            mediarecorder.prepare(); 
              //   開始錄製 
            mediarecorder.start(); 
        }   catch (IllegalStateException e) { 
              //   TODO Auto-generated catch block 
            e.printStackTrace(); 
        }   catch (IOException e) { 
              //   TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
        isRecording =   true
        timeSize = 0; 
        timer =   new Timer(); 
        timer.schedule(  new TimerTask() { 

            @Override 
              public   void run() { 
                  //   TODO Auto-generated method stub 
                timeSize++; 
            } 
        }, 0,1000); 
    } 

    Timer timer; 
      int timeSize = 0; 

      private String lastFileName; 

      public   void stopRecording() { 
          if (mediarecorder !=   null) { 
              //   停止 
            mediarecorder.stop(); 
            mediarecorder.release(); 
            mediarecorder =   null

            timer.cancel(); 
              if (  null != lastFileName && !"".equals(lastFileName)) { 
                File f =   new File(lastFileName); 
                String name = f.getName().substring(0, 
                        f.getName().lastIndexOf(".3gp")); 
                name += "_" + timeSize + "s.3gp"; 
                String newPath = f.getParentFile().getAbsolutePath() + "/" 
                        + name; 
                  if (f.renameTo(  new File(newPath))) { 
                      int i = 0; 
                    i++; 
                } 
            } 
        } 
    } 

      public String newFileName() { 
          try { 
              return File.createTempFile("/mov_", ".3gp").getAbsolutePath(); 
        }   catch (IOException e) { 
              //   TODO Auto-generated catch block 
            e.printStackTrace(); 
              return   null
        } 
    } 

      public   void release() { 
          if (mediarecorder !=   null) { 
              //   停止 
            mediarecorder.stop(); 
            mediarecorder.release(); 
            mediarecorder =   null
        } 
    } }  

  

 

 ----------------

 

那麼同時 我們還會播放它:

 

 public void play(String fileName, SurfaceView view) {

    mPlayer = new MediaPlayer();     mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);     mPlayer.setDisplay(view.getHolder()); // 定義一個SurfaceView播放它           mPlayer.setOnCompletionListener(new OnCompletionListener() {           @Override     public void onCompletion(MediaPlayer arg0) {     stop();           // canvas.drawColor(Color.TRANSPARENT,     // PorterDuff.Mode.CLEAR);     }     });           try {     mPlayer.setDataSource(fileName);     mPlayer.prepare();     } catch (IllegalStateException e) {     // TODO Auto-generated catch block     e.printStackTrace();     } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();     }     mPlayer.start();     }  

 結束播放時:

    public void stop() {     if (mPlayer != null) {     mPlayer.release();     mPlayer = null;     }     }  

 

 

 提供示例程式碼下載

 

------------ 

 

感謝那些分享技術經驗的人。

 

參考:http://blog.csdn.net/peijiangping1989/article/details/7049991 


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述