Skip to content

KSYTextureView

wshichang edited this page Sep 27, 2016 · 24 revisions

KSYTextureView介绍

    KSYTextureView是对KSYMediaPlayer和TextureView进行的封装。在保留KSYMediaPlayer接口的基础上将显示逻辑拿到KSYTextureView内部进行管理,用户无需再对显示再进行处理。同时使用KSYTextureView可以解决之前版本在进行(KSYMediaPlayer+TextureView)硬解播放时,调用播放器接口进行缩放、旋转、截屏无效的问题。

生效版本

v1.5.4及以上版本。

安卓版本要求

Android 4.1(API Level 16)及以上

基本用法

KSYTextureView本质上也是一种View,所以需要首先在your_layout.xml布局中进行声明

    <com.ksyun.media.player.KSYTextureView
        android:id="@+id/ksy_textureview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:targetApi="ice_cream_sandwich"/>

布局完成后就可以在代码中对KSYTextureView 进行相应的调用。KSYTextureView的调用接口与KSYMediaPlayer的调用方式相同,具体可参考KSYMediaPlayer接口调用方式,下面我们对KSYTextureView的主要调用点进行说明:

播放初始化

public class VideoPlayerActivity extends Activity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);

        //不需要再显示的创建mVideoView
        mVideoView = (KSYTextureView) findViewById(R.id.ksy_textureview);
        //设置监听器
        mVideoView.setOnBufferingUpdateListener(mOnBufferingUpdateListener);
        mVideoView.setOnCompletionListener(mOnCompletionListener);
        mVideoView.setOnPreparedListener(mOnPreparedListener);
        mVideoView.setOnInfoListener(mOnInfoListener);
        mVideoView.setOnVideoSizeChangedListener(mOnVideoSizeChangeListener);
        mVideoView.setOnErrorListener(mOnErrorListener);
        mVideoView.setOnSeekCompleteListener(mOnSeekCompletedListener);
        //设置播放参数
        mVideoView.setBufferTimeMax(2.0f);
        mVideoView.setTimeout(5, 30);
        //......
        //(其它调用)
        //......
        //设置播放地址并准备
        mVideoView.setDataSource("http://your_address.flv");
        mVideoView.prepareAsync();
    }
}
    

开始播放

播放器内部完成初始化后会调用OnPreparedListener的onPrepared。所以需要在开始播放之前设置所需的缩放模式,然后调用start开始播放。经过此步之后应该可以在设备上看到你所播放的视频。

private IMediaPlayer.OnPreparedListener mOnPreparedListener = new IMediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(IMediaPlayer mp) {
		if(mVideoView != null) {
			// 设置视频伸缩模式,此模式为裁剪模式
			mVideoView.setVideoScalingMode(KSYMediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
			// 开始播放视频
			mVideoView.start();
		}
	}
}

停止播放

当不想再继续播放时,需要调用stop来停止播放

  private View.OnClickListener mStopButton = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           if(mVideoView != null){
                mVideoView.stop();
           }
        }
  }

再次播放

在开始新的播放之前需要调用reset对播放器进行重置,然后再开始新的播放。

    if (mVideoView != null){
        //当前有视频正在播放,需先停止当前播放
        mVideoView.stop();
        //重置播放
        mVideoView.reset();
        //设置新的播放地址
        mVideoView.setDataSource("http://your_new_address.mp4");
        mVideoView.prepareAsync();
    }

前后台切换

在播放过程中进行前后台切换时需要调用相应的接口:切后台调runInBackground,切回前台调runInForeground。

    @Override
    protected void onPause() {
        super.onPause();
        if (mVideoView != null) {
            //mAudioBackgroundPlay为true表示切换到后台后仍然播放音频
            mVideoView.runInBackground(mAudioBackgroundPlay);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (mVideoView != null) {
            mVideoView.runInForeground();
        }
    }

播放释放

当不再进行播放且要离开所在Activity时,需要调用release将播放释放。注意此调用只有在不再进行播放且离开Activity时才能调用。如果只是停止此次播放以便播放新的视频请参看上面的"再次播放"说明。

    private void videoPlayEnd() {
        if (mVideoView != null) {
            //释放播放器
            mVideoView.release();
            mVideoView = null;
        }
    }

以上就是KSYTextureView的主要调用处理,具体的用法请参考demo的TextureVideoActivity.java文件中的调用。

###KSYTextureView与KSYMediaPlayer接口改动 相比于KSYMediaPlayer的接口KSYTextureView有如下改动: ####去掉接口:

      void setSurface(Surface surface);
      void setDisplay(SurfaceHolder sh)
      void setSurfaceTexture(SurfaceTexture surfTexture);

####新增接口:

     void runInBackground(boolean audioPlay);//audioPlay:true后台音频继续播放 audioPlay:false停止所有播放
     void runInForeground();
Clone this wiki locally