Skip to content

KSYVideoView

xinbaicheng edited this page Feb 9, 2017 · 14 revisions

KSYVideoView简介

KSYVideoView封装了SurfaceView与KSYMediaPlayer,接口与KSYMediaPlayer保持一致,但将setSurface和setDisplay两个接口去除,其相关逻辑已移至KSYVideoView内部处理,用户无需再做处理。

KSYVideoView在软解或硬解的情况下均可使用,但硬解暂不支持旋转、镜像、截屏操作(硬解强烈建议使用KSYTextureView)

KSYVideoView实现了SurfaceHolder.Callback并在内部初始化时设置了对应的监听器,用户无需再设置SurfaceHolder.Callback监听

版本要求

v1.6.7及以上版本。

Android版本要求

Android:2.3及以上

KSYVideoView vs KSYTextureView

KSYTextureView与KSYVideoView的功能点对比如下所示,在使用硬解时KSYTextureView有很大优势
如果用户对于Android系统版本并不敏感并且倾向于使用硬解,推荐使用KSYTextureView

功能 KSYVideoView KSYTextureView
系统版本要求 2.3 (API Level 9) 4.1 (API Level 16)
硬解旋转 NO YES
硬解缩放 NO YES
硬解截图 NO YES
硬解播放镜像 NO YES
硬解前后台切换是否黑屏 YES NO

基本用法

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

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

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.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);
Clone this wiki locally