/** * @doc Room.requestFrame * @name 请求补帧 * @description 调用结果将在 callback 中异步返回。 * @param {SDKType.RequestFramePara} requestFramePara 请求补帧参数 * @param {SDKType.ReqCallback<SDKType.RequestFrameRsp>} callback 响应回调函数 * @returns {void} */ public void RequestFrame(RequestFramePara para, Action <ResponseEvent> callback) { this.RoomUtil.ActiveFrame(); void Eve(ResponseEvent eve) { // Debugger.Log("request frame rsp"); if (eve.Data != null) { var rsp = new RequestFrameRsp(); rsp.MergeFrom((ByteString)eve.Data); var frames = new List <Frame> (); foreach (var item in rsp.Frames) { var frame = new Frame { Id = item.Id, Ext = item.Ext, Time = Convert.ToInt64(SdkUtil.GetCurrentTimeSeconds()), RoomId = RoomInfo.Id, IsReplay = true }; frame.Items.AddRange(item.Items); frames.Add(frame); } rsp.Frames.Clear(); rsp.Frames.AddRange(frames); eve.Data = rsp; } callback?.Invoke(eve); } Sdk.Instance.RequestFrame(para, Eve); }
private void Fill(int beginFrameId, int endFrameId, com.unity.mgobe.Room room) { if (!room.IsInRoom()) { return; } Action <ResponseEvent> callback = (eve) => { this._beginFrameId = beginFrameId; this._endFrameId = endFrameId; if (eve.Code != ErrCode.EcOk) { this._autoReqFrameErrTimes++; if (this._autoReqFrameErrTimes <= 5) { this.Fill(beginFrameId, endFrameId, room); } else { room.OnAutoRequestFrameError?.Invoke(new BroadcastEvent(eve, "")); } } else { this._beginFrameId = -1; this._endFrameId = -1; this._autoReqFrameErrTimes = 0; var rsp = (RequestFrameRsp)eve.Data; var cache = new FrameCache(endFrameId); foreach (var item in rsp.Frames) { var frame = new Frame { Id = item.Id, Ext = item.Ext, Time = item.Time, RoomId = room.RoomInfo.Id, IsReplay = true }; frame.Items.AddRange(item.Items); cache.Add(frame); } this._fillCache.Add(beginFrameId, cache); this.FillSend(beginFrameId); } }; RequestFramePara frameParam = new RequestFramePara { BeginFrameId = beginFrameId + 0, EndFrameId = endFrameId + 0, }; room.RequestFrame(frameParam, callback); }