市面上提供了很多的音视频聊天sdk,在直播APP开发中有很多种选择;假如需求变更导致了现有sdk无法很好的满足需求,需要替换sdk,如果全部重写或者基于原来代码进行魔改,代价太高;所以在前期编码的时候最好将UI逻辑和音视频逻辑进行区分,接下来介绍下直播APP基于腾讯sdk的处理。
1.抽象出Presnter
public interface ICallPresnter {
/*初始化*/
public void init();
/*退出房间*/
public void exitRoom();
/*进入房间*/
public void enterRoom(int roomId);
/*是否开启前置摄像头*/
public void isFront(boolean isFront);
/*开启关闭摄像头*/
public void openCamera(boolean isOpen);
/*是否开启免提*/
public void isHandsFree(boolean isHandsFree);
/*是否开启静音*/
public void isMute(boolean isMute);
/*是视频模式还是音频模式*/
public void isVideo(boolean isVideo);
/*获取当前的state层*/
public CallLivingState getCallState();
/*开启本地预览*/
public void startSDKLocalPreview(boolean isPreview);
/*持有View*/
public void setCallView(IVideoCallView callView);
/*资源释放方法*/
public void release();
}
2. 抽象出View层
public interface IVideoCallView<T extends View> {
/*退出房间*/
public void onExitRoom();
/*Presnter层提供环境变量*/
public Context getContext();
/*Presnter层聊天者的窗口*/
public T getVideoView(String id);
/*Presnter层提供自己的主窗口*/
public T getMainVideoView();
/*监听视频另一方是否开启推流视频*/
public void ontherOpenVideo(boolean isOpen);
}
3. presnter和view互相持有抽象引用,并进行调用
public VideoCallPresneter(@NonNull IVideoCallView iVideoCallView, int isRole) {
this.iVideoCallView=iVideoCallView;
tcRole=parseRole(isRole);
callState=new CallLivingState();
initParm();
}
public void onExitRoom(int i) {
super.onExitRoom(i);
VideoCallPresneter presneter = presneterReference.get();
if(presneter!=null&&presneter.iVideoCallView!=null){
presneter.iVideoCallView.onExitRoom();
}
}
以上就是在直播APP开发过程中,基于腾讯sdk的音视频功能实现的大体流程,即使直播APP中非常小的一个功能都需要技术人员进行开发,感兴趣的话可持续关注,后续会保持更新。
声明:本文由作者原创,转载须备注文章来源与作者。