Skip to content

KSYVideoView

wshichang edited this page Nov 28, 2016 · 14 revisions

KSYVideoView简介

KSYVideoView继承了SurfaceView并对KSYMediaPlayer进行封装,接口与KSYMediaPlayer保持一致,但将setSurface和setDisplay两个接口去除,其相关逻辑已移至KSYVideoView内部处理,用户无需再做处理。
KSYVideoView在软解或硬解的情况下均可使用,但硬解暂不支持旋转、镜像、截屏操作(硬解强烈建议使用KSYTextureView)
KSYVideoView继承了SurfaceHolder.Callback并在内部初始化时设置了对应的监听器,用户无需再设置SurfaceHolder.Callback监听

版本要求

v1.6.6及以上版本。

Android版本要求

Android:2.3及以上

基本用法

首先需在你的布局中添加KSYVideoView

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

KSYVideoView的调用接口与KSYMediaPlayer的调用方式相同,具体可参考KSYMediaPlayer接口调用方式,下面我们对KSYVideoView的主要调用点进行说明:

初始化

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

            //不需要再显式的创建mVideoView
            mVideoView = (KSYVideoView) findViewById(R.id.ksy_videoview);
            //设置监听器
            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对播放器进行重置,然后再开始新的播放。需要注意的是reset后之前设置的播放参数都会被重置,所以reset后需要重新设置播放参数。

    if (mVideoView != null){
        //当前有视频正在播放,需先停止当前播放
        mVideoView.stop();
        //重置播放
        mVideoView.reset();
        //重新设置播放参数
        mVideoView.setBufferTimeMax(2.0f);
        mVideoView.setTimeout(5, 30);
        mVideoView.setRotateDegree(90);
        //......
        //(其它参数设置)
        //......
        //设置新的播放地址
        mVideoView.setDataSource("http://your_new_address.mp4");
        mVideoView.prepareAsync();
    }

播放释放

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

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

以上就是KSYVideoView的主要调用处理。

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

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

###其它 ####KSYVideoView VS KSYTextureView KSYVideoView 可以理解为:KSYMediaPlayer+SurfaceView
KSYTextureView 可以理解为:KSYMediaPlayer+TextureView
故可知KSYTextureView当主线程有明显阻塞时会影响画面显示,而KSYVideoView不存在(具体原因请自行搜索SurfaceView与TextureView的差别)。但KSYTextureView在硬解时能够很好的支持旋转、缩放、截屏、镜像等功能。KSYTextureView的功能性要优于KSYVideoView,KSYVideoView只是作为KSYTextureView在android低版本上的补充。KSYTextureView主线程阻塞影响显示的问题,只要用户处理逻辑这个问题也是可以解决的。所以我们更建议使用KSYTextureView。

Clone this wiki locally