主唱 | 合唱 | 观众 |
NTP 校时 开启补黑帧 发送 SEI 消息 本地歌词同步 更新歌词控件 | NTP 校时 本地歌词同步 更新歌词控件 | NTP 校时 接收 SEI 消息 更新歌词控件 |
// 纯音频模式下,主实例(人声实例)需要开启补黑帧以携带 SEI 消息mTRTCCloud.callExperimentalAPI("{\\"api\\":\\"enableBlackStream\\",\\"params\\": {\\"enable\\":true}}");
mAudioEffectManager.setMusicObserver(mCurPlayMusicId, new TXAudioEffectManager.TXMusicPlayObserver() {@Overridepublic void onPlayProgress(int id, long curPtsMS, long durationMS) {JSONObject jsonObject = new JSONObject();// 当前 ntp 时间long ntpTime = TXLiveBase.getNetworkTimestamp();jsonObject.put("bgmProgressTime", curTime);jsonObject.put("ntpTime", ntpTime);jsonObject.put("musicId", musicId);jsonObject.put("duration", duration);jsonObject.toString().getBytes();mTRTCCloud.sendSEIMsg(jsonObject.toString().getBytes(), 1);}}
// 本地歌词同步mAudioEffectManager.setMusicObserver(mCurPlayMusicId, new TXAudioEffectManager.TXMusicPlayObserver() {@Overridepublic void onPlayProgress(int id, long curPtsMS, long durationMS) {...// TODO 更新歌词控件逻辑:// 根据最新进度和本地歌词进度误差,判断是否需要 seek 歌词控件...}}// 远端歌词同步@Overridepublic void onRecvSEIMsg(String userId, byte[] data) {String result = new String(data);JSONObject jsonObject = new JSONObject(result);long bgmProgressTime = jsonObject.getLong("bgmProgressTime");long ntpTime = jsonObject.getLong("ntpTime");String musicId = jsonObject.getString("musicId");long duration = jsonObject.getLong("duration");...// TODO 更新歌词控件逻辑:// 根据接收到的最新进度和本地歌词进度误差,判断是否需要 seek 歌词控件...}
本页内容是否解决了您的问题?