97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠(yuǎn)見教育科技集團(tuán) >> 新聞動態(tài) >> Android資料 >> Android開發(fā)之MediaPlayer視頻播放實(shí)例  
 
Android開發(fā)之MediaPlayer視頻播放實(shí)例
分享到:

本示例“MediaPlayerVideo.java”主要功能是播放視頻文件,因讀取視頻文件的來源不同,現(xiàn)設(shè)置一個文本框來顯示其來源,如表1所示。

表1 MediaPlayerVideo.java文本框顯示

文件來源 文本框顯示
從源文件中播放 LOCAL_VIDEO-播放音樂中...
從文件系統(tǒng)中播放 RESOURCES_ VIDEO-播放音樂中...
從網(wǎng)絡(luò)中播放 STREAM_ VIDEO-播放音樂中...

播放視頻文件前,要確認(rèn)是否已進(jìn)入Prepared狀態(tài)和讀入視頻文件,取得播放視頻的長度。為了確認(rèn)這兩件事情的同步完成時刻,首先要實(shí)現(xiàn)onPrepared()和onVideoSizeChanged()方法的監(jiān)聽功能,管理兩個事件的同步完成時刻變量mIsVideoReadyToBePlayed 和mIsVideoSizeKnown,當(dāng)onPrepard()方法被執(zhí)行時,會設(shè)置變量mIsVideoReadyToBePlayed為true,由Initialized狀態(tài)進(jìn)入Prepared狀態(tài);當(dāng)onVideoSizeChanged()方法執(zhí)行時,會設(shè)置變量mIsVideoSizeKnown為true,取得播放視頻的長度。當(dāng)變量mIsVideoReadyToBePlayed 和mIsVideoSizeKnown都為true時,調(diào)用startVideoPlayback()方法,設(shè)置好播放視頻的長度,再開始播放。

代碼清單1 MediaPlayerAudio.java


package cn.com.farsight.media;

    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;
    import android.widget.TextView;
    import android.widget.Toast;

    public class MediaPlayerVideo 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 TextView mTextView;
        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 static final int RESOURCES_VIDEO = 6;
        private boolean mIsVideoSizeKnown = false;
        private boolean mIsVideoReadyToBePlayed = false;
        //MediaPlayerVideo程序
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mediaplayer01);
            mTextView = (TextView) findViewById(R.id.TextView01);
            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:
                    //設(shè)定視頻文件路徑
                    path = "/sdcard/navy.3gp";//測試用的視頻文件
                    //path = "";
                    if (path == "") {
                        //警告User尚未建立視頻文件
                        Toast.makeText(MediaPlayerVideo.this, "尚未建立視頻文件",Toast.LENGTH_LONG).show();
                    }
                    mTextView.setText("LOCAL_VIDEO-播放視頻中...");
                    break;
                    case STREAM_VIDEO:
                    //警告User尚未建立視頻文件的URL.
                    path = " //www.yinyuetai.com/video/307729 ";//測試用的視頻文件
                    //path = "";
                    if (path == "") {
                        //警告User尚未建立視頻文件的URL.
                        Toast.makeText(MediaPlayerVideo.this,"Please edit MediaPlayerDemo_
                        Video Activity and set the path variable to your media file URL.",Toast.LENGTH_LONG).show();
                    }
                    mTextView.setText("STREAM_VIDEO-播放視頻中...");
                    break;
                    case RESOURCES_VIDEO:
                    //本地視頻文件要放在/res/raw目錄內(nèi)且提供resid給MediaPlayer.create()
                    //mMediaPlayer = new MediaPlayer();
                    //mMediaPlayer.setDataSource("/sdcard/navy.3gp");
                    mMediaPlayer = MediaPlayer.create(this, R.raw.navy);
                    //執(zhí)行create()時,會調(diào)用prepare()
                    mMediaPlayer.setDisplay(holder);
                    //mMediaPlayer.prepare();
                    mMediaPlayer.setOnBufferingUpdateListener(this);
                    mMediaPlayer.setOnCompletionListener(this);
                    mMediaPlayer.setOnPreparedListener(this);
                    mMediaPlayer.setOnVideoSizeChangedListener(this);
                    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mMediaPlayer.start();
                    mTextView.setText("RESOURCES_VIDEO-播放視頻中... ");
                    break;
                }
                //實(shí)例化MedialPlayer且設(shè)定監(jiān)聽功能
                if (Media == LOCAL_VIDEO || Media == STREAM_VIDEO) {
                    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);
            }
        }
        //onBufferingUpdate
        public void onBufferingUpdate(MediaPlayer arg0, int percent) {
            Log.d(TAG, "onBufferingUpdate percent: " + percent);
        }
        //onCompletion
        public void onCompletion(MediaPlayer arg0) {
            Log.d(TAG, "onCompletion called");
        }
        //onVideoSizeChanged
        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
            Log.v(TAG, "onVideoSizeChanged called");
            Toast.makeText(MediaPlayerVideo.this, "onVideoSizeChanged called",Toast.LENGTH_
            LONG).show();
            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();
            }
        }
        //onPrepared
        public void onPrepared(MediaPlayer mediaplayer) {
            Log.d(TAG, "onPrepared called");
            Toast.makeText(MediaPlayerVideo.this, "onPrepared called",Toast.LENGTH_LONG).
            show();
            mIsVideoReadyToBePlayed = true;
            if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
                startVideoPlayback();
            }
        }
        //surfaceChanged
        public void surfaceChanged(SurfaceHolder surfaceholder, int I, int j, int k) {
            Log.d(TAG, "surfaceChanged called");
        }
        //surfaceDestroyed
        public void surfaceDestroyed(SurfaceHolder surfaceholder) {
            Log.d(TAG, "surfaceDestroyed called");
        }
        //調(diào)用playVideo(),播放視頻
        public void surfaceCreated(SurfaceHolder holder) {
            Log.d(TAG, "surfaceCreated called");
            playVideo(extras.getInt(MEDIA));
        }
        //onPause
        @Override
        protected void onPause() {
            super.onPause();
            releaseMediaPlayer();
            doCleanUp();
        }
        //關(guān)閉MediaPlayerVideo程序且釋放MediaPlayer
        @Override
        protected void onDestroy() {
            super.onDestroy();
            releaseMediaPlayer();
            doCleanUp();
        }
        //releaseMediaPlayer
        private void releaseMediaPlayer() {
            if (mMediaPlayer != null) {
                mMediaPlayer.release();
                mMediaPlayer = null;
            }
        }
        //doCleanUp
        private void doCleanUp() {
            mVideoWidth = 0;
            mVideoHeight = 0;
            mIsVideoReadyToBePlayed = false;
            mIsVideoSizeKnown = false;
        }
        //startVideoPlayback
        private void startVideoPlayback() {
            Log.v(TAG, "startVideoPlayback");
            Toast.makeText(MediaPlayerVideo.this, "startVideoPlayback()",Toast.LENGTH_LONG).show();
            holder.setFixedSize(mVideoWidth, mVideoHeight);
            mMediaPlayer.start();
        }
    }

 更多相關(guān)文章

·Android開發(fā)之MediaPlayer音頻播放實(shí)例
·Android開發(fā)之MediaPlayer音頻視頻播放
·Android基于MediaPlayer的視頻播放
·解讀Android MediaPlayer 詳細(xì)使用方法
·Android系統(tǒng)提供內(nèi)置的媒體格式