Skip to content

Trasform_Info

Franken Zeng edited this page Jan 24, 2017 · 33 revisions

3.x到4.0详细迁移说明

阅读详细迁移前,请仔细阅读总体说明

1. 替换SDK

从以下地址中下载4.0的最新版本:

4.0Demo
替换根目录中libs下面相应的so和jar到您的libs目录下面 jar

:如果您在引入jar的时候使用了ksylive3.0.jar的名字,那需要修改jar的名字为ksylive4.0.jar

2. 解决编译错误

替换jar和so后,应该会存在一部分编译错误,下面一一解决各个编译错误

2.1 包名错误

error

包名变更对照表

原始包名 替换包名 备注
com.ksy.recordlib.service
.core.KSYStreamer
com.ksyun.media.streamer
.kit.KSYStreamer
该类负责封装各个积木类,集成了推流所有的操作,后续开放各个积木类,您可以不使用该类,自己搭建积木,该类说明详见KSYStreamer
com.ksy.recordlib.service
.core.KSYStreamerConfig
com.ksyun.media.streamer
.kit.KSYStreamerConfig
推流配置参数类,不建议继续使用该类,可以使用KSYStreamer相应的setXXX接口来替换该类,该类在后期不再维护,如何替换使用参考推流初始化参数
com.ksy.recordlib.service
.stats
.OnLogEventListener
com.ksyun.media.streamer
.logstats.StatsLogReport
.OnLogEventListener
日志回调接口,返回日志上报的信息,该接口的回调函数onLogEvent参数由StringBuffer修改为StringBuilder,参考Demo中CameraActivity中mOnLogListener成员变量
com.ksy.recordlib.service
.stats
.StreamStatusEventHandler
N/A 状态和错误回调类,该类被删除,替换为KSYStreamer.OnInfoListener和KSYStreamer.OnErrorListener mOnErrorListener;详细参考状态和错误回调
com.ksy.recordlib.service
.streamer.RecorderConstants
com.ksyun.media.streamer
.kit.StreamerConstants
常量定义类,在StreamerConstants中没有的定义,建议不要再使用
com.ksy.recordlib.service
.streamer
.OnPreviewFrameListener
com.ksyun.media.streamer
.kit
.OnPreviewFrameListener
该接口用来返回视频的原始数据,该接口还是有效,但是后期不建议您再使用该接口,可以继承ImgTexFilter来创建自己Filter,参考自定义视频滤镜
com.ksy.recordlib.service
.streamer.OnStatusListener
N/A 直接删除,不需要了,之前和这关联的代码,您可以替换成KSYStreamer.OnInfoListener和KSYStreamer.OnErrorListener mOnErrorListener,参考InfoError
com.ksy.recordlib.service
.util.audio
.OnAudioRawDataListener
com.ksyun.media.streamer
.kit
.OnAudioRawDataListener
该接口用来返回音频的原始数据,该接口还是有效,但是后期不建议您再使用,可以继承AudioFilterBase来自定义音频滤镜,详细参考音频滤镜
com.ksy.recordlib.service
.util.audio.KSYBgmPlayer
com.ksyun.media.streamer
.util.audio.KSYBgmPlayer
对于KSYBgmPlayer的使用有所变更,详细参考背景音乐
com.ksy.recordlib.service
.hardware.ksyfilter
.KSYImageFilter
com.ksyun.media.streamer
.filter.imgtex
.ImgTexFilter
视频滤镜基类,详细参考自定义视频滤镜
com.ksy.recordlib.service
.view.CameraGLSurfaceView
N/A 该类被删除,直接使用GLSurfaceView

2.2 接口变更错误

2.2.1 状态错误回调相关接口

以下的错误代码,可以直接删除
4.0状态错误回调参考:状态错误回调 error

2.2.2 日志上报相关接口

KSYStreamer的接口setOnLogListener(mOnLogListener)被删除了,替换为:
StatsLogReport.getInstance().setOnLogEventListener(mOnLogListener)
参考Demo中CameraActivity的mOnLogListener成员变量
log

2.2.3 画中画相关的接口

4.0版本暂时不支持画中画功能,如果您有画中画功能,建议您等下一个版本
如果您要使用4.0,则需要注释所有画中画相关代码。
pip

2.2.4 音频相关接口

  • 音频升降调
    4.0版本暂时不支持音频升降调功能,如果您有该功能,建议您等下一个版本
    audioeffect
  • 美声
    setEnableReverb接口被删除,不建议调用单独的接口再对音频数据进行处理,您需要使用AudioFilterMgt类对音频进行控制。
    详细请参考AudioFilter

2.2.5 停止推流接口

  • 停止推流的接口没有参数了,不需要设置任何参数,在窗口退出的时候不需要再额外调用stopStream
  • 窗口退出的代码参考CameraActivity的onBackoffClick函数
    stop

2.2.6 分辨率设置接口

  • 关于分辨率的设置,原有的四种分辨率设置当前依然支持,只需要把RecorderConstants的地方修改为StreamerConstants使用即可。
  • 通过KSYStreamer的接口可以分别设置预览分辨率和推流分辨率

2.2.7 编码方式设置接口

关于编码方式的设置,Demo中,提供了三种编码方式:

  • 硬编模式(同原有硬编,StreamerConstants.ENCODE_METHOD_HARDWARE)
  • 软编模式 (支持所有GPU滤镜和自定义滤镜,性能较软编兼容模式有明显提升,StreamerConstants.ENCODE_METHOD_SOFTWARE)
  • 软编兼容模式(同原有软编,为了兼容v3.x的软编模式,StreamerConstants.ENCODE_METHOD_SOFTWARE_COMPAT)
         if (mHWButton.isChecked()) {
                        encodeMethod = StreamerConstants.ENCODE_METHOD_HARDWARE;
                    } else if (mSWButton.isChecked()) {
                        encodeMethod = StreamerConstants.ENCODE_METHOD_SOFTWARE;
                    } else {
                        encodeMethod = StreamerConstants.ENCODE_METHOD_SOFTWARE_COMPAT;
                    }

3. 混淆文件变更说明

  • 混淆文件proguard-project.txt,需要将原有关于class com.ksy.recordlib的所有处理都需要删除,只需要添加以下处理即可,参考Demo的proguard-project.txt
-dontskipnonpubliclibraryclassmembers

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-ignorewarnings
-verbose
-dontoptimize
-dontwarn

-keep class com.ksyun.** {
  *;
}

-keep class com.ksy.statlibrary.** {
  *;
}

4. 推流开始参数设置

参考CameraActivity的onCreate函数

        mStreamer = new KSYStreamer(this);  //创建kit实例
        Bundle bundle = getIntent().getExtras();  //获取Demo中DemoActivity的参数
        if (bundle != null) {
            String url = bundle.getString(URL);
            if (!TextUtils.isEmpty(url)) {
                mUrl = url;
                mUrlTextView.setText(mUrl);
                mStreamer.setUrl(url);    //设置推流url
            }

            int frameRate = bundle.getInt(FRAME_RATE, 0);
            if (frameRate > 0) {
                mStreamer.setPreviewFps(frameRate);   //设置预览fps
                mStreamer.setTargetFps(frameRate);    //设置推流fps
            }

            int videoBitrate = bundle.getInt(VIDEO_BITRATE, 0);
            if (videoBitrate > 0) {
                //设置视频采样率
                mStreamer.setVideoKBitrate(videoBitrate * 3 / 4, videoBitrate, videoBitrate / 4);  
            }

            int audioBitrate = bundle.getInt(AUDIO_BITRATE, 0);
            if (audioBitrate > 0) {
                //设置音频采样率
                mStreamer.setAudioKBitrate(audioBitrate);
            }

            int videoResolution = bundle.getInt(VIDEO_RESOLUTION, 0);
            mStreamer.setPreviewResolution(videoResolution); //设置预览分辨率
            mStreamer.setTargetResolution(videoResolution); //设置推流分辨率

            int encode_method = bundle.getInt(ENCDODE_METHOD);
            mStreamer.setEncodeMethod(encode_method); //设置编码方式

            mIsLandscape = bundle.getBoolean(LANDSCAPE, false);
            mStreamer.setRotateDegrees(mIsLandscape ? 90 : 0); //根据横竖屏设置rotateDegrees
            if (mIsLandscape) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            } else {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }

            mAutoStart = bundle.getBoolean(START_ATUO, false);  //是否自动开始推流
            mPrintDebugInfo = bundle.getBoolean(SHOW_DEBUGINFO, false); //是否输出debug信息
        }
        mStreamer.setDisplayPreview(mCameraPreviewView);  //设置GlSurfaceView
        mStreamer.enableDebugLog(true);   //是否允许debug log输出,推流过程中可修改
        mStreamer.setFrontCameraMirror(mFrontMirrorCheckBox.isChecked()); //是否前置摄像头镜像,推流过程中可修改
        mStreamer.setMuteAudio(mMuteCheckBox.isChecked());  //静音,推流过程中可修改
        mStreamer.setEnableAudioPreview(mAudioPreviewCheckBox.isChecked()); //耳返,推流过程中可修改
        mStreamer.setOnInfoListener(mOnInfoListener);//设置状态变更回调
        mStreamer.setOnErrorListener(mOnErrorListener);//设置错误变更回调
        mStreamer.setOnLogEventListener(mOnLogEventListener); //设置日志上报回调接口
        //mStreamer.setOnAudioRawDataListener(mOnAudioRawDataListener);
        //mStreamer.setOnPreviewFrameListener(mOnPreviewFrameListener);
        mStreamer.getImgTexFilterMgt().setFilter(mStreamer.getGLRender(),
                ImgTexFilterMgt.KSY_FILTER_BEAUTY_DENOISE);  //视频滤镜
        mStreamer.setEnableImgBufBeauty(true); //开启美颜
        //滤镜错误回调
        mStreamer.getImgTexFilterMgt().setOnErrorListener(new ImgTexFilterBase.OnErrorListener() {
            @Override
            public void onError(ImgTexFilterBase filter, int errno) {
                Toast.makeText(CameraActivity.this, "当前机型不支持该滤镜",
                        Toast.LENGTH_SHORT).show();
                mStreamer.getImgTexFilterMgt().setFilter(mStreamer.getGLRender(),
                        ImgTexFilterMgt.KSY_FILTER_BEAUTY_DISABLE);
            }
        });

        // touch focus and zoom support
        CameraTouchHelper cameraTouchHelper = new CameraTouchHelper();
        cameraTouchHelper.setCameraCapture(mStreamer.getCameraCapture());
        mCameraPreviewView.setOnTouchListener(cameraTouchHelper);
        // set CameraHintView to show focus rect and zoom ratio
        cameraTouchHelper.setCameraHintView(mCameraHintView);
Clone this wiki locally