

TXLiveBase.setListener(new TXLiveBaseListener() {@Overridepublic void onUpdateNetworkTime(int errCode, String errMsg) {super.onUpdateNetworkTime(errCode, errMsg);// errCode 0: 校时成功且偏差在30ms以内;1: 校时成功但偏差可能在30ms以上;-1: 校时失败if (errCode == 0) {// 调用TXLivebase的getNetworkTimestamp即可获取NTP时间戳long ntpTime = TXLiveBase.getNetworkTimestamp();} else {// 重新调用updateNetworkTime启动一次校时TXLiveBase.updateNetworkTime();}}});TXLiveBase.updateNetworkTime();
JSONObject jsonObject = new JSONObject();jsonObject.put("cmd", "startChorus");// 约定时间合唱jsonObject.put("startPlayMusicTS", startTs);jsonObject.put("musicId", "musicId");String body = jsonObject.toString();mTRTCCloud.sendCustomCmdMsg(0, body.getBytes(), false, false);
public void onRecvCustomCmdMsg(String userId, int cmdID, int seq, byte[] message) {JSONObject json = new JSONObject(new String(message, "UTF-8"));String cmd = json.getString("cmd");// 合唱命令if (cmd.equals("startChorus")) {// 合唱开始时间long startPlayMusicTs = json.getLong("startPlayMusicTS");int musicId = json.getInt("musicId");// 合唱约定时间和当前时间差值long delayMs = Math.abs(startPlayMusicTs - getNtpTime());// 开启预加载,根据合唱约定时间和当前ntp差值,跳跃歌曲进度mTRTCCloud.callExperimentalAPI("{\\"api\\":\\"preloadMusic\\",\\"params\\": {\\"musicId\\":musicId,\\"path\\":\\"path\\",\\"startTimeMS\\":delayMs}}");// 播放歌曲TXAudioEffectManager.AudioMusicParam param = new TXAudioEffectManager.AudioMusicParam(musicId, musicPath);param.publish = false;mTRTCCloud.getAudioEffectManager().startPlayMusic(param);}
long mStartPlayMusicTs = "最初约定的合唱时间";long currentProgress = subCloud.getAudioEffectManager().getMusicCurrentPosInMS(musicID);// 当前歌曲的理想播放时间进度long estimatedProgress = getNtpTime() - mStartPlayMusicTs;// 当播放进度超过50ms,进行修正if (estimatedProgress >= 0 &&; Math.abs(currentProgress - estimatedProgress) > 50) {subCloud.getAudioEffectManager().seekMusicToPosInMS(mMusicID, (int) estimatedProgress);}
文档反馈