My Photo

« UN-GO 因果論 | Main | Androidアプリ開発メモ042:動画の再生 その2:VideoViewを使用した再生 »

November 24, 2011

Androidアプリ開発メモ041:動画の再生 その1:MediaPlayerを使用した再生

動画を再生する方法として、サウンドと同様にMediaPlayerを使う方法と簡単にVideoViewを使う方法がある。

MediaPlayerによるビデオの再生

オーディオの再生と同じようにMediaPlayerを使ってビデオを再生することができる。
MediaPlayerにデータソースをセットして再生するのは同じだが、動画再生の場合は加えてビデオを表示するビューとしてSurfaceViewを使い、MediaPlayerのインスタンスにsetDisplay()でSurfaceHolder.Callbackインタフェースをセットする必要がある。

android.media.MediaPlayerクラス
public void setDisplay(SurfaceHolder sh)
メディアのビデオ部分を表示するために使用するSurfaceHolderをセットする。

実装例。ただし、AVDではうまく再生されない。音は聞こえるのだが。
実機(Xperia ray)では映像・音ともに再生された。
package com.example.videoplayerexample;

import android.app.Activity;
import android.graphics.PixelFormat;

import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * MediaPlayerを使った動画再生
 */
public class VideoPlayerExample extends Activity
  implements SurfaceHolder.Callback {

  private SurfaceHolder holder;
  private SurfaceView surfaceView;
  private MediaPlayer mMediaPlayer = null;
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    getWindow().setFormat(PixelFormat.TRANSPARENT);  // これがどういう意味を持つのか、必要なのかどうかわからない。transparent[形]透明な
    surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
    holder = surfaceView.getHolder();
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    holder.addCallback(this);
  }

  /**
   * サーフェイス生成時に呼ばれる。
   */
  @Override
  public void surfaceCreated(SurfaceHolder paramSurfaceHolder) {
    try {
      String path = Environment.getExternalStorageDirectory().getPath() + "/DCIM/100ANDRO/MOV_0009.mp4";
      mMediaPlayer = MediaPlayer.create(this, Uri.parse(path));
      mMediaPlayer.setDisplay(holder);
      mMediaPlayer.start();
    } catch (Exception e) {
      android.util.Log.e("", e.toString());
    }
  }

  /**
   * サーフェイス変更時に呼ばれる。
   */
  @Override
  public void surfaceChanged(SurfaceHolder paramSurfaceHolder, int paramInt1,
    int paramInt2, int paramInt3) {
  }

  /**
   * サーフェイス破棄時に呼ばれる。
   */
  @Override
  public void surfaceDestroyed(SurfaceHolder paramSurfaceHolder) {
    if(mMediaPlayer != null){
      mMediaPlayer.release();
      mMediaPlayer = null;
    }
  }
}

参考:動画を再生する方法 MediaPlayer - [サンプルコード/Androidアプリ] ぺんたん info

« UN-GO 因果論 | Main | Androidアプリ開発メモ042:動画の再生 その2:VideoViewを使用した再生 »

Androidアプリ開発」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/53325655

Listed below are links to weblogs that reference Androidアプリ開発メモ041:動画の再生 その1:MediaPlayerを使用した再生:

« UN-GO 因果論 | Main | Androidアプリ開発メモ042:動画の再生 その2:VideoViewを使用した再生 »

April 2017
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof