版本更新说明 for v4.0.0

由于Adoble 计划从2020年底停止支持Flash,PC端新增H5相关播放器实现;

SaaS SDK 新增VSS组件以支持H5相关播放功能;

VSS SDK 为处理业务层操作独立封装的组件库,需添加业务处理所需三方库如下;

    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.alibaba:fastjson:1.2.47'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    implementation "io.reactivex.rxjava2:rxjava:2.2.6"
    implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'

新增权限配置

    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

房间类型识别

初始化房间信息返回的WebinarInfo 中的vss_token 字段为唯一识别依据,如果vss_token 有值且非"" 则代表当前房间为H5房间,需配合PresenterVss实现房间内控制逻辑

UI层变更

关于presenter的变更

新增基于VSS实现的PresenterVss,开发者可根据后端发起房间类型使用情况自行选择同时支持或者单独支持;(当前demo为同时支持Flash及H5)

Presenter为PC端发起直播类型为Flash房间使用;
PresenterVss为PC端发起直播类型为H5房间使用;

BroadcastActiviy

发直播界面内部不再做初始化直播操作,初始化直播信息迁移至demo层 MainActivity 点击事件中:

	//初始化直播房间信息
	public void initPush(Param params, WebinarInfoDataSource.LoadWebinarInfoCallback callback) {
	        String vhallId = getUserId();
	        WebinarInfoRepository repository = WebinarInfoRepository.getInstance(WebinarInfoRemoteDataSource.getInstance());
	        repository.getBroadcastWebinarInfo(params.broId, params.broToken, vhallId, callback);
	    }
	    
	    //横屏发直播按钮点击事件,竖屏同理
	    public void onBroadcastLandspace(View view) {
        Intent intent = new Intent(this, BroadcastActivity.class);
        initPush(param, new WebinarInfoDataSource.LoadWebinarInfoCallback() {
            @Override
            public void onWebinarInfoLoaded(String jsonStr, WebinarInfo webinarInfo) {
                param.vssToken = webinarInfo.vss_token;
                param.vssRoomId = webinarInfo.vss_room_id;
                param.join_id = webinarInfo.join_id;
                param.webinar_id = webinarInfo.webinar_id;
                param.screenOri = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                intent.putExtra("param", param);
                startActivity(intent);
            }

            @Override
            public void onError(int errorCode, String errorMsg) {
                Toast.makeText(MainActivity.this, errorMsg, Toast.LENGTH_SHORT).show();
            }
        });
    }

ChatContract

由于聊天服务升级,新增问卷实现H5实现方式,对该接口类进行以下调整:

interface ChatView

  1. 移除接口
        void notifyDataChanged(ChatServer.ChatInfo data);
        void notifyDataChanged(int type , List<ChatServer.ChatInfo> list);

  1. 新增接口
		//聊天消息更新
        void notifyDataChangedChat(MessageChatData data);
        //问卷消息更新
        void notifyDataChangedQe(ChatServer.ChatInfo data);
        //聊天列表更新
        void notifyDataChangedChat(int type, List<MessageChatData> list);
        //问卷列表更新
        void notifyDataChangedQe(int type, List<ChatServer.ChatInfo> list);
        Context getContext();

interface ChatPresenter

  • 移除接口
        void onFreshData();
  • 新增接口
		//问卷功能H5实现方式使用
        void showSurvey(String url, String title);

InteractiveContract

互动功能升级,内部实现音频输出自动切换功能,新增互动流状态更新机制;

  • 移除接口
        void setSpeakerphoneOn(boolean on);
  • 新增接口
		//流状态变化,使用详情参考uilibs
        void updateStream(Stream stream);

WatchContract

  • 新增接口
		//新版问卷展示接口
        void showSurvey(String url, String title);
  • 修改接口
		//原入参MessageServer.MsgInfo 更改为MessageLotteryData
        void showLottery(MessageLotteryData data);

新增 interface DocumentViewVss

H5房间内文档服务升级,新增新版文档服务事件回调处理

    interface DocumentViewVss extends BaseView<BasePresenter> {
        void refreshView(com.vhall.document.DocumentView view);

        void switchType(String type);
    }

SDK层变更说明

VhallSDK

新增根据问卷id获取问卷H5地址接口;

    /**
     * @param survey_id  接收到的问卷消息的问卷id
     * @param webinar_id 跟随WebinarInfo返回的webinar_id
     * @param userId     跟随WebinarInfo返回的join_id
     * @return 返回WebView可直接加载的url
     */
    public static String getSurveyUrl(String survey_id, String webinar_id, String userId) {}

WatchLive

修改默认的渲染视图承载容器,弃用原有ContainerLayout,使用系统的RelativeLayout:

    public static class Builder {
    	***
    	private RelativeLayout videoContainer;
    	***
    	public Builder containerLayout(RelativeLayout container) {}
    	}