public TimeShiftCommentGetter(string uri, string thread, string uriStore, string threadStore, string userId, RecordingManager rm, RecordFromUrl rfu, MainForm form, long openTime, string recFolderFile, string lvid, CookieContainer container, string programType, long _openTime, WebSocketRecorder rp, int startSecond, bool isVposStartTime, bool isRtmp, RtmpRecorder rr, RecordStateSetter rss, string roomName, TimeShiftConfig tsConfig) { this.uri = uri; this.thread = thread; this.rm = rm; this.rfu = rfu; this.userId = userId; this.form = form; this.openTime = openTime; this.recFolderFile = recFolderFile; this.lvid = lvid; this.container = container; this.isGetXml = bool.Parse(rm.cfg.get("IsgetcommentXml")); this.isGetCommentXmlInfo = bool.Parse(rm.cfg.get("IsgetcommentXmlInfo")); this.programType = programType; this._openTime = _openTime; this.rp = rp; this.startSecond = startSecond; //this.tsConfig = tsConfig; this.isVposStartTime = isVposStartTime; this.isRtmp = isRtmp; this.rr = rr; isConvertSpace = bool.Parse(rm.cfg.get("IsCommentConvertSpace")); isNormalizeComment = bool.Parse(rm.cfg.get("IsNormalizeComment")); this.roomName = roomName; this.tsConfig = tsConfig; this.uriStore = uriStore; this.threadStore = threadStore; }
private void rtmpRecord(string websocketMsg, string quality) { string url = null; if (websocketMsg != null) { var _msg = util.getRegGroup(websocketMsg, "\"currentStream\":{(.+?)}"); if (_msg == null) { util.debugWriteLine("rtmpRecord _msg null"); return; } url = util.getRegGroup(_msg, "\"uri\":\"(.+?)\"") + "/" + util.getRegGroup(_msg, "\"name\":\"(.+?)\""); util.debugWriteLine("rtmp url " + url); } rfu.subGotNumTaskInfo = new List <numTaskInfo>(); if (rr != null) { rr.resetRtmpUrl(url); } else { rr = new RtmpRecorder(lvid, container, rm, rfu, !isRtmp, recFolderFile, this, openTime); Task.Run(() => { rr.record(url, quality); rm.hlsUrl = "end"; if (rr.isEndProgram) { isEndProgram = true; //if (endTime == DateTime.MinValue) // endTime = DateTime.Now; } isRetry = false; }); } }
private void process() { //util.debugWriteLine("testtest" + util.getMainSubStr(isSub, true)); /* * try {var a = new WebSocket4Net.MessageReceivedEventArgs(null, null).Data;} * catch (Exception e) { * System.Windows.Forms.MessageBox.Show("websocket", "aa"); * } */ //util.debugWriteLine(System.Diagnostics.FileVersionInfo.GetVersionInfo("websocket4net.dll"). if (isRtmp || (rm.cfg.get("IsHokan") == "true" && !rfu.isRtmpMain && !rm.isPlayOnlyMode && !rfu.isSubAccountHokan && rm.cfg.get("EngineMode") == "0" && !isTimeShift)) { rfu.subGotNumTaskInfo = new List <numTaskInfo>(); rr = new RtmpRecorder(lvid, container, rm, rfu, !isRtmp, recFolderFile, this, releaseTime); Task.Run(() => { rr.record(null, null); rm.hlsUrl = "end"; if (rr.isEndProgram) { isEndProgram = true; } isRetry = false; }); } Task.Run(() => { connectKeeper(); }); if (!isRtmp) { Task.Run(() => { record(); }); } }
public bool start(bool isRtmpOnlyPage) { addDebugBuf("ws rec start"); isXmlComment = false; tsWriterTask = Task.Run(() => { startDebugWriter(); }); // connect(webSocketInfo[0]); if (isRtmpOnlyPage) { Task.Run(() => { rr = new RtmpRecorder(lvid, container, rm, rfu, !isRtmp, recFolderFile, this, openTime); Task.Run(() => { rr.record(null, null); rm.hlsUrl = "end"; if (rr.isEndProgram) { isEndProgram = true; } isRetry = false; }); }); } else { connect(); broadcastId = util.getRegGroup(webSocketInfo[0], "watch/.*?(\\d+?)(\\?|/)"); } /* * if (isRtmp || * (rm.cfg.get("IsHokan") == "true" && * !rfu.isRtmpMain && !rm.isPlayOnlyMode && * !rfu.isSubAccountHokan && engineMode == "0" && !isTimeShift)) { * rfu.subGotNumTaskInfo = new List<numTaskInfo>(); * rr = new RtmpRecorder(lvid, container, rm, rfu, !isRtmp, recFolderFile, this, openTime); * Task.Run(() => { * rr.record(); * rm.hlsUrl = "end"; * if (rr.isEndProgram) isEndProgram = true; * isRetry = false; * }); * /* * Task.Run(() => { * xcg = new XmlCommentGetter(lvid, container, rm, rfu, recFolderFile[1], this, isTimeShift, isRtmp, openTime, _openTime, serverTime); * xcg.get(); * }); * while (rm.rfu == rfu && isRetry) Thread.Sleep(1000); * * * } */ /* * if (!isRtmpOnlyPage) { * connect(); * addDebugBuf("rm.rfu dds1 " + rm.rfu); * * broadcastId = util.getRegGroup(webSocketInfo[0], "watch/.*?(\\d+?)(\\?|/)"); * } */ // userId = util.getRegGroup(webSocketInfo[0], "audience_token=.+?_(.+?)_"); addDebugBuf("rm.rfu dds6 " + rm.rfu); addDebugBuf("ws main " + ws + " a " + (ws == null)); // while (ws.State != WebSocket4Net.WebSocketState.Closed) { // while (rm.rfu == rfu && ws != null && isRetry && // (rec == null || !rec.isStopRead())) { while (rm.rfu == rfu && isRetry) { /* * if (isTimeShift && rm.rfu == rfu && * isGetComment == "true" && engineMode == "3" && * tscg != null && tscg.isEnd) { * break; * } */ // if (rec != null) // addDebugBuf("isStopread " + rec.isStopRead()); if (!isRtmp && ws.State == WebSocket4Net.WebSocketState.Closed) { addDebugBuf("no connect loop ws close"); // connect(); } // if (DateTime.Now > DateTime.Parse("2018/10/19 4:43")) resetWebsocketInfo(); //test // GC.Collect(); // GC.WaitForPendingFinalizers(); System.Threading.Thread.Sleep(1000); } // while (isTimeShift && rm.rfu == rfu) // System.Threading.Thread.Sleep(300); //util.debugWriteLine("loop end rm.rfu " + rm.rfu.GetHashCode() + " " + rfu.GetHashCode() + " isretry " + isRetry); isRetry = false; if (rr != null) { rr.retryMode = (isEndProgram) ? 2 : 1; } // if (rm.rfu != rfu && tscg != null) tscg.setIsRetry(false); // if (isTimeShift && rm.rfu == rfu && tscg != null) { if (rm.rfu != rfu) { //if (rr != null) rr.isRetry = false; stopRecording(ws, wsc); // ws.Close(); // wsc.Close(); if (rec != null) { rec.waitForEnd(); } } if (!isRetry) { //if (rr != null) rr.isRetry = false; stopRecording(ws, wsc); if (rec != null) { rec.waitForEnd(); } } addDebugBuf("closed saikai"); return(isNoPermission); }
private int _rec(string url, bool isSub) { JikkenRecorder jr = null; RtmpRecorder rr = null; var isRtmp = !isSubAccountHokan && (isRtmpMain || isSub); CookieContainer cc = null; var pageType = wssUrl == null? this.getPageType(url, true, isSub, ref jr, out cc) : 0; container = cc; if (pageType == -2 && isSub) { return(2); } if (pageType == -1) { return(2); } //var ccInd = (isSub) ? 1 : 0; var ccInd = 0; util.debugWriteLine("pagetype " + pageType + " container " + cc + " isSub " + isSub); if ((cc == null || cc == null) && wssUrl == null) { rm.form.addLogText("ログインに失敗しました。"); if (bool.Parse(rm.cfg.get("IsmessageBox")) && util.isShowWindow) { if (rm.form.IsDisposed) { return(2); } try { rm.form.Invoke((MethodInvoker) delegate() { MessageBox.Show("ログインに失敗しました。(" + util.getMainSubStr(isSub) + ")\n" + lvid, "", MessageBoxButtons.OK, MessageBoxIcon.None); }); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } } if (bool.Parse(rm.cfg.get("IsfailExit")) && false) { rm.rfu = null; if (util.isShowWindow) { try { rm.form.Invoke((MethodInvoker) delegate() { try { rm.form.Close(); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } }); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } } } return(2); } util.debugWriteLine("pagetype " + pageType); while (true && this == rm.rfu) { util.debugWriteLine("pagetype " + pageType); if (pageType == 0 || pageType == 7) { if (wssUrl != null) { res = ""; } var isJikken = res.IndexOf("siteId":"nicocas") > -1; int recResult = 0; if (rm.isPlayOnlyMode && pageType == 7 && isRtmp) { isRtmp = false; } if (isJikken) { if (!jr.isLive && isSub) { return(2); } recResult = jr.record(res, isRtmp); } else { var isTimeShift = pageType == 7; if (isTimeShift && isSub) { return(2); } var h5r = new Html5Recorder(url, cc, lvid, rm, this, isTimeShift, isSub); recResult = h5r.record(res, isRtmp, pageType); } util.debugWriteLine("recresult " + recResult); return(recResult); } else if (pageType == 1) { rm.form.addLogText("満員です。"); if (bool.Parse(rm.cfg.get("Isretry"))) { System.Threading.Thread.Sleep(10000); while (this == rm.rfu) { try { var wc = new WebHeaderCollection(); res = util.getPageSource(url, ref wc, cc); isJikken = res.IndexOf("siteId":"nicocas") > -1; var _pageType = (isJikken) ? getJikkenPageType(res, isSub, out jr, cc) : util.getPageType(res); util.debugWriteLine(_pageType); if (pageType != 1) { continue; } System.Threading.Thread.Sleep(5000); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); } } continue; } else { return(2); } } else if (pageType == 5) { if (bool.Parse(rm.cfg.get("Isretry"))) { rm.form.addLogText("接続エラー。10秒後リトライします。"); System.Threading.Thread.Sleep(10000); try { // var wc = new WebHeaderCollection(); // res = util.getPageSource(url, ref wc, container); // pageType = util.getPageType(res); pageType = getPageType(url, false, isSub, ref jr, out cc); container = cc; util.debugWriteLine("pagetype_ " + pageType); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); // rm.form.addLogText(e.Message + " " + e.StackTrace + " "); } continue; } else { rm.form.addLogText("接続エラー"); return(2); } } else if (pageType == 6) { util.debugWriteLine("pagetype6process"); System.Threading.Thread.Sleep(3000); try { pageType = getPageType(url, false, isSub, ref jr, out cc); container = cc; util.debugWriteLine("pagetype_ " + pageType); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); rm.form.addLogText(e.Message + " " + e.StackTrace + " "); } continue; } else if (pageType == 4) { rm.form.addLogText("require_community_menber"); // rm.form.addLogText(res); if (true && false) { rm.rfu = null; if (util.isShowWindow) { try { rm.form.Invoke((MethodInvoker) delegate() { try { rm.form.Close(); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } }); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } } } return(2); } else if (pageType == 8) { rm.form.addLogText("この番組の視聴にはシリアル番号が必要です。"); return(2); } else if (pageType == 9) { if (isSub) { return(2); } rm.form.addLogText("この番組の視聴には予約が必要です。"); return(2); } else { var mes = ""; if (pageType == 2) { mes = "この放送は終了しています。"; } if (pageType == 3) { mes = "この放送は終了しています。"; } if (pageType == 7) { mes = "この放送は終了しています。"; } rm.form.addLogText(mes); util.debugWriteLine("pagetype " + pageType + " 終了"); if (bool.Parse(rm.cfg.get("IsdeleteExit")) && false) { rm.rfu = null; if (util.isShowWindow) { try { rm.form.Invoke((MethodInvoker) delegate() { try { rm.form.Close(); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } }); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } } } return(2); //var nh5r = new NotHtml5Recorder(url, container, lvid, rm, this); //nh5r.record(res); } } return(2); }