package
video.demo;
/*
* 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.
*/
import android.app.Activity;
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;
public 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 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.mediaplayer_2);
mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback( this );
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
private void playVideo() {
doCleanUp();
try {
/*
* 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 = " http://www.androidbook.com/akc/filestorage/android/documentfiles/3389/movie.mp4 " ;
path = " http://forum.ea3w.com/coll_ea3w/attach/2008_10/12237832415.3gp " ;
// 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();
}
@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();
}
}
/*
* 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.
*/
import android.app.Activity;
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;
public 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 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.mediaplayer_2);
mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback( this );
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
private void playVideo() {
doCleanUp();
try {
/*
* 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 = " http://www.androidbook.com/akc/filestorage/android/documentfiles/3389/movie.mp4 " ;
path = " http://forum.ea3w.com/coll_ea3w/attach/2008_10/12237832415.3gp " ;
// 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();
}
@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();
}
}
<?
xml version="1.0" encoding="utf-8"
?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical"
android:layout_width ="fill_parent"
android:layout_height ="fill_parent" >
< SurfaceView android:id ="@+id/surface"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_gravity ="center" >
</ SurfaceView >
</ LinearLayout >
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical"
android:layout_width ="fill_parent"
android:layout_height ="fill_parent" >
< SurfaceView android:id ="@+id/surface"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_gravity ="center" >
</ SurfaceView >
</ LinearLayout >