欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

腾讯互动直播上麦以及计费问题小结

程序员文章站 2022-07-06 20:29:36
...

腾讯互动直播上麦问题的由来,是由于腾讯计费问题,如果您是土豪,那就不用考虑这个问题了,全部设置默认权限就行,如果公司开发直播功能,不去考虑计费问题的话,这将是一笔很大的开销。

看一下腾讯计费公式

腾讯互动直播上麦以及计费问题小结

咋一看公式很简单,主要考虑核心机房(DC)和边缘机房(OC)

DC:上下行音视频数据,适用于音视频互动,如上麦互动角色。

OC:只能下行音视频数据,只适用于观看,纯吃瓜群众。

通过分析,会发现观众其实有两种角色,互动与吃瓜群众,分别走不同的机房,当然也产生不同的流量。

试想,如果不区分角色,那就全部走DC,白白浪费流量钱。所以上麦功能就是针对不同的角色,切换不同的权限,从而分配不同的机房,走不同的流量。


1:需要用到DC的情况

1> 需要上行音视频权限与主播进行互动,开发需要切换权限角色走DC

2>房间人数小于5人,不考虑吧,这么少也该倒闭了

2:需要用到OC的情况

1>无上麦,且房间人数大于5,下行音视频权限。

下面通过一张图了解上麦

腾讯互动直播上麦以及计费问题小结

如何上麦:

/**
     * 改变角色和权限 最终会控制自己Camera和Mic
     *
     * @param leverChange true代表上麦 false 代表下麦
     * @param auth_bits   权限字段
     * @param role        角色字段
     */
    public void changeAuthandRole(final boolean leverChange, long auth_bits, final String role) {
        changeAuthority(auth_bits, null, new AVCallback() {
            public void onComplete(int retCode,String s) {
                SxbLog.i(TAG, "changeAuthority auth " + retCode);
                if (retCode == AVError.AV_OK) {
                    changeRole(role, leverChange);
                }

            }
        });
    }


    /**
     * 改变权限
     *
     * @param auth_bits   权限
     * @param auth_buffer **
     * @param callback
     * @return
     */
    private void changeAuthority(long auth_bits, byte[] auth_buffer, AVCallback callback) {
        SxbLog.d(TAG, " start change Auth ");
        QavsdkControl qavsdk = QavsdkControl.getInstance();
        AVContext avContext = qavsdk.getAVContext();
        AVRoomMulti room = (AVRoomMulti) avContext.getRoom();
        if (null == room) {
            SxbLog.w(TAG, "changeAuthority->no room found");
        }
        if (auth_buffer != null) {
            room.changeAuthority(auth_bits, auth_buffer, auth_buffer.length, callback);
        } else {
            room.changeAuthority(auth_bits, null, 0, callback);
        }
    }


    /**
     * 改变角色
     *
     * @param role 角色名
     */
    public void changeRole(final String role, final boolean leverupper) {
        ((AVRoomMulti) (QavsdkControl.getInstance().getAvRoomMulti())).changeAVControlRole(role, new AVCallback() {
                    @Override
                    public void onComplete(int arg0,String s) {
                        if (arg0 == AVError.AV_OK) {
                            if (leverupper == true) {
                                openCameraAndMic();//打开摄像头
                                sendC2CMessage(Constants.AVIMCMD_MUlTI_JOIN, "", CurLiveInfo.getHostID());//发送回应消息
                            } else {
                                SxbLog.standardMemberUnShowLog(TAG, "change role down", "" + LogConstants.STATUS.SUCCEED, "role " + role);
                                closeCameraAndMic();
                            }
                            if (null != mContext) {
                                Toast.makeText(mContext, "change to VideoMember succ !", Toast.LENGTH_SHORT);
                            }
                        } else {
                            SxbLog.standardMemberUnShowLog(TAG, "change role ", "" + LogConstants.STATUS.FAILED, "code " + arg0);
                            if (null != mContext) {
                                Toast.makeText(mContext, "change to VideoMember failed", Toast.LENGTH_SHORT);
                            }
                        }
                    }
                }

        );
    }

此功能在随心播的LiveHelper中,角色权限配置在Constans中

    public static final long HOST_AUTH = AVRoomMulti.AUTH_BITS_DEFAULT;//权限位;TODO:默认值是拥有所有权限。
    public static final long VIDEO_MEMBER_AUTH = AVRoomMulti.AUTH_BITS_DEFAULT;//权限位;TODO:默认值是拥有所有权限。
    public static final long NORMAL_MEMBER_AUTH = AVRoomMulti.AUTH_BITS_JOIN_ROOM | AVRoomMulti.AUTH_BITS_RECV_AUDIO | AVRoomMulti.AUTH_BITS_RECV_CAMERA_VIDEO | AVRoomMulti.AUTH_BITS_RECV_SCREEN_VIDEO;


    public static final String HOST_ROLE = "LiveMaster";
    public static final String HOST_ROLE_TEST = "LiveMaster_test";
    public static final String VIDEO_MEMBER_ROLE = "LiveGuest";
    public static final String VIDEO_MEMBER_ROLE_TEST = "LiveGuest_test";
    public static final String NORMAL_MEMBER_ROLE = "Guest";

当然如果你以为这样就能完成,那本文的意义就不存在了,你还是会报角色错误问题,角色都是腾讯文件配置好的,那么角色问题出在哪呢??

还需要配置SPEAR引擎

腾讯互动直播上麦以及计费问题小结

根据你的需要,配置不同角色,分配不同的权限

腾讯互动直播上麦以及计费问题小结

这样才能解决问题。