Using MediaPlayer to play Video and Audio : MediaPlayer « Media « Android






Using MediaPlayer to play Video and Audio

   
/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.media;

import android.app.Activity;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnVideoSizeChangedListener;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

class MediaPlayerDemo_Audio extends Activity {

  private static final String TAG = "MediaPlayerDemo";
  private MediaPlayer mMediaPlayer;
  private static final String MEDIA = "media";
  private static final int LOCAL_AUDIO = 1;
  private static final int STREAM_AUDIO = 2;
  private static final int RESOURCES_AUDIO = 3;
  private static final int LOCAL_VIDEO = 4;
  private static final int STREAM_VIDEO = 5;
  private String path;

  private TextView tx;

  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    tx = new TextView(this);
    setContentView(tx);
    Bundle extras = getIntent().getExtras();
    playAudio(extras.getInt(MEDIA));
  }

  private void playAudio(Integer media) {
    try {
      switch (media) {
      case LOCAL_AUDIO:
        /**
         * TODO: Set the path variable to a local audio file path.
         */
        path = "";
        if (path == "") {
          // Tell the user to provide an audio file URL.
          Toast.makeText(
              MediaPlayerDemo_Audio.this,
              "Please edit MediaPlayer_Audio Activity, "
                  + "and set the path variable to your audio file path."
                  + " Your audio file must be stored on sdcard.",
              Toast.LENGTH_LONG).show();

        }
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setDataSource(path);
        mMediaPlayer.prepare();
        mMediaPlayer.start();
        break;
      case RESOURCES_AUDIO:
        /**
         * TODO: Upload a audio file to res/raw folder and provide its
         * resid in MediaPlayer.create() method.
         */
        mMediaPlayer = MediaPlayer.create(this, R.raw.test_cbr);//test_cbr.mp3
        mMediaPlayer.start();

      }
      tx.setText("Playing audio...");

    } catch (Exception e) {
      Log.e(TAG, "error: " + e.getMessage(), e);
    }

  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    // TODO Auto-generated method stub
    if (mMediaPlayer != null) {
      mMediaPlayer.release();
      mMediaPlayer = null;
    }

  }
}

class MediaPlayerDemo_Video extends Activity implements
    OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener,
    OnVideoSizeChangedListener, SurfaceHolder.Callback {

  private static final String TAG = "MediaPlayerDemo";
  private int mVideoWidth;
  private int mVideoHeight;
  private MediaPlayer mMediaPlayer;
  private SurfaceView mPreview;
  private SurfaceHolder holder;
  private String path;
  private Bundle extras;
  private static final String MEDIA = "media";
  private static final int LOCAL_AUDIO = 1;
  private static final int STREAM_AUDIO = 2;
  private static final int RESOURCES_AUDIO = 3;
  private static final int LOCAL_VIDEO = 4;
  private static final int STREAM_VIDEO = 5;
  private boolean mIsVideoSizeKnown = false;
  private boolean mIsVideoReadyToBePlayed = false;

  /**
   * 
   * Called when the activity is first created.
   */
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.row);
    mPreview = (SurfaceView) findViewById(R.id.surface);
    holder = mPreview.getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    extras = getIntent().getExtras();

  }

  private void playVideo(Integer Media) {
    doCleanUp();
    try {

      switch (Media) {
      case LOCAL_VIDEO:
        /*
         * TODO: Set the path variable to a local media file path.
         */
        path = "";
        if (path == "") {
          // Tell the user to provide a media file URL.
          Toast.makeText(
              MediaPlayerDemo_Video.this,
              "Please edit MediaPlayerDemo_Video Activity, "
                  + "and set the path variable to your media file path."
                  + " Your media file must be stored on sdcard.",
              Toast.LENGTH_LONG).show();

        }
        break;
      case STREAM_VIDEO:
        /*
         * TODO: Set path variable to progressive streamable mp4 or 3gpp
         * format URL. Http protocol should be used. Mediaplayer can
         * only play "progressive streamable contents" which basically
         * means: 1. the movie atom has to precede all the media data
         * atoms. 2. The clip has to be reasonably interleaved.
         */
        path = "";
        if (path == "") {
          // Tell the user to provide a media file URL.
          Toast.makeText(
              MediaPlayerDemo_Video.this,
              "Please edit MediaPlayerDemo_Video Activity,"
                  + " and set the path variable to your media file URL.",
              Toast.LENGTH_LONG).show();

        }

        break;

      }

      // Create a new media player and set the listeners
      mMediaPlayer = new MediaPlayer();
      mMediaPlayer.setDataSource(path);
      mMediaPlayer.setDisplay(holder);
      mMediaPlayer.prepare();
      mMediaPlayer.setOnBufferingUpdateListener(this);
      mMediaPlayer.setOnCompletionListener(this);
      mMediaPlayer.setOnPreparedListener(this);
      mMediaPlayer.setOnVideoSizeChangedListener(this);
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    } catch (Exception e) {
      Log.e(TAG, "error: " + e.getMessage(), e);
    }
  }

  public void onBufferingUpdate(MediaPlayer arg0, int percent) {
    Log.d(TAG, "onBufferingUpdate percent:" + percent);

  }

  public void onCompletion(MediaPlayer arg0) {
    Log.d(TAG, "onCompletion called");
  }

  public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
    Log.v(TAG, "onVideoSizeChanged called");
    if (width == 0 || height == 0) {
      Log.e(TAG, "invalid video width(" + width + ") or height(" + height
          + ")");
      return;
    }
    mIsVideoSizeKnown = true;
    mVideoWidth = width;
    mVideoHeight = height;
    if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
      startVideoPlayback();
    }
  }

  public void onPrepared(MediaPlayer mediaplayer) {
    Log.d(TAG, "onPrepared called");
    mIsVideoReadyToBePlayed = true;
    if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
      startVideoPlayback();
    }
  }

  public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
    Log.d(TAG, "surfaceChanged called");

  }

  public void surfaceDestroyed(SurfaceHolder surfaceholder) {
    Log.d(TAG, "surfaceDestroyed called");
  }

  public void surfaceCreated(SurfaceHolder holder) {
    Log.d(TAG, "surfaceCreated called");
    playVideo(extras.getInt(MEDIA));

  }

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

  @Override
  protected void onDestroy() {
    super.onDestroy();
    releaseMediaPlayer();
    doCleanUp();
  }

  private void releaseMediaPlayer() {
    if (mMediaPlayer != null) {
      mMediaPlayer.release();
      mMediaPlayer = null;
    }
  }

  private void doCleanUp() {
    mVideoWidth = 0;
    mVideoHeight = 0;
    mIsVideoReadyToBePlayed = false;
    mIsVideoSizeKnown = false;
  }

  private void startVideoPlayback() {
    Log.v(TAG, "startVideoPlayback");
    holder.setFixedSize(mVideoWidth, mVideoHeight);
    mMediaPlayer.start();
  }
}

public class Test extends Activity {
  private Button mlocalvideo;
  private Button mresourcesvideo;
  private Button mstreamvideo;
  private Button mlocalaudio;
  private Button mresourcesaudio;
  private Button mstreamaudio;
  private static final String MEDIA = "media";
  private static final int LOCAL_AUDIO = 1;
  private static final int STREAM_AUDIO = 2;
  private static final int RESOURCES_AUDIO = 3;
  private static final int LOCAL_VIDEO = 4;
  private static final int STREAM_VIDEO = 5;
  private static final int RESOURCES_VIDEO = 6;

  @Override
  protected void onCreate(Bundle icicle) {
    // TODO Auto-generated method stub
    super.onCreate(icicle);
    setContentView(R.layout.main);
    mlocalaudio = (Button) findViewById(R.id.localaudio);
    mlocalaudio.setOnClickListener(mLocalAudioListener);
    mresourcesaudio = (Button) findViewById(R.id.resourcesaudio);
    mresourcesaudio.setOnClickListener(mResourcesAudioListener);

    mlocalvideo = (Button) findViewById(R.id.localvideo);
    mlocalvideo.setOnClickListener(mLocalVideoListener);
    mstreamvideo = (Button) findViewById(R.id.streamvideo);
    mstreamvideo.setOnClickListener(mStreamVideoListener);
  }

  private OnClickListener mLocalAudioListener = new OnClickListener() {
    public void onClick(View v) {
      Intent intent = new Intent(Test.this.getApplication(),
          MediaPlayerDemo_Audio.class);
      intent.putExtra(MEDIA, LOCAL_AUDIO);
      startActivity(intent);

    }
  };
  private OnClickListener mResourcesAudioListener = new OnClickListener() {
    public void onClick(View v) {
      Intent intent = new Intent(Test.this.getApplication(),
          MediaPlayerDemo_Audio.class);
      intent.putExtra(MEDIA, RESOURCES_AUDIO);
      startActivity(intent);

    }
  };

  private OnClickListener mLocalVideoListener = new OnClickListener() {
    public void onClick(View v) {
      Intent intent = new Intent(Test.this,
          MediaPlayerDemo_Video.class);
      intent.putExtra(MEDIA, LOCAL_VIDEO);
      startActivity(intent);

    }
  };
  private OnClickListener mStreamVideoListener = new OnClickListener() {
    public void onClick(View v) {
      Intent intent = new Intent(Test.this,
          MediaPlayerDemo_Video.class);
      intent.putExtra(MEDIA, STREAM_VIDEO);
      startActivity(intent);

    }
  };

}
//main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <Button android:id="@+id/localvideo"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:text="local_video" 
    />
    
    <Button android:id="@+id/streamvideo"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:text="stream_video" 
    />
    
    <Button android:id="@+id/localaudio"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:text="local_audio" 
    />
    
    <Button android:id="@+id/resourcesaudio"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:text="res_audio" 
    />
    
</LinearLayout>


//row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SurfaceView android:id="@+id/surface"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">
    </SurfaceView>
  
</LinearLayout>

   
    
    
  








Related examples in the same category

1.Using MediaPlayer to play MP3 file
2.MediaPlayer and Text to Speech
3.Load mp3 file with MediaPlayer and play
4.Call prepare for MediaPlayer before starting
5.Set URL data source for MediaPlayer
6.Audio MediaPlayer Demo
7.extends MediaPlayer
8.MediaPlayer create and start
9.Multi PlayMixer
10.Play movie.m4v file
11.Using Service to play media file