【最佳实践】巡检项:实时音视频 (TRTC) 原生平台 SDK 拉流时序是否正确

2023-04-23 11:47:01 浏览数 (1)

问题/风险描述:

客户业务侧调用mTRTCCloud.startRemoteView()接口订阅远端视频流,出现偶现的失败情况,具体操作是在用户进入房间的回调事件onEnterRoom之前调用startRemoteView(),大概率会出现黑屏现象。客户告知希望可以根据自己的业务逻辑去订阅远端流。

代码语言:javascript复制
// 提前订阅对方视频流
mTRTCCloud.startRemoteView(mUserId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, mTxcvvAnchorPreviewView);

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.TRTCRoleAudience;
// 进入房间
mTRTCCloud.enterRoom(mTRTCParams, TRTC_APP_SCENE_LIVE);

解决方案:

根据TRTC的推拉流规则,远端推视频流后,本地会收到远端推流的事件回 onUserVideoAvailable(userId,true),如果本地在远端推流之前订阅该流,会出现黑屏现象。为避免这个问题,可以通过以下步骤规避:

1、避免在远端用户推流前,或者推流结束之后调用startRemoteView拉视频流。

2、建议startRemoteView在远端流到达的事件回调 onUserVideoAvailable 之后调用。

代码语言:javascript复制
//参考代码
public void onUserVideoAvailable(String mRemoteUserId, boolean available) {
    if (available) { 
        // 视频流可用事件,订阅对方视频流
        mTRTCCloud.startRemoteView(mRemoteUserId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, mTxcvvAnchorPreviewView);
    } else {
        // 视频流不可用事件,取消订阅对方视频流
        mTRTCCloud.stopRemoteView(mRemoteUserId);
    }
}

注意事项:

TRTC SDK因为健壮性原因,会对部分时序错误问题进行兼容处理,在开发中轻微的拉流时序错乱,不一定对结果有影响,但是还是建议严格按照TRTC SDK的规则调用相关的接口。

0 人点赞