Android錄製視頻(二)

來源:互聯網
上載者:User

mainActivity如下: [java]  package c.c;  import java.io.File;  import java.io.IOException;  import android.app.Activity;  import android.content.pm.ActivityInfo;  import android.media.MediaRecorder;  import android.os.Bundle;  import android.os.Environment;  import android.view.SurfaceHolder;  import android.view.SurfaceView;  import android.view.View;  import android.view.View.OnClickListener;  import android.view.Window;  import android.view.WindowManager;  import android.widget.Button;  /**  * Demo描述:  * 利用SurfaceView拍攝視頻  *   * 注意:  * 1 嚴重注意:MediaRecorder參數的設定.因手機不同而有差異  * 2 在設定MediaRecorder的參數時,應先設定:  *   setVideoSource(),setAudioSource(),setOutputFormat(),setVideoEncoder(),setAudioEncoder  *   然後再設定其餘的參數,查看方法對應的API有提示  *  */  public class MainActivity extends Activity implements SurfaceHolder.Callback{      private Button mStartButton;      private Button mStopButton;      private SurfaceView mSurfaceView;      private SurfaceHolder mSurfaceHolder;      private MediaRecorder mMediaRecorder;      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          // 去掉標題列          requestWindowFeature(Window.FEATURE_NO_TITLE);          // 設定全屏          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,          WindowManager.LayoutParams.FLAG_FULLSCREEN);          // 設定橫屏顯示          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);          setContentView(R.layout.main);          init();      }      private void init(){          mStartButton=(Button) findViewById(R.id.start_button);          mStartButton.setOnClickListener(new ButtonClickListenerImpl());          mStopButton=(Button) findViewById(R.id.stop_button);          mStopButton.setOnClickListener(new ButtonClickListenerImpl());          mSurfaceView=(SurfaceView) findViewById(R.id.surfaceView);          mSurfaceHolder=mSurfaceView.getHolder();          mSurfaceHolder.addCallback(this);          mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);      }      private void initMediaRecorder(){          mMediaRecorder=new MediaRecorder();          //設定視頻源          mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);          //設定音頻源          mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);          //設定檔案輸出格式          mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);          //設定視頻編碼方式          mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);          //設定音頻編碼方式          mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);          //設定視頻高和寬,注意文檔的說明:          //Must be called after setVideoSource().          //Call this after setOutFormat() but before prepare().          //設定錄製的視訊框架率,注意文檔的說明:          //Must be called after setVideoSource().          //Call this after setOutFormat() but before prepare().          mMediaRecorder.setVideoFrameRate(20);          //設定預覽畫面          mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());          //設定輸出路徑          mMediaRecorder.setOutputFile          (Environment.getExternalStorageDirectory()+File.separator+System.currentTimeMillis()+".mp4");                }            private class ButtonClickListenerImpl implements OnClickListener{          public void onClick(View v) {              if (v.getId()==R.id.start_button) {                  try {                      initMediaRecorder();                      mMediaRecorder.prepare();                      mMediaRecorder.start();                  } catch (IllegalStateException e) {                      e.printStackTrace();                  } catch (IOException e) {                      e.printStackTrace();                  }              }               if (v.getId()==R.id.stop_button) {                  if (mMediaRecorder!=null) {                      mMediaRecorder.stop();                      mMediaRecorder.release();                      mMediaRecorder=null;                  }              }          }      }        //SurfaceHolder.Callback介面      public void surfaceCreated(SurfaceHolder holder) {        }      public void surfaceChanged(SurfaceHolder holder, int format, int width,              int height) {                }      public void surfaceDestroyed(SurfaceHolder holder) {                }              }   main.xml如下: [html]   www.2cto.com<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:orientation="vertical" >        <SurfaceView          android:id="@+id/surfaceView"          android:layout_width="fill_parent"          android:layout_height="0dip"          android:layout_weight="1" />        <LinearLayout          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:orientation="horizontal" >            <Button              android:id="@+id/start_button"              android:layout_width="match_parent"              android:layout_height="wrap_content"              android:text="開始"              android:layout_weight="1" />            <Button              android:id="@+id/stop_button"              android:layout_width="match_parent"              android:layout_height="wrap_content"              android:text="停止"              android:layout_weight="1" />      </LinearLayout>    </LinearLayout>      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.