现在的位置: 首页 > 综合 > 正文

视频播放器相关知识点

2018年06月09日 ⁄ 综合 ⁄ 共 4368字 ⁄ 字号 评论关闭

一、界面相关:视频播放器的加载
1、播放视频主界面是个activity
public class VideoPlayerActivity extends Activity
2、在其onCreate函数里:setContentView(R.layout.main);加载主布局文件main.xml

<?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"
    android:gravity="center"
    android:background="@color/background">
    <!-- 播放主界面 -->
	<com.guo.videoplayer.VideoView
		android:id="@+id/vv"  
	    android:layout_width="fill_parent" 
	    android:layout_height="fill_parent" 
    />
</LinearLayout>

布局文件就一个视频播放视图,该视图是我们自己定义的一个SurfaceView类

3、视频播放视图

public class VideoView extends SurfaceView implements MediaPlayerControl

该类中定义媒体播放器:private MediaPlayer mMediaPlayer

该播放器在视图创建时通过mMediaPlayer.setDisplay(mSurfaceHolder),这个函数绑定该SurfaceView

实际上是在主界面activity创建时,加载了视图播放器

二、界面相关:播放控制界面的加载

1、播放控制界面用弹出窗口:PopupWindow:弹出窗口可以浮动显示在播放界面的上层,而不影响主界面的焦点。

2、播放控制界面的布局文件:略

3、让布局文件显示在弹出窗口中:在onCreate函数中实现下面代码:

//根据布局文件膨胀出控制条视图
        controlView = getLayoutInflater().inflate(R.layout.controler, null);
        //用布局文件视图构造弹出窗口:使控制视图在弹出窗口中显示
        controler = new PopupWindow(controlView);

4、显示播放控制弹出窗口:

//第一个参数是弹窗父控件的布局;
//第二个参数是在父控件的位置如左,右,上部,下部等
//第三、四个参数是X、y方向的偏移量
//这个函数类型AlsertDialog的show()函数
controler.showAtLocation(vv, Gravity.BOTTOM, 0, 0);
//更新控制的位置
controler.update(0, 0, screenWidth, controlHeight);
三、界面相关:播放控制界面的显示和隐藏
1、程序启动后的显示,在onCreate函数中实现:程序启动后,因为要有很多前期准备工作,所以不能直接显示。

2、添加一个空闲处理器,当空闲的时候处理,代码如下:

//每个主线程中内含一个Looper,和它的消息对了Looper.myQueue();
//添加idle处理器:在Looper的消息队列里添加一个空闲处理器,当空闲的时候处理
Looper.myQueue().addIdleHandler(new IdleHandler()
{
    //当前消息队列中的所体验消息都执行完调用
		@Override
		public boolean queueIdle() 
		{				
			//显示播放控制窗口
			if(controler != null && vv.isShown())
			{
					controler.showAtLocation(vv, Gravity.BOTTOM, 0, 0);
					controler.update(0, 0, screenWidth, controlHeight);
			}
				//返回false将使该handler调用一次之后被移除
				return false;  
		}
});  

3、如果程序启动后,没有播放界面则不会隐藏,当播放时,则延迟隐藏控制栏,使播放界面更友好

流程如下:

    1:点击播放列表,执行//显示视频播放列表
     VideoPlayerActivity.this.startActivityForResult(intent, 0); 

     2:在onActivityResult函数里接收结果,然后调用VideoView的setVideoPath函数,该函数调用 打开视频函数openVideo();

     3:openVideo():进行播放器的初始化工作:创建该视频播放器、设置播放器在该视图中显示、设置它的监听器

           执行流程:mMediaPlayer.prepareAsync()-》调用MediaPlayer.OnPreparedListener监听器的onPrepared函数-》

          调用VideoView这个类的mOnPreparedListener.onPrepared(mMediaPlayer);这个类的监听函数在主activity类中定义:      

//当媒体文件载入时调用     
        vv.setOnPreparedListener(new OnPreparedListener()
        {
				@Override
				public void onPrepared(MediaPlayer arg0) 
				{
					//设置视频播放尺寸					
					setVideoScale(SCREEN_DEFAULT);
					//默认尺寸播放
					isFullScreen = false; 
					if(isControllerShow)
					{
						showController();  
					}
					//获得视频持续时间
					int i = vv.getDuration();
					seekBar.setMax(i);
					i/=1000;
					int minute = i/60;
					int hour = minute/60;
					int second = i%60;
					minute %= 60;
					//显示视频持续时间
					durationTextView.setText(String.format("%02d:%02d:%02d", hour,minute,second));					
					vv.start();  
					bn3.setImageResource(R.drawable.pause);
					hideControllerDelay();
					myHandler.sendEmptyMessage(PROGRESS_CHANGED);
				}	
	        });

对播放界面进行一些初始化工作,并通过hideControllerDelay();函数隐藏播放控制界面。
4、以后的各种显示、隐藏的控制只要调用showController()和hideControllerDelay()这两个函数即可。

四、主activity:VideoPlayerActivity如果获取VideoView视图里的媒体播放器mMediaPlayer的监听事件的:

在VideoView里的mMediaPlayer事件监听器:

//设置准备监听器
mMediaPlayer.setOnPreparedListener(mPreparedListener);
//设置播放完成监听器
mMediaPlayer.setOnCompletionListener(mCompletionListener);

//媒体播放器准备监听器:当播放器调用了prepare()或prepareAsync()函数时调用
MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener()
{
    public void onPrepared(MediaPlayer mp) 
    {      
      mOnPreparedListener.onPrepared(mMediaPlayer);
    }
};
//播放完毕监听器时调用
MediaPlayer.OnCompletionListener mCompletionListener new MediaPlayer.OnCompletionListener() 
{  
   public void onCompletion(MediaPlayer mp) 
   {       	     	
      mOnCompletionListener.onCompletion(mMediaPlayer);
   }
}; 

 

//设置准备监听器
    public void setOnPreparedListener(MediaPlayer.OnPreparedListener l)
    {
        mOnPreparedListener = l;
    }
    //设置播放完毕监听器
    public void setOnCompletionListener(OnCompletionListener l)
    {
        mOnCompletionListener = l;
    }

在VideoPlayerActivity里的onCreate函数里调用VidioView的设置监听器函数,设置VidioView里的mOnCompletionListener的onPrepared函数

//当媒体文件载入时调用     
vv.setOnPreparedListener(new OnPreparedListener()
{
		@Override
		public void onPrepared(MediaPlayer arg0) 
		{
		}
} )   

//视频播放完毕调用
vv.setOnCompletionListener(new OnCompletionListener()
{       		
   @Override
	 public void onCompletion(MediaPlayer arg0) 
	 {
	 }
})

总结调用过程:媒体播放器的监听函数-》调应mOnCompletionListener对象的监听函数-》主activity实现mOnCompletionListener对象的监听函数

五、主activity对媒体播放器的控制

1、activity->VideoView->mMediaPlayer

2、函数控制:主activity通过调用VideoView函数,VideoView函数调用mMediaPlayer实现控制。

3、监听器控制:主activity通过调用VideoView函数设置事件监听器函数如:mOnCompletionListener对象的监听函数,而这个监听器函数,在VideoView的mMediaPlayer的监听函数里调用。
 

抱歉!评论已关闭.