android在线播放mp4/3gp

 
  
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();
}
}
 
  
<? 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 >

转载于:https://www.cnblogs.com/pen-ink/archive/2011/01/27/1946063.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值