当前位置:操作系统 > 安卓/Android >>

Android播放视频(二)

[java]  
package cn.c;  
import java.io.File;  
import android.app.Activity;  
import android.media.MediaPlayer;  
import android.media.MediaPlayer.OnCompletionListener;  
import android.media.MediaPlayer.OnErrorListener;  
import android.media.MediaPlayer.OnInfoListener;  
import android.media.MediaPlayer.OnPreparedListener;  
import android.media.MediaPlayer.OnSeekCompleteListener;  
import android.media.MediaPlayer.OnVideoSizeChangedListener;  
import android.os.Bundle;  
import android.os.Environment;  
import android.view.Display;  
import android.view.MotionEvent;  
import android.view.Su易做图ceHolder;  
import android.view.Su易做图ceView;  
import android.widget.LinearLayout;  
import android.widget.MediaController;  
import android.widget.MediaController.MediaPlayerControl;  
/** 
 * 参考资料:http://www.embedu.org/Column/Column503.htm 
 * 利用MidiaPlayer播放视频大致的流程: 
 * 创建播放器对象-->设置需要播放的视频的来源--> 
 * 对视频进行解码等准备工作-->开始播放-->(暂停/重启)停止播放 
 * 对应这些流程,在MediaPlayer中都定义了相关方法; 
 * 而且,在调用这些方法后,MediaPlayer可以进入不同的状态. 
 * 这些方法和状态都很好理解,读者可以参照上图来了解. 
 * 另外,因为在设置播放的视频的视频数据源之后,它需要对其进行解码(调用prepare()方法) 
 * 这是一个比较耗时的操作,为了避免应用程序阻止, 
 * 可以使用它的prepareAsync()方法配合OnPreparedListener易做图来让其异步操作. 
 * 注意,只有MediaPlayer的准备工作做完后,才能开始播放 
 
 * MediaPlayer本身不能显示视频内容,它只能控制视频的播放 
 * 如果要使用MediaPlayer来播放视频,还需要配合Su易做图ceView来显示视频 
 * 且将MediaPlayer中解码的视频数据在Su易做图ceView中播放,需要调用MediaPlayer中的setDisplay() 
 * 它接受一个Su易做图ceHolder对象,可将我们用于 
 * 播放视频的Su易做图ceView对应的Su易做图ceHolder对象作为参数 
 * 这样,MediaPlayer和Su易做图ceView就建立起了关联. 
 *  
 * MediaPlayer播放视频步骤 
 * 1 设置MediaPlayer将要播放的视频 
 *   mMediaPlayer.setDataSource(path); 
 * 2 设置MediaPlayer的视频输出界面 
 *   mMediaPlayer.setDisplay(mSu易做图ceHolder); 
 * 3 MediaPlayer解码 
 *   mMediaPlayer.prepareAsync()且结合 
 *   public void onPrepared(MediaPlayer mediaPlayer) 
 * 4 MediaPlayer开始播放 
 *   mediaPlayer.start(); 
 *  
 *  
 */  
  
public class MainActivity extends Activity implements   
OnCompletionListener,OnErrorListener,OnInfoListener,OnPreparedListener,  
OnSeekCompleteListener,OnVideoSizeChangedListener,Su易做图ceHolder.Callback,MediaPlayerControl{  
    private Su易做图ceView mSu易做图ceView;  
    private Su易做图ceHolder mSu易做图ceHolder;  
    private MediaController mMediaController;  
    private Display mDisplay;  
    private MediaPlayer mMediaPlayer;  
    int videoWidth=0;  
    int videoHeight=0;  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        mDisplay=getWindowManager().getDefaultDisplay();  
        mSu易做图ceView=(Su易做图ceView) findViewById(R.id.su易做图ceView);  
        mSu易做图ceHolder=mSu易做图ceView.getHolder();  
        //Su易做图ceHolder是用于管理Su易做图ceView对象  
        //那它是怎么做到管理的呢?即用mSu易做图ceHolder  
        //添加回调即addCallback.  
        //该类实现了Su易做图ceHolder.Callback接口,所以addCallback(this)  
        //在Su易做图ceHolder.Callback接口中一共有三个方法来实现对于  
        //Su易做图ceView对象的管理,即:  
        //su易做图ceCreated()  
        //su易做图ceChanged()  
        //su易做图ceDestroyed()  
        //概况:Su易做图ceHolder主要作用是监控底层的情况  
        mSu易做图ceHolder.addCallback(this);  
        mSu易做图ceHolder.setType(Su易做图ceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
          
        mMediaPlayer=new MediaPlayer();  
        mMediaPlayer.setOnCompletionListener(this);  
        mMediaPlayer.setOnErrorListener(this);  
        mMediaPlayer.setOnInfoListener(this);  
        mMediaPlayer.setOnPreparedListener(this);  
        mMediaPlayer.setOnSeekCompleteListener(this);  
        mMediaPlayer.setOnVideoSizeChangedListener(this);  
        String path=Environment.getExternalStorageDirectory().getPath()  
        +File.separator+"Test_Movie.m4v";  
        try {  
            //设置MediaPlayer将要播放的视频  
            mMediaPlayer.setDataSource(path);  
        } catch (Exception e) {  
            e.printStackTrace();  
            finish();  
        }  
        mMediaController=new MediaController(MainActivity.this);  
    }  
      
    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        if (mMediaController.isShowing()) {  
            mMediaController.hide();  
        } else {  
           mMediaController.show();  
        }  
        return false;  
    }  
      
    //来自于Su易做图ceHolder.Callback接口  
    //创建Su易做图ceView完成时,会调用该方法  
    public void su易做图ceCreated(Su易做图ceHolder holder) {  
        //设置MediaPlayer的视频输出界
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,