腾讯互动直播上麦以及计费问题小结
程序员文章站
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引擎
根据你的需要,配置不同角色,分配不同的权限
这样才能解决问题。
推荐阅读