Android_在线播放mp4/3gp

来源:互联网 发布:淘宝客鹊桥怎么退出 编辑:程序博客网 时间:2024/04/27 16:04
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>

0 0
原创粉丝点击