问题/风险描述:
在视频通话场景(VideoCall),出现Android端推流绿屏现象,具体表现是,房间内其他用户拉流观看,显示该用户的画面出现绿色色块,并且在进房后一直持续出现。这种现象不是该用户每次进房都出现,是偶现的。
因为所有的拉流端都出现同样的现象,判断是推流端的编码出现异常,查看推流端的本地日志,发现有异常日志输出: CreateShader type=35633: glError 1282
查询相关资料得知,glError 1282是以下原因:
GLES20.xxx() 和open环境不一致。即 opengl的环境不是2.0,却使用了2.0的接口 ,所以将opengl的版本指定(初始化)为 2。
造成opengl环境不一致的原因之一是同一个房间内有不同用户进房设置了不一样的TRTC的场景而导致出现绿屏现象,比如:
VideoCall 模式下,客户端会优先选择使用 RPS 方式的软编软解;客户端会优先选择使用标准 GOP 方式的硬编硬解。
Live 模式下,客户端会优先选择使用标准 GOP 方式的硬编硬解。
解决方案:
要避免当前的绿屏问题,需要避免出现opengl环境不一致现象,只需要在客户端的业务层把所有用户的进房模式设置成一样。要么是通话模式,要么是直播模式。
代码语言:javascript复制//Android SDK 参考代码
public void enterRoom() {
mTRTCParams = new TRTCCloudDef.TRTCParams();
mTRTCParams.sdkAppId = GenerateTestUserSig.SDKAPPID;
mTRTCParams.userId = mUserId;
mTRTCParams.roomId = Integer.parseInt(mRoomId);
mTRTCParams.userSig = GenerateTestUserSig.genTestUserSig(mTRTCParams.userId);
mTRTCParams.role = TRTCCloudDef.TRTCRoleAnchor;
mTRTCCloud.startLocalPreview(mIsFrontCamera, mTxcvvAnchorPreviewView);
mTRTCCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT);
mTRTCCloud.enterRoom(mTRTCParams, TRTC_APP_SCENE_LIVE);
}
代码语言:javascript复制//Web SDK 参考代码
const client = TRTC.createClient({
sdkAppId: 0, // 填写您申请的 sdkAppId
userId: '', // 填写您业务对应的 userId
userSig: '', // 填写服务器或本地计算的 userSig
mode: 'live'
});
注意事项:
通话模式和直播模式是两个不同的场景,应该根据自身业务场景选择。