直播APP开发时:基于腾讯sdk的音视频功能实现

市面上提供了很多的音视频聊天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中非常小的一个功能都需要技术人员进行开发,感兴趣的话可持续关注,后续会保持更新。
声明:本文由作者原创,转载须备注文章来源与作者。

发布了119 篇原创文章 · 获赞 27 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/yun_bao_2144899870/article/details/103386520