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

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

看一下腾讯计费公式

这里写图片描述

咋一看公式很简单,主要考虑核心机房(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引擎

这里写图片描述

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

这里写图片描述

这样才能解决问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值