public ChaseHokan(numTaskInfo nti, int lastSegmentNo, string[] name, string lvid, RecordingManager rm, Html5Recorder h5r) { this.nti = nti; this.lastSegmentNo = lastSegmentNo; this.name = name; this.lvid = lvid; this.rm = rm; this.h5r = h5r; }
public DropSegmentProcess(DateTime _lastWroteSegmentDt, int _lastSegmentNo, Record rec, string recFolderFileOrigin, RecordFromUrl rfu, RecordingManager rm, Html5Recorder h5r) { // this.nti = s; this.lastWroteSegmentDt = _lastWroteSegmentDt; this.lastSegmentNo = _lastSegmentNo; this.rec = rec; this.recFolderFileOrigin = recFolderFileOrigin; this.rfu = rfu; this.rm = rm; this.h5r = h5r; }
WebSocketRecorder getWebsocketRecorder(string res) { try { var data = util.getRegGroup(res, "<script id=\"embedded-data\" data-props=\"([\\d\\D]+?)</script>"); if (data == null) { return(null); } data = System.Web.HttpUtility.HtmlDecode(data); var type = util.getRegGroup(res, "\"content_type\":\"(.+?)\""); var webSocketRecInfo = Html5Recorder.getWebSocketInfo(data, false, true, true, rm.form, h5r.isFmp4); if (webSocketRecInfo == null) { return(null); } //var a = recFolderFileInfo; //var segmentSaveType = rm.cfg.get("segmentSaveType"); //var lastFile = util.getLastTimeshiftFileName( // recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], recFolderFileInfo[5], rm.cfg, openTime); //util.debugWriteLine("timeshift lastfile " + lastFile); //string[] lastFileTime = util.getLastTimeShiftFileTime(lastFile, segmentSaveType); //if (lastFileTime == null) // util.debugWriteLine("timeshift lastfiletime " + // ((lastFileTime == null) ? "null" : string.Join(" ", lastFileTime))); var n = nti; var lastWroteSecondsAgo = (int)(((TimeSpan)(DateTime.Now - nti.dt)).TotalSeconds + (int)((nti.no - lastSegmentNo) * nti.second) + 25) * -1; var endSecondsAgo = (int)(((TimeSpan)(DateTime.Now - nti.dt)).TotalSeconds - 15) * -1; var tsConfig = new TimeShiftConfig(0, 0, 0, lastWroteSecondsAgo, 0, 0, endSecondsAgo, false, false, "", false, 0, false, false, 1, 1, false, false, false); var recFolderFile = new string[] { h5r.recFolderFile[0], name[1], null }; /* * var recFolderFile = util.getRecFolderFilePath(recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], recFolderFileInfo[5], rm.cfg, true, tsConfig, openTime, false); * if (recFolderFile == null || recFolderFile[0] == null) { * //パスが長すぎ * rm.form.addLogText("パスに問題があります。 " + recFolderFile[1]); * util.debugWriteLine("too long path? " + recFolderFile[1]); * return null; * } */ var userId = util.getRegGroup(res, "\"user\"\\:\\{\"user_id\"\\:(.+?),"); var isPremium = res.IndexOf("\"member_status\":\"premium\"") > -1; return(new WebSocketRecorder(webSocketRecInfo, container, recFolderFile, rm, rm.rfu, h5r, 0, true, lvid, tsConfig, userId, isPremium, TimeSpan.MaxValue, type, 0, false, false, true, false, false, null, 0)); } catch (Exception e) { util.debugWriteLine(e.Message + e.Source + e.StackTrace + e.TargetSite); return(null); } }
public ChaseLastRecord(string lvid, CookieContainer container, RecordingManager rm, string[] recFolderFileInfo, long openTime, Html5Recorder h5r, TimeShiftConfig tsConfig, RecordFromUrl rfu) { this.lvid = lvid; this.container = container; this.rm = rm; this.recFolderFileInfo = recFolderFileInfo; this.openTime = openTime; this.h5r = h5r; this.tsConfig = tsConfig; this.rfu = rfu; }
WebSocketRecorder getWebsocketRecorder(string res) { try { var data = util.getRegGroup(res, "<script id=\"embedded-data\" data-props=\"([\\d\\D]+?)</script>"); if (data == null) { return(null); } data = System.Web.HttpUtility.HtmlDecode(data); var type = util.getRegGroup(res, "\"content_type\":\"(.+?)\""); var webSocketRecInfo = Html5Recorder.getWebSocketInfo(data, false, false, true, rm.form, h5r.isFmp4); if (webSocketRecInfo == null) { return(null); } //var a = recFolderFileInfo; var segmentSaveType = rm.cfg.get("segmentSaveType"); var lastFile = util.getLastTimeshiftFileName( recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], recFolderFileInfo[5], rm.cfg, openTime, h5r.isFmp4); util.debugWriteLine("timeshift lastfile " + lastFile); string[] lastFileTime = util.getLastTimeShiftFileTime(lastFile, segmentSaveType, h5r.isFmp4); if (lastFileTime == null) { util.debugWriteLine("timeshift lastfiletime " + ((lastFileTime == null) ? "null" : string.Join(" ", lastFileTime))); } var tsConfig = new TimeShiftConfig(1, int.Parse(lastFileTime[0]), int.Parse(lastFileTime[1]), int.Parse(lastFileTime[2]), 0, 0, 0, true, false, "", false, 0, false, false, 2, 0, false, false, this.tsConfig.isDeletePosTime); tsConfig.endTimeMode = this.tsConfig.endTimeMode; tsConfig.endTimeSeconds = this.tsConfig.endTimeSeconds; tsConfig.lastSegmentNo = lastSegmentNo; var recFolderFile = util.getRecFolderFilePath(recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], recFolderFileInfo[5], rm.cfg, true, tsConfig, openTime, false, h5r.isFmp4); if (recFolderFile == null || recFolderFile[0] == null) { //パスが長すぎ rm.form.addLogText("パスに問題があります。 " + recFolderFile[1]); util.debugWriteLine("too long path? " + recFolderFile[1]); return(null); } var userId = util.getRegGroup(res, "\"user\"\\:\\{\"user_id\"\\:(.+?),"); var isPremium = res.IndexOf("\"member_status\":\"premium\"") > -1; return(new WebSocketRecorder(webSocketRecInfo, container, recFolderFile, rm, rm.rfu, h5r, openTime, true, lvid, tsConfig, userId, isPremium, TimeSpan.MaxValue, type, openTime, false, false, false, false, false, null, 0)); } catch (Exception e) { util.debugWriteLine(e.Message + e.Source + e.StackTrace + e.TargetSite); return(null); } }
public WebSocketRecorder(string[] webSocketInfo, CookieContainer container, string[] recFolderFile, RecordingManager rm, RecordFromUrl rfu, Html5Recorder h5r, long openTime, int lastSegmentNo, bool isTimeShift, string lvid, TimeShiftConfig tsConfig, string userId, bool isPremium, TimeSpan programTime, string programType, long _openTime, bool isSub, bool isRtmp, string latency ) { this.webSocketInfo = webSocketInfo; this.container = container; this.recFolderFile = recFolderFile; this.rm = rm; this.rfu = rfu; this.h5r = h5r; this.openTime = openTime; this.lastSegmentNo = lastSegmentNo; this.isTimeShift = isTimeShift; this.lvid = lvid; this.tsConfig = tsConfig; this.userId = userId; this.isPremium = isPremium; this.programTime = programTime; isJikken = false; this.programType = programType; this._openTime = _openTime; this.isSub = isSub; this.isRtmp = isRtmp; this.qualityRank = rm.cfg.get("qualityRank"); this.isGetComment = rm.cfg.get("IsgetComment"); this.isGetCommentXml = rm.cfg.get("IsgetcommentXml"); this.engineMode = rm.cfg.get("EngineMode"); selectLatency = latency; }
private int _rec(string url) { JikkenRecorder jr = null; //RtmpRecorder rr = null; var isRtmp = isRtmpMain; CookieContainer cc; var pageType = this.getPageType(url, true, ref jr, out cc); if (pageType == -1) { return(2); } util.debugWriteLine("pagetype " + pageType + " container " + cc); if (cc == null || cc == null) { rm.form.addLogText("ログインに失敗しました。"); if (bool.Parse(rm.cfg.get("IsmessageBox")) && util.isShowWindow) { rm.form.formAction(() => MessageBox.Show("ログインに失敗しました。\n" + lvid, "", MessageBoxButtons.OK, MessageBoxIcon.None), false); } if (bool.Parse(rm.cfg.get("IsfailExit"))) { rm.rfu = null; rm.form.close(); } return(2); } util.debugWriteLine("pagetype " + pageType); while (this == rm.rfu) { util.debugWriteLine("pagetype " + pageType); if (pageType == 0 || pageType == 7) { var isJikken = res.IndexOf("siteId":"nicocas") > -1; int recResult = 0; if (isPlayOnlyMode && pageType == 7 && isRtmp) { isRtmp = false; } if (isJikken) { //実験放送 なくし //recResult = jr.record(res, isRtmp); } else { var isTimeShift = pageType == 7; h5r = new Html5Recorder(url, cc, lvid, rm, this, isTimeShift); 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 { res = util.getPageSource(url, cc); isJikken = res.IndexOf("siteId":"nicocas") > -1; //var _pageType = (isJikken) ? getJikkenPageType(res, out jr, cc) : util.getPageType(res); var _pageType = (isJikken) ? 0 : 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 { pageType = getPageType(url, false, ref jr, out cc); util.debugWriteLine("pagetype_ " + pageType); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); } continue; } else { rm.form.addLogText("接続エラー"); return(2); } } else if (pageType == 6) { util.debugWriteLine("pagetype 6 process"); System.Threading.Thread.Sleep(3000); try { pageType = getPageType(url, false, ref jr, out 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_member"); util.debugWriteLine(rm.cfg.get("IsautoFollowComgen")); if (bool.Parse(rm.cfg.get("IsautoFollowComgen"))) { var isFollow = new FollowCommunity().followCommunity(res, cc, rm.form, rm.cfg, isPlayOnlyMode); util.debugWriteLine("isfollow " + isFollow); if (isFollow) { pageType = getPageAfterFollow(url, lvid, ref jr, out cc); util.debugWriteLine("pagetype_ " + pageType); continue; } } if (bool.Parse(rm.cfg.get("IsmessageBox")) && util.isShowWindow) { var ret = rm.form.formAction(() => MessageBox.Show("コミュニティに入る必要があります:\nrequire_community_member/" + lvid, "", MessageBoxButtons.OK, MessageBoxIcon.None), false); if (!ret) { return(2); } } if (bool.Parse(rm.cfg.get("IsfailExit"))) { rm.rfu = null; rm.form.close(); } return(2); } else if (pageType == 8) { rm.form.addLogText("この番組の視聴にはシリアル番号が必要です。"); return(2); } else if (pageType == 9) { rm.form.addLogText("この番組の視聴には予約が必要です。"); DialogResult isYoyakuRes = DialogResult.None; var reserveMessage = rm.cfg.get("reserveMessage"); if (reserveMessage != "ダイアログで確認") { isYoyakuRes = reserveMessage == "常に予約する" ? DialogResult.Yes : DialogResult.No; } else { rm.form.formAction(() => { isYoyakuRes = MessageBox.Show(rm.form, "この番組の視聴には予約が必要です。予約しますか?", "", MessageBoxButtons.YesNo); }, false); } if (isYoyakuRes == DialogResult.No) { return(2); } var r = new Reservation(cc, lvid); //var reserveRet = r.reserve(); var reserveRet = r.live2Reserve(); if (reserveRet == "ok") { rm.form.addLogText("予約しました"); pageType = getPageType(url, false, ref jr, out cc); continue; } else { rm.form.addLogText(reserveRet); rm.form.addLogText("予約できませんでした"); if (reserveRet == "予約リストが一杯です。") { //DialogResult isOpenMypageRes = DialogResult.None; rm.form.formAction(() => { var isOpenMypageRes = MessageBox.Show(rm.form, "予約リストが一杯です。マイページを開きますか?", "", MessageBoxButtons.YesNo); if (isOpenMypageRes == DialogResult.Yes) { System.Diagnostics.Process.Start("https://live.nicovideo.jp/my"); } }, false); } return(2); } } else if (pageType == 10) { var r = new Reservation(cc, lvid).useLive2Reserve(); if (!r) { rm.form.addLogText("この番組のチケットを正常に使用できませんでした。"); return(2); } pageType = getPageType(url, false, ref jr, out cc); util.debugWriteLine("pagetype 10_ " + pageType); continue; } else if (pageType == 11) { rm.form.addLogText("この番組は有料チケットが必要です。"); return(2); } else { var mes = ""; if (pageType == 2 || pageType == 3) { mes = "この放送は終了しています。"; } rm.form.addLogText(mes); util.debugWriteLine("pagetype " + pageType + " 終了"); if (bool.Parse(rm.cfg.get("IsdeleteExit"))) { rm.rfu = null; rm.form.close(); } return(2); } } return(2); }
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); }