◆ 動画を録画する

「タピア」を使用して動画を録画することができます。AndroidのAPIを使用します。

◆◇◆◇◆サンプルコード:TAPIAから動画を録画します◆◇◆◇◆

1) ボタンを追加する

サンプルコード「0.ボタンを追加する」を参考に作成します

2) Activityに以下処理を追加する

//ビデオ録画する
public class _Video2Activity extends TapiaActivity implements SurfaceHolder.Callback {

    private MediaRecorder mRecorder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_takephoto);
        //「activity_takephoto」のサーフェイスを使用する
        SurfaceView surfaceView = (SurfaceView) findViewById(R.id.previewView);

        findViewById(R.id.no).setVisibility(View.VISIBLE);
        SurfaceHolder v_holder = surfaceView.getHolder();
        v_holder.addCallback(this);

    //「no」ボタンを押すと録画が停止して終了する
    findViewById(R.id.no).setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            // 録画を停止
            mRecorder.stop();
            mRecorder.reset();
            // 使わなくなった時点でレコーダーリソースを解放する
            mRecorder.release();
            //終了する
            finish();
        }
    });
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

        mRecorder = new MediaRecorder();
        // ビデオ入力ソースをカメラに設定
        mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        // 記録フォーマットをMPEG-4に設定
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        // ビデオコーデックをMPEG-4 SPに設定
        mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        // プレビューに使用するサーフェスを設定
        mRecorder.setPreviewDisplay(holder.getSurface());
        // 出力ファイルのパスを任意に指定
        String filePath = Environment.getExternalStorageDirectory().toString() + "/Movies/video1.mp4";//本体に保存
        mRecorder.setOutputFile(filePath);

        try {
            // レコーダーを準備
            mRecorder.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 録画を開始
        mRecorder.start();
    }

    @Override
    // サーフェスの状態が変化したら呼ばれる
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    }
    @Override
    // サーフェスが破棄されると呼ばれる
    public void surfaceDestroyed(SurfaceHolder holder) {
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}