private TimeShiftConfig getReadyArgTsConfig( TimeShiftConfig _tsConfig, string host, string group, string title, string lvId, string communityNum, string userId, long _openTime) { var segmentSaveType = rm.cfg.get("segmentSaveType"); var lastFile = util.getLastTimeshiftFileName(host, group, title, lvId, communityNum, userId, rm.cfg, _openTime); util.debugWriteLine("timeshift lastfile " + lastFile + " host " + host + " title " + title); var lastFileTime = util.getLastTimeShiftFileTime(lastFile, segmentSaveType); if (lastFileTime == null) { _tsConfig.timeType = 0; } else { if (_tsConfig.timeType == 1) { _tsConfig.timeSeconds = int.Parse(lastFileTime[0]) * 3600 + int.Parse(lastFileTime[1]) * 60 + int.Parse(lastFileTime[2]); } } if (_tsConfig.timeType == 0) { _tsConfig.isContinueConcat = false; } util.debugWriteLine("ready arg ts iscontinueconcat " + _tsConfig.isContinueConcat + " startType " + _tsConfig.timeType + " lastfiletime " + lastFileTime + " lastfile " + lastFile); return(_tsConfig); }
public JikkenRecordProcess( CookieContainer container, string[] recFolderFile, RecordingManager rm, RecordFromUrl rfu, JikkenRecorder jr, long openTime, bool isTimeShift, string lvid, TimeShiftConfig tsConfig, string userId, bool isPremium, TimeSpan programTime, WatchingInfo wi, long releaseTime, bool isSub, bool isRtmp) { this.container = container; this.recFolderFile = recFolderFile; this.rm = rm; this.rfu = rfu; this.jr = jr; this.openTime = openTime; this.isTimeShift = isTimeShift; this.lvid = lvid; this.tsConfig = tsConfig; this.userId = userId; this.isPremium = isPremium; this.programTime = programTime; this.wi = wi; this.msUri = wi.msUri; isGetCommentXml = bool.Parse(rm.cfg.get("IsgetcommentXml")); isJikken = true; this.releaseTime = releaseTime; this.isSub = isSub; this.isRtmp = isRtmp; }
private string getSetTsBtnText(TimeShiftConfig tsConfig) { string start = "", end = ""; if (tsConfig.startTimeMode == 0) { start = "最初から"; } else if (tsConfig.startTimeMode == 1) { start = ((tsConfig.h < 1000) ? tsConfig.h.ToString("0") : tsConfig.h.ToString()) + "時間" + tsConfig.m.ToString("") + "分" + tsConfig.s.ToString("") + "秒"; } else { start = "前回の続きから"; } if (tsConfig.endTimeMode == 0) { end = "最後まで"; } else if (tsConfig.endTimeMode == 1) { end = ((tsConfig.endH < 1000) ? tsConfig.endH.ToString("0") : tsConfig.endH.ToString()) + "時間" + tsConfig.endM.ToString("") + "分" + tsConfig.endS.ToString("") + "秒"; } return(start + "-" + end); }
public void write(string playList, string _path, string baseUrl, TimeShiftConfig tsConfig) { isStarted = true; var path = _path + ((tsConfig.isM3u8List) ? ".m3u8" : ".txt"); var _hasuu = util.getRegGroup(playList, "(\\d\\d+)" + ext); var hasuu = (_hasuu == null) ? 0 : int.Parse(_hasuu); hasuu = hasuu % 5000; var _duration = util.getRegGroup(playList, "#DMC-STREAM-DURATION:(.+)"); var duration = double.Parse(_duration, System.Globalization.NumberStyles.Float); var _temp = util.getRegGroup(playList, "(.+\\" + ext + ".+)"); var temp = baseUrl + _temp; var tempNum = util.getRegGroup(_temp, "(\\d+)"); var ret = ""; if (startNum >= tsConfig.timeSeconds * 1000) { ret += temp.Replace(tempNum + ext, startNum.ToString() + ext); } for (var i = 5000 + hasuu; i < duration * 1000; i += 5000) { if (i < tsConfig.timeSeconds * 1000 || (tsConfig.endTimeSeconds != 0 && i > tsConfig.endTimeSeconds * 1000)) { continue; } if (ret != "") { ret += "\r\n"; } ret += temp.Replace(tempNum + ext, i + ext); } if (tsConfig.isM3u8List) { writeM3u8List(path, ret); } else { using (var w = new StreamWriter(path, false)) { w.Write(ret); //w.Flush(); //w.Close(); } if (tsConfig.isOpenUrlList) { openFile(path); } } }
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, 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); } }
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); } }
void setTimeshiftBtn_Click(object sender, System.EventArgs e) { var segmentSaveType = config.get("segmentSaveType"); var o = new TimeShiftOptionForm(segmentSaveType, config, setTsConfig); try { o.ShowDialog(this); } catch (Exception ee) { util.debugWriteLine("timeshift option form invoke " + ee.Message + " " + ee.StackTrace + " " + ee.Source + " " + ee.TargetSite); } if (o.ret != null) { setTsConfig = o.ret; setTimeshiftBtn.Text = getSetTsBtnText(setTsConfig); } }
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; }
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; }
public TimeShiftOptionForm( string segmentSaveType, config.config config, TimeShiftConfig tsConfigIn) { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); //this.lastFileTime = lastFileTime; this.segmentSaveType = segmentSaveType; this.config = config; /* * if (lastFileTime != null) * lastFileInfoLabel.Text = "(" + lastFileTime[0] + * "時間" + lastFileTime[1] + "分" + lastFileTime[2] + "秒まで録画済み)"; * else { * lastFileInfoLabel.Text = "(前回の録画ファイルが見つかりませんでした)"; * isRenketuLastFile.Enabled = false; * isFromLastTimeRadioBtn.Enabled = false; * } */ isRenketuLastFile.Visible = (segmentSaveType == "0"); var isUrlList = bool.Parse(config.get("IsUrlList")); var openListCommand = config.get("openUrlListCommand"); isUrlListChkBox.Checked = isUrlList; openListCommandText.Text = openListCommand; openListCommandText.Enabled = isUrlList; if (bool.Parse(config.get("IsM3u8List"))) { isM3u8RadioBtn.Checked = true; } updateListSecondText.Text = config.get("M3u8UpdateSeconds"); isOpenListCommandChkBox.Checked = bool.Parse(config.get("IsOpenUrlList")); setFormFromConfig(); hText.Text = tsConfigIn.h.ToString(); mText.Text = tsConfigIn.m.ToString(); sText.Text = tsConfigIn.s.ToString(); endHText.Text = tsConfigIn.endH.ToString(); endMText.Text = tsConfigIn.endM.ToString(); endSText.Text = tsConfigIn.endS.ToString(); isRenketuLastFile.Checked = tsConfigIn.isContinueConcat; if (tsConfigIn.timeType == 1) { isFromLastTimeRadioBtn.Checked = true; } if (tsConfigIn.startTimeMode == 0) { isMostStartTimeRadioBtn.Checked = true; } else if (tsConfigIn.startTimeMode == 1) { isStartTimeRadioBtn.Checked = true; } else { isFromLastTimeRadioBtn.Checked = true; } if (tsConfigIn.endTimeMode == 0) { isEndTimeRadioBtn.Checked = true; } else if (tsConfigIn.endTimeMode == 1) { isManualEndTimeRadioBtn.Checked = true; } updateTimeShiftStartTimeChkBox(); updateIsFromLastTimeRadioBtn(); updateIsM3u8RadioBtn_CheckedChanged(); updateIsOpenListCommandChkBoxCheckedChanged(); updateUrlListChkBoxCheckedChanged(); updateIsManualEndTimeRadioBtn(); util.setFontSize(int.Parse(config.get("fontSize")), this, false); }
private bool isValidConf(string name, string val, List <string> lowKeys, List <string> defValues, out string setVal, out string setName, List <string> keys) { setVal = null; setName = null; for (var i = 0; i < lowKeys.Count; i++) { if (name.ToLower() != lowKeys[i]) { continue; } if (i < defValues.Count && (defValues[i] == "true" || defValues[i] == "false")) { if (val.ToLower() == "true" || val.ToLower() == "false") { setVal = val.ToLower(); setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "browsernum") { if (val == "1" || val == "2") { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(1 or 2) " + val, false); return(false); } } if (lowKeys[i] == "qualityrank") { if (isValidQualityRank(val)) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(例 「0,1,2,5,4,3」) " + val, false); return(false); } } if (lowKeys[i] == "segmentsavetype") { if (val == "0" || val == "1") { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0 or 1) " + val, false); return(false); } } if (lowKeys[i] == "m3u8updateseconds") { double _s = 0; if (double.TryParse(val, out _s) && _s > 0) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0以上の数値) " + val, false); return(false); } } if (lowKeys[i] == "subfoldernametype") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 1 && _s <= 8) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(1から8の整数) " + val, false); return(false); } } if (lowKeys[i] == "filenametype") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 1 && _s <= 10) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(1から10の整数) " + val, false); return(false); } } if (lowKeys[i] == "filenameformat") { if (val.IndexOf("{0}") > -1) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした({0}を含む文字列) " + val, false); return(false); } } if (lowKeys[i] == "volume") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 0 && _s <= 100) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0から100の整数) " + val, false); return(false); } } if (lowKeys[i] == "afterConvertMode") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 0 && _s <= 14) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0から14の整数) " + val, false); return(false); } } if (lowKeys[i] == "EngineMode") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 0 && _s <= 3) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0から3の整数) " + val, false); return(false); } } if (lowKeys[i] == "latency") { double _s = 0; if (double.TryParse(val, out _s) && _s == 0.5 || _s == 1 || _s == 1.5 || _s == 3) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0.5,1.0,1.5,3.0) " + val, false); return(false); } } //ts if (lowKeys[i] == "ts-start") { var _t = Regex.Match(val.ToLower(), "((\\d*)h)*((\\d*)m)*((\\d*)s)*"); if (_t.Length != 0) { if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.timeType = 0; tsConfig.timeSeconds = 0; if (_t.Groups[2].Length != 0) { tsConfig.timeSeconds += int.Parse(_t.Groups[2].Value) * 3600; } if (_t.Groups[4].Length != 0) { tsConfig.timeSeconds += int.Parse(_t.Groups[4].Value) * 60; } if (_t.Groups[6].Length != 0) { tsConfig.timeSeconds += int.Parse(_t.Groups[6].Value); } return(false); } else if (val.ToLower() == "continue" || val.ToLower() == "continue-concat") { if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.timeType = 1; tsConfig.isContinueConcat = val.ToLower() == "continue-concat"; return(false); } else { form.addLogText(name + "の値が設定できませんでした(0h0m0s形式の時間 or continue or continue-concat) " + val, false); return(false); } } if (lowKeys[i] == "ts-end") { var _t = Regex.Match(val.ToLower(), "((\\d*)h)*((\\d*)m)*((\\d*)s)*"); if (_t.Length != 0) { if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.endTimeSeconds = 0; if (_t.Groups[2].Length != 0) { tsConfig.endTimeSeconds += int.Parse(_t.Groups[2].Value) * 3600; } if (_t.Groups[4].Length != 0) { tsConfig.endTimeSeconds += int.Parse(_t.Groups[4].Value) * 60; } if (_t.Groups[6].Length != 0) { tsConfig.endTimeSeconds += int.Parse(_t.Groups[6].Value); } return(false); } else { form.addLogText(name + "の値が設定できませんでした(0h0m0s形式の時間) " + val, false); return(false); } } //ts list if (lowKeys[i] == "ts-list") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "IsUrlList"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isOutputUrlList = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "ts-list-open") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "IsOpenUrlList"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isOpenUrlList = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "ts-list-m3u8") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "IsM3u8List"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isM3u8List = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "ts-list-update") { double _s = 0; if (double.TryParse(val, out _s) && _s > 0) { setName = "M3u8UpdateSeconds"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.m3u8UpdateSeconds = double.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(0以上の数値) " + val, false); return(false);; } } if (lowKeys[i] == "ts-list-command") { // if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "openUrlListCommand"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.openListCommand = val; return(true); /* * } else { * form.addLogText(name + "の値が設定できませんでした(0以上の数値) " + val, false); * return false;; * } */ } if (lowKeys[i] == "ts-vpos-starttime") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "IsVposStartTime"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isVposStartTime = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } setName = keys[i]; setVal = val; return(true); } return(false); }
private int html5Record(string res, bool isRtmp, int pageType) { //webSocketInfo 0-wsUrl 1-request //recFolderFileInfo host, group, title, lvid, communityNum //return 0-end stream 1-stop string[] webSocketRecInfo; recFolderFileInfo = null; var isNoPermission = false; while (rm.rfu == rfu) { var type = util.getRegGroup(res, "\"content_type\":\"(.+?)\""); var data = util.getRegGroup(res, "<script id=\"embedded-data\" data-props=\"([\\d\\D]+?)</script>"); var isRtmpOnlyPage = res.IndexOf("%3Cgetplayerstatus%20") > -1 || res.IndexOf("<getplayerstatus ") > -1; if (isRtmpOnlyPage) { isRtmp = true; } var isChasable = util.getRegGroup(res, ""permissions":\\[[^\\]]*(CHASE_PLAY)") != null && res.IndexOf("isChasePlayEnabled":true") > -1; var isChaseCheck = rm.form.isChaseChkBtn.Checked; if (isChaseCheck && (!isChasable || pageType != 0)) { rm.form.addLogText("追いかけ再生ができませんでした"); return(3); } //util.debugWriteLine(data); var isChase = isChaseRec(isChaseCheck, isChasable, data) && !isRtmp; if (isChase && !isRtmp) { isTimeShift = true; } //;,"permissions":["CHASE_PLAY"]," //var pageType = util.getPageType(res); // var pageType = pageType; util.debugWriteLine("pagetype " + pageType + " isChase" + isChase); if ((data == null && !isRtmpOnlyPage) || (pageType != 0 && pageType != 7)) { //processType 0-ok 1-retry 2-放送終了 3-その他の理由の終了 var processType = processFromPageType(pageType); util.debugWriteLine("processType " + processType); //if (processType == 0 || processType == 1) continue; if (processType == 2) { return(3); } // if (processType == 3) return 0; System.Threading.Thread.Sleep(3000); res = getPageSourceFromNewCookie(); continue; } data = (isRtmpOnlyPage) ? System.Web.HttpUtility.UrlDecode(res) : System.Web.HttpUtility.HtmlDecode(data); long endTime, _openTime, serverTime, vposBaseTime; // DateTime programTime, jisa; openTime = endTime = _openTime = serverTime = vposBaseTime = 0; if (!getTimeInfo(data, ref openTime, ref endTime, ref _openTime, ref serverTime, ref vposBaseTime, isRtmpOnlyPage)) { return(3); } var programTime = util.getUnixToDatetime(endTime) - util.getUnixToDatetime(openTime); var jisa = util.getUnixToDatetime(serverTime / 1000) - DateTime.Now; isFmp4 = data.IndexOf("\"providerType\":\"community\"") > -1 && pageType == 0 && !isTimeShift && false; //0-wsUrl 1-request webSocketRecInfo = getWebSocketInfo(data, isRtmp, isChase, isTimeShift, rm.form, isFmp4); util.debugWriteLine("websocketrecinfo " + webSocketRecInfo); if (!isRtmpOnlyPage && webSocketRecInfo == null) { break; } util.debugWriteLine("isnopermission " + isNoPermission); // if (isNoPermission) webSocketRecInfo[1] = webSocketRecInfo[1].Replace("\"requireNewStream\":false", "\"requireNewStream\":true"); recFolderFileInfo = getHtml5RecFolderFileInfo(data, type, isRtmpOnlyPage); //timeshift option timeShiftConfig = null; if (((isTimeShift && !isChase) || isChaseCheck) && !isRtmp) { // if (rm.ri != null) timeShiftConfig = rm.ri.tsConfig; if (rm.argTsConfig != null) { timeShiftConfig = getReadyArgTsConfig(rm.argTsConfig.clone(), recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], recFolderFileInfo[5], openTime, (int)(openTime - _openTime)); } else { timeShiftConfig = getTimeShiftConfig(recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], recFolderFileInfo[5], rm.cfg, openTime, isChase, _openTime); if (timeShiftConfig == null) { return(2); } // rm.cfg.set("IsUrlList", timeShiftConfig.isOutputUrlList.ToString().ToLower()); // rm.cfg.set("openUrlListCommand", timeShiftConfig.openListCommand); } } if (!isChaseCheck && isChase) { timeShiftConfig = new TimeShiftConfig(); } var isRealtimeChase = isChase && !isChaseCheck && !(rm.form.args.Length > 0 && bool.Parse(rm.cfg.get("IsArgChaseRecFromFirst"))); if (!rfu.isPlayOnlyMode) { util.debugWriteLine("rm.rfu " + rm.rfu.GetHashCode() + " rfu " + rfu.GetHashCode()); if (recFolderFile == null) { recFolderFile = getRecFilePath(isRtmp); } if (recFolderFile == null || recFolderFile[0] == null) { //パスが長すぎ rm.form.addLogText("パスに問題があります。 " + (recFolderFile != null ? recFolderFile[1] : "")); util.debugWriteLine("too long path? " + (recFolderFile != null ? recFolderFile[1] : "")); return(2); } } else { var fName = "a/" + util.getFileName(recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], rm.cfg, openTime); recFolderFile = new String[] { fName, fName, fName }; //new string[]{"", "", ""}; } //display set var rss = new RecordStateSetter(rm.form, rm, rfu, isTimeShift, false, recFolderFile, rfu.isPlayOnlyMode, isRtmpOnlyPage, isChase); Task.Run(() => { rss.set(data, type, recFolderFileInfo); //hosoInfo if (rm.cfg.get("IshosoInfo") == "true" && !rfu.isPlayOnlyMode) { rss.writeHosoInfo(); } }); util.debugWriteLine("form disposed" + rm.form.IsDisposed); util.debugWriteLine("recfolderfile test " + recFolderFileInfo); var fileName = System.IO.Path.GetFileName(recFolderFile[1]); rm.form.setTitle(fileName); // if (recFolderFile == null) continue; for (int i = 0; i < recFolderFile.Length; i++) { util.debugWriteLine("recd " + i + " " + recFolderFileInfo[i]); } var userId = util.getRegGroup(res, "\"user\"\\:\\{\"user_id\"\\:(.+?),"); if (userId == "null") { userId = "guest"; rm.form.addLogText("非ログインで開始を試みます"); } var isPremium = res.IndexOf("\"member_status\":\"premium\"") > -1; wsr = new WebSocketRecorder(webSocketRecInfo, container, recFolderFile, rm, rfu, this, openTime, isTimeShift, lvid, timeShiftConfig, userId, isPremium, programTime, type, _openTime, isRtmp, isRtmpOnlyPage, isChase, isRealtimeChase, true, rss, vposBaseTime); rm.wsr = wsr; try { isNoPermission = wsr.start(); if (rm.cfg.get("fileNameType") == "10" && (recFolderFile[1].IndexOf("{w}") > -1 || recFolderFile[1].IndexOf("{c}") > -1)) { renameStatistics(rss); } rm.wsr = null; if (wsr.isEndProgram) { if ((!isTimeShift || isChase) && rss.isWrite) { rss.writeEndTime(container, wsr.endTime); } return(3); } } catch (Exception e) { rm.form.addLogText("録画中に予期せぬ問題が発生しました " + e.Message + e.StackTrace + e.Source + e.TargetSite); util.debugWriteLine("wsr start exception " + e.Message + e.StackTrace); } util.debugWriteLine(rm.rfu + " " + rfu + " " + (rm.rfu == rfu)); if (rm.rfu != rfu || isRtmp) { break; } res = getPageSourceFromNewCookie(); } return(1); }
void okBtn_Click(object sender, EventArgs e) { var startType = (isFromLastTimeRadioBtn.Checked) ? 1 : 0; var startTimeMode = (isMostStartTimeRadioBtn.Checked ? 0 :((isStartTimeRadioBtn.Checked) ? 1 : 2)); var endTimeMode = isEndTimeRadioBtn.Checked ? 0 : 1; //var _h = (startType == 0) ? hText.Text : lastFileTime[0]; //var _m = (startType == 0) ? mText.Text : lastFileTime[1]; //var _s = (startType == 0) ? sText.Text : lastFileTime[2]; var _h = hText.Text; var _m = mText.Text; var _s = sText.Text; int h; int m; int s; if (!int.TryParse(_h, out h) || !int.TryParse(_m, out m) || !int.TryParse(_s, out s)) { MessageBox.Show("開始時間に数字以外が指定されています"); return; } var _endH = endHText.Text; var _endM = endMText.Text; var _endS = endSText.Text; int endH; int endM; int endS; if (!int.TryParse(_endH, out endH) || !int.TryParse(_endM, out endM) || !int.TryParse(_endS, out endS)) { MessageBox.Show("終了時間に数字以外が指定されています"); return; } var timeSeconds = (startTimeMode == 1) ? (h * 3600 + m * 60 + s) : 0; var endTimeSeconds = endH * 3600 + endM * 60 + endS; if (endTimeMode == 0) { endTimeSeconds = 0; } if (endTimeMode == 1 && (endH != 0 || endM != 0 || endS != 0) && endTimeSeconds < timeSeconds) { MessageBox.Show("終了時間が開始時間より前に設定されています"); return; } double updateSecond; if (!double.TryParse(updateListSecondText.Text, out updateSecond)) { MessageBox.Show("M3U8の更新間隔に数字以外が指定されています"); return; } if (updateSecond <= 0.5) { MessageBox.Show("M3U8の更新間隔に0.5以下を指定することはできません"); return; } /* * var isUrlList = isUrlListChkBox.Checked; * var openListCommand = openListCommandText.Text; * var isM3u8List = isM3u8RadioBtn.Checked; * var m3u8UpdateSeconds = updateSecond; * var isOpenUrlList = isOpenListCommandChkBox.Checked; */ var isUrlList = false; var openListCommand = ""; var isM3u8List = false; var m3u8UpdateSeconds = 5.1; var isOpenUrlList = false; //var startTimeMode = (isMostStartTimeRadioBtn.Checked ? 0 :((isStartTimeRadioBtn.Checked) ? 1 : 2)); //var endTimeMode = isEndTimeRadioBtn.Checked ? 0 : 1; var isOpenTimeBaseStart = startTimeMode != 1 ? false : isOpenTimeBaseStartChkBox.Checked; var isOpenTimeBaseEnd = endTimeMode != 1 ? false : isOpenTimeBaseEndChkBox.Checked; ret = new TimeShiftConfig(startType, h, m, s, endH, endM, endS, isRenketuLastFile.Checked, isUrlList, openListCommand, isM3u8List, m3u8UpdateSeconds, isOpenUrlList, isSetVposStartTime.Checked, startTimeMode, endTimeMode, isAfterStartTimeCommentChkBox.Checked, isOpenTimeBaseStart, isOpenTimeBaseEnd, isBeforeEndTimeCommentChkBox.Checked); config.set("IsUrlList", isUrlList.ToString().ToLower()); config.set("IsM3u8List", isM3u8List.ToString().ToLower()); config.set("M3u8UpdateSeconds", m3u8UpdateSeconds.ToString()); config.set("IsOpenUrlList", isOpenUrlList.ToString().ToLower()); config.set("openUrlListCommand", openListCommand); config.set("tsStartTimeMode", startTimeMode.ToString()); config.set("tsEndTimeMode", endTimeMode.ToString()); config.set("tsStartSecond", (h * 3600 + m * 60 + s).ToString()); config.set("tsEndSecond", (endH * 3600 + endM * 60 + endS).ToString()); config.set("tsIsRenketu", isRenketuLastFile.Checked.ToString().ToLower()); config.set("IsVposStartTime", isSetVposStartTime.Checked.ToString().ToLower()); config.set("IsAfterStartTimeComment", isAfterStartTimeCommentChkBox.Checked.ToString().ToLower()); config.set("tsBaseOpenTimeStart", isOpenTimeBaseStartChkBox.Checked.ToString().ToLower()); config.set("tsBaseOpenTimeEnd", isOpenTimeBaseEndChkBox.Checked.ToString().ToLower()); config.set("IsBeforeEndTimeComment", isBeforeEndTimeCommentChkBox.Checked.ToString().ToLower()); Close(); }
public int record(string res, bool isRtmp) { //endcode 0-その他の理由 1-stop 2-最初に終了 3-始まった後に番組終了 recFolderFileInfo = null; string[] recFolderFile = null; var type = util.getRegGroup(res, "\"content_type\":\"(.+?)\""); var data = util.getRegGroup(res, "<script id=\"embedded-data\" data-props=\"([\\d\\D]+?)</script>"); data = System.Web.HttpUtility.HtmlDecode(data); long openTime = 0; if (data == null || !long.TryParse(util.getRegGroup(data, "\"beginTimeMs\":(\\d+)"), out openTime)) { return(3); } // var openTime = long.Parse(util.getRegGroup(data, "\"beginTimeMs\":(\\d+)")); openTime = (long)(openTime / 1000); long endTime = 0; if (data == null || !long.TryParse(util.getRegGroup(data, "\"endTimeMs\":(\\d+)"), out endTime)) { return(3); } endTime = (long)(endTime / 1000); var programTime = util.getUnixToDatetime(endTime) - util.getUnixToDatetime(openTime); long releaseTime = 0; if (data == null || !long.TryParse(util.getRegGroup(data, "\"releaseTimeMs\":(\\d+)"), out releaseTime)) { return(3); } releaseTime = (long)(releaseTime / 1000); long serverTime = 0; if (data == null || !long.TryParse(util.getRegGroup(data, "\"serverTimeMs\":(\\d+)"), out serverTime)) { return(3); } var jisa = util.getUnixToDatetime((long)(serverTime / 1000)) - DateTime.Now; // util.debugWriteLine(data + util.getMainSubStr(isSub, true)); recFolderFileInfo = getRecFolderFileInfo(data, type); if (!isSub) { timeShiftConfig = null; if (!isLive && !isRtmp) { if (rm.ri != null) { timeShiftConfig = rm.ri.tsConfig; } if (rm.argTsConfig != null) { timeShiftConfig = getReadyArgTsConfig(rm.argTsConfig.clone(), recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], recFolderFileInfo[5], releaseTime); } else { timeShiftConfig = getTimeShiftConfig(recFolderFileInfo[0], recFolderFileInfo[1], recFolderFileInfo[2], recFolderFileInfo[3], recFolderFileInfo[4], recFolderFileInfo[5], rm.cfg, releaseTime); if (timeShiftConfig == null) { return(2); } } } if (!rm.isPlayOnlyMode) { // util.debugWriteLine("rm.rfu " + rm.rfu.GetHashCode() + " rfu " + rfu.GetHashCode() + util.getMainSubStr(isSub, true)); // if (recFolderFile == null) recFolderFile = getRecFilePath(releaseTime, isRtmp); if (recFolderFile == null || recFolderFile[0] == null) { //パスが長すぎ rm.form.addLogText("パスに問題があります。 " + recFolderFile[1]); util.debugWriteLine("too long path? " + recFolderFile[1] + util.getMainSubStr(isSub, true)); return(2); } } else { recFolderFile = new string[] { "", "", "" } }; } else { recFolderFile = new string[] { "", "", "" }; } for (int i = 0; i < recFolderFile.Length; i++) { util.debugWriteLine("recd " + i + " " + recFolderFileInfo[i] + util.getMainSubStr(isSub, true)); } var userId = util.getRegGroup(res, "\"user\"\\:\\{\"user_id\"\\:(.+?),"); var isPremium = res.IndexOf("\"member_status\":\"premium\"") > -1; wi = new WatchingInfo(watchingRes); var jrp = new JikkenRecordProcess(container, recFolderFile, rm, rfu, this, openTime, !isLive, lvid, timeShiftConfig, userId, isPremium, programTime, wi, releaseTime, isSub, isRtmp); rm.wsr = jrp; try { jrp.start(); rm.wsr = null; //if (jrp.isEndProgram) if (rm.rfu != rfu) { return(1); } return(3); } catch (Exception e) { util.debugWriteLine("jsp start exception " + e.Message + e.StackTrace + util.getMainSubStr(isSub, true)); } return(1); }
public static string[] getRecFolderFilePath(string host, string group, string title, string lvId, string communityNum, string userId, config cfg, bool isTimeShift, TimeShiftConfig tsConfig) { host = getOkFileName(host); group = getOkFileName(group); title = getOkFileName(title); string[] jarpath = getJarPath(); // util.debugWriteLine(jarpath); //string dirPath = jarpath[0] + "\\rec\\" + host; string _dirPath = (cfg.get("IsdefaultRecordDir") == "true") ? (jarpath[0] + "\\rec") : cfg.get("recordDir"); string dirPath = _dirPath; string sfn = null; if (cfg.get("IscreateSubfolder") == "true") { sfn = getSubFolderName(host, group, title, lvId, communityNum, userId, cfg); if (sfn.Length > 120) { sfn = sfn.Substring(0, 120); } if (sfn == null) { return(null); } dirPath += "/" + sfn; } var segmentSaveType = cfg.get("segmentSaveType"); if (cfg.get("EngineMode") != "0") { segmentSaveType = "0"; } bool _isTimeShift = isTimeShift; if (cfg.get("EngineMode") != "0") { _isTimeShift = false; } var name = getFileName(host, group, title, lvId, communityNum, cfg); if (name.Length > 200) { name = name.Substring(0, 200); } //長いパス調整 if (name.Length + dirPath.Length > 234) { name = lvId; if (name.Length + dirPath.Length > 234 && sfn != null) { sfn = sfn.Substring(0, 3); dirPath = _dirPath + "/" + sfn; if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } if (!Directory.Exists(dirPath)) { return(null); } } } if (name.Length + dirPath.Length > 234) { return new string[] { null, name + " " + dirPath } } ; if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } if (!Directory.Exists(dirPath)) { return(null); } var files = Directory.GetFiles(dirPath); string existFile = null; for (int i = 0; i < 1000000; i++) { var fName = dirPath + "/" + name + "_" + ((_isTimeShift) ? "ts" : "") + i.ToString(); util.debugWriteLine(dirPath + " " + fName); if (!_isTimeShift) { if (segmentSaveType == "0" && (File.Exists(fName + ".ts") || File.Exists(fName + ".xml"))) { continue; } else if (segmentSaveType == "1") { if (Directory.Exists(fName)) { continue; } Directory.CreateDirectory(fName); if (!Directory.Exists(fName)) { return(null); } } string[] reta = { dirPath, fName }; return(reta); } else { if (segmentSaveType == "0") { var _existFile = util.existFile(files, "_ts_(\\d+h\\d+m\\d+s)_" + i.ToString(), name); if (_existFile != null) { existFile = _existFile; continue; } if (tsConfig.isContinueConcat) { if (i == 0) { var firstFile = dirPath + "/" + name + "_ts_0h0m0s_" + i.ToString(); string[] retb = { dirPath, firstFile }; return(retb); } else { //fName = dirPath + "/" + name + "_" + ((isTimeShift) ? "ts" : "") + (i - 1).ToString(); existFile = existFile.Substring(0, existFile.Length - 3); string[] retc = { dirPath, existFile }; return(retc); } } else { var firstFile = dirPath + "/" + name + "_ts_0h0m0s_" + i.ToString(); string[] retd = { dirPath, firstFile }; return(retd); } // continue; } else if (segmentSaveType == "1") { if (Directory.Exists(fName)) { string[] rete = { dirPath, fName }; return(rete); } else if (File.Exists(fName)) { continue; } util.debugWriteLine(dirPath + " " + fName); Directory.CreateDirectory(fName); if (!Directory.Exists(fName)) { return(null); } string[] retf = { dirPath, fName }; return(retf); } } } return(null); }
async private Task <int> html5Record(string res, bool isRtmp, int pageType) { //webSocketInfo 0-wsUrl 1-request //recFolderFileInfo host, group, title, lvid, communityNum //return 0-end stream 1-stop // List<Cookie> cookies = context.getCookieStore().getCookies(); // for (Cookie cookie : cookies) System.out.println(cookie.getName() + " " + cookie.getValue()); // ExecutorService exec = Executors.newFixedThreadPool(1); string[] webSocketRecInfo; recFolderFileInfo = null; string[] recFolderFile = null; // Task displayTask = null; // var pageType = util.getPageType(res); // util.debugWriteLine("pagetype " + pageType); var lastSegmentNo = -1; var isNoPermission = false; while (rm.rfu == rfu) { var type = util.getRegGroup(res, "\"content_type\":\"(.+?)\""); var data = util.getRegGroup(res, "<script id=\"embedded-data\" data-props=\"([\\d\\D]+?)</script>"); var isRtmpOnlyPage = res.IndexOf("%3Cgetplayerstatus%20") > -1; if (isRtmpOnlyPage) { isRtmp = true; } if (isRtmpOnlyPage && isTimeShift) { rm.hlsUrl = "timeshift"; } //var pageType = util.getPageType(res); // var pageType = pageType; util.debugWriteLine("pagetype " + pageType + util.getMainSubStr(isSub)); if (((data == null && !isRtmpOnlyPage) || (pageType != 0 && pageType != 7)) && url.IndexOf("wss://") == -1) { //processType 0-ok 1-retry 2-放送終了 3-その他の理由の終了 var processType = processFromPageType(pageType); util.debugWriteLine("processType " + processType + util.getMainSubStr(isSub)); //if (processType == 0 || processType == 1) continue; if (processType == 2) { return(3); } // if (processType == 3) return 0; System.Threading.Thread.Sleep(3000); res = getPageSourceFromNewCookie(); continue; } data = (isRtmpOnlyPage) ? System.Web.HttpUtility.UrlDecode(res) : System.Web.HttpUtility.HtmlDecode(data); long endTime, _openTime, serverTime; // DateTime programTime, jisa; openTime = endTime = _openTime = serverTime = 0; if (rfu.wssUrl == null && !getTimeInfo(data, ref openTime, ref endTime, ref _openTime, ref serverTime, isRtmpOnlyPage)) { return(3); } var programTime = util.getUnixToDatetime(endTime) - util.getUnixToDatetime(openTime); var jisa = util.getUnixToDatetime(serverTime / 1000) - DateTime.Now; // util.debugWriteLine(data); var latency = rm.form.getLatencyText(); //0-wsUrl 1-request webSocketRecInfo = getWebSocketInfo(data, isRtmp, rm.form, latency, rfu.wssUrl); util.debugWriteLine("websocketrecinfo " + webSocketRecInfo); if (webSocketRecInfo == null && !isRtmpOnlyPage) { continue; } util.debugWriteLine("isnopermission " + isNoPermission); // if (isNoPermission) webSocketRecInfo[1] = webSocketRecInfo[1].Replace("\"requireNewStream\":false", "\"requireNewStream\":true"); //recFolderFileInfo = getHtml5RecFolderFileInfo(data, type, isRtmpOnlyPage); if (!isSub) { //timeshift option timeShiftConfig = null; if (isTimeShift && !isRtmpOnlyPage) { if (rm.argTsConfig != null) { timeShiftConfig = rm.argTsConfig.clone(); } else { timeShiftConfig = getTimeShiftConfig(null, null, null, null, null, null, rm.cfg, 0); } if (timeShiftConfig == null) { return(2); } } recFolderFile = new string[] { "", "", "" }; } else { recFolderFile = new string[] { "", "", "" }; } var userId = util.getRegGroup(res, "\"user\"\\:\\{\"user_id\"\\:(.+?),"); var isPremium = res.IndexOf("\"member_status\":\"premium\"") > -1; var wsr = new WebSocketRecorder(webSocketRecInfo, container, recFolderFile, rm, rfu, this, openTime, lastSegmentNo, isTimeShift, lvid, timeShiftConfig, userId, isPremium, programTime, type, _openTime, isSub, isRtmp, latency); rm.wsr = wsr; try { isNoPermission = wsr.start(isRtmpOnlyPage); rm.wsr = null; if (wsr.isEndProgram) { //return (isTimeShift) ? 1 : 3; return(3); } // if (isTimeShift && wsr.isEndProgram) // return 1; } catch (Exception e) { util.debugWriteLine("wsr start exception " + e.Message + e.StackTrace); } // System.Threading.Thread.Sleep(2000); util.debugWriteLine(rm.rfu + " " + rfu + " " + (rm.rfu == rfu)); if (rm.rfu != rfu || isRtmp) { break; } res = getPageSourceFromNewCookie(); } return(1); }
void okBtn_Click(object sender, EventArgs e) { var startType = (isStartTimeRadioBtn.Checked || isMostStartTimeRadioBtn.Checked) ? 0 : 1; var startTimeMode = (isMostStartTimeRadioBtn.Checked ? 0 :((isStartTimeRadioBtn.Checked) ? 1 : 2)); var endTimeMode = isEndTimeRadioBtn.Checked ? 0 : 1; var _h = (startType == 0) ? hText.Text : lastFileTime[0]; var _m = (startType == 0) ? mText.Text : lastFileTime[1]; var _s = (startType == 0) ? sText.Text : lastFileTime[2]; if (startTimeMode == 0) { _h = _m = _s = "0"; } int h, formH; int m, formM; int s, formS; if (!int.TryParse(hText.Text, out formH) || !int.TryParse(mText.Text, out formM) || !int.TryParse(sText.Text, out formS) || !int.TryParse(_h, out h) || !int.TryParse(_m, out m) || !int.TryParse(_s, out s)) { MessageBox.Show("開始時間に数字以外が指定されています"); return; } var _endH = endHText.Text; var _endM = endMText.Text; var _endS = endSText.Text; if (endTimeMode == 0) { _endH = _endM = _endS = "0"; } int endH, formEndH; int endM, formEndM; int endS, formEndS; if (!int.TryParse(endHText.Text, out formEndH) || !int.TryParse(endMText.Text, out formEndM) || !int.TryParse(endSText.Text, out formEndS) || !int.TryParse(_endH, out endH) || !int.TryParse(_endM, out endM) || !int.TryParse(_endS, out endS)) { MessageBox.Show("終了時間に数字以外が指定されています"); return; } var timeSeconds = (startTimeMode == 1) ? (h * 3600 + m * 60 + s) : 0; var endTimeSeconds = endH * 3600 + endM * 60 + endS; if (endTimeMode == 0) { endTimeSeconds = 0; } if (isOpenTimeBaseStartChkBox.Checked) { timeSeconds += prepTime; s += prepTime; } if (isOpenTimeBaseEndChkBox.Checked) { endTimeSeconds += prepTime; endS += prepTime; } if (endTimeMode == 1 && (endH != 0 || endM != 0 || endS != 0) && endTimeSeconds < timeSeconds) { MessageBox.Show("終了時間が開始時間より前に設定されています"); return; } double updateSecond; if (!double.TryParse(updateListSecondText.Text, out updateSecond)) { MessageBox.Show("M3U8の更新間隔に数字以外が指定されています"); return; } if (updateSecond <= 0.5) { MessageBox.Show("M3U8の更新間隔に0.5以下を指定することはできません"); return; } /* * var isUrlList = isUrlListChkBox.Checked; * var openListCommand = openListCommandText.Text; * var isM3u8List = isM3u8RadioBtn.Checked; * var m3u8UpdateSeconds = updateSecond; * var isOpenUrlList = isOpenListCommandChkBox.Checked; */ var isUrlList = false; var openListCommand = ""; var isM3u8List = false; var m3u8UpdateSeconds = 5.1; var isOpenUrlList = false; ret = new TimeShiftConfig(startType, h, m, s, endH, endM, endS, isRenketuLastFile.Checked, isUrlList, openListCommand, isM3u8List, m3u8UpdateSeconds, isOpenUrlList, isSetVposStartTime.Checked, startTimeMode, endTimeMode, isAfterStartTimeCommentChkBox.Checked, isBeforeEndTimeCommentChkBox.Checked); var l = new List <KeyValuePair <string, string> >(); l.Add(new KeyValuePair <string, string>("IsUrlList", isUrlList.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("IsM3u8List", isM3u8List.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("M3u8UpdateSeconds", m3u8UpdateSeconds.ToString())); l.Add(new KeyValuePair <string, string>("IsOpenUrlList", isOpenUrlList.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("openUrlListCommand", openListCommand)); l.Add(new KeyValuePair <string, string>("tsStartTimeMode", startTimeMode.ToString())); l.Add(new KeyValuePair <string, string>("tsEndTimeMode", endTimeMode.ToString())); l.Add(new KeyValuePair <string, string>("tsStartSecond", (formH * 3600 + formM * 60 + formS).ToString())); l.Add(new KeyValuePair <string, string>("tsEndSecond", (formEndH * 3600 + formEndM * 60 + formEndS).ToString())); l.Add(new KeyValuePair <string, string>("tsIsRenketu", isRenketuLastFile.Checked.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("IsVposStartTime", isSetVposStartTime.Checked.ToString().ToLower())); if (prepTime > 0) { l.Add(new KeyValuePair <string, string>("tsBaseOpenTimeStart", isOpenTimeBaseStartChkBox.Checked.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("tsBaseOpenTimeEnd", isOpenTimeBaseEndChkBox.Checked.ToString().ToLower())); } l.Add(new KeyValuePair <string, string>("IsAfterStartTimeComment", isAfterStartTimeCommentChkBox.Checked.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("IsBeforeEndTimeComment", isBeforeEndTimeCommentChkBox.Checked.ToString().ToLower())); config.set(l); /* * config.set("IsUrlList", isUrlList.ToString().ToLower()); * config.set("IsM3u8List", isM3u8List.ToString().ToLower()); * config.set("M3u8UpdateSeconds", m3u8UpdateSeconds.ToString()); * config.set("IsOpenUrlList", isOpenUrlList.ToString().ToLower()); * config.set("openUrlListCommand", openListCommand); * config.set("IsVposStartTime", isSetVposStartTime.Checked.ToString().ToLower()); */ Close(); }
private bool isValidConf(string name, string val, List <string> lowKeys, List <string> defValues, out string setVal, out string setName, List <string> keys) { setVal = null; setName = null; for (var i = 0; i < lowKeys.Count; i++) { if (name.ToLower() != lowKeys[i]) { continue; } if (i < defValues.Count && (defValues[i] == "true" || defValues[i] == "false")) { if (val.ToLower() == "true" || val.ToLower() == "false") { setVal = val.ToLower(); setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "browsernum") { if (val == "1" || val == "2") { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(1 or 2) " + val, false); return(false); } } if (lowKeys[i] == "qualityrank") { if (isValidQualityRank(val)) { setVal = val; setName = keys[i]; return(true); } else { var rankStr = ""; for (var j = 0; j < namaichi.config.config.qualityList.Count; j++) { rankStr += (rankStr != "" ? "," : "") + j.ToString(); } form.addLogText(name + "の値が設定できませんでした(例 「" + rankStr + "」) " + val, false); return(false); } } if (lowKeys[i] == "segmentsavetype") { if (val == "0" || val == "1") { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0 or 1) " + val, false); return(false); } } if (lowKeys[i] == "m3u8updateseconds") { double _s = 0; if (double.TryParse(val, out _s) && _s > 0) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0以上の数値) " + val, false); return(false); } } if (lowKeys[i] == "subfoldernametype") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 1 && _s <= 8) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(1から8の整数) " + val, false); return(false); } } if (lowKeys[i] == "filenametype") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 1 && _s <= 10) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(1から10の整数) " + val, false); return(false); } } if (lowKeys[i] == "filenameformat") { if (val.IndexOf("{0}") > -1) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした({0}を含む文字列) " + val, false); return(false); } } if (lowKeys[i] == "volume") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 0 && _s <= 100) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0から100の整数) " + val, false); return(false); } } if (lowKeys[i] == "afterConvertMode") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 0 && _s <= 15) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0から15の整数) " + val, false); return(false); } } if (lowKeys[i] == "EngineMode") { int _s = 0; if (int.TryParse(val, out _s) && _s >= 0 && _s <= 3) { setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0から3の整数) " + val, false); return(false); } } if (lowKeys[i] == "soundvolume") { int _s = 0; if (int.TryParse(val, out _s)) { if (_s < 0) { val = "0"; } if (_s > 100) { val = "100"; } setVal = val; setName = keys[i]; return(true); } else { form.addLogText(name + "の値が設定できませんでした(0から100の整数) " + val, false); return(false); } } //ts if (lowKeys[i] == "ts-start") { var _t = Regex.Match(val.ToLower(), "((-*\\d*)h)*((-*\\d*)m)*((-*\\d*)s)*"); if (_t.Length != 0) { if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.timeType = 0; tsConfig.timeSeconds = 0; if (_t.Groups[2].Length != 0) { tsConfig.timeSeconds += int.Parse(_t.Groups[2].Value) * 3600; } if (_t.Groups[4].Length != 0) { tsConfig.timeSeconds += int.Parse(_t.Groups[4].Value) * 60; } if (_t.Groups[6].Length != 0) { tsConfig.timeSeconds += int.Parse(_t.Groups[6].Value); } return(false); } else if (val.ToLower() == "continue" || val.ToLower() == "continue-concat") { if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.timeType = 1; tsConfig.isContinueConcat = val.ToLower() == "continue-concat"; return(false); } else { form.addLogText(name + "の値が設定できませんでした(0h0m0s形式の時間 or continue or continue-concat) " + val, false); return(false); } } if (lowKeys[i] == "ts-end") { var _t = Regex.Match(val.ToLower(), "((-*\\d*)h)*((-*\\d*)m)*((-*\\d*)s)*"); if (_t.Length != 0) { if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.endTimeSeconds = 0; if (_t.Groups[2].Length != 0) { tsConfig.endTimeSeconds += int.Parse(_t.Groups[2].Value) * 3600; } if (_t.Groups[4].Length != 0) { tsConfig.endTimeSeconds += int.Parse(_t.Groups[4].Value) * 60; } if (_t.Groups[6].Length != 0) { tsConfig.endTimeSeconds += int.Parse(_t.Groups[6].Value); } return(false); } else { form.addLogText(name + "の値が設定できませんでした(0h0m0s形式の時間) " + val, false); return(false); } } /* * //ts list * if (lowKeys[i] == "ts-list") { * if (val.ToLower() == "true" || val.ToLower() == "false") { * setName = "IsUrlList"; * setVal = val; * if (tsConfig == null) tsConfig = new TimeShiftConfig(); * tsConfig.isOutputUrlList = bool.Parse(val); * return true; * } else { * form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); * return false;; * } * } * if (lowKeys[i] == "ts-list-open") { * if (val.ToLower() == "true" || val.ToLower() == "false") { * setName = "IsOpenUrlList"; * setVal = val; * if (tsConfig == null) tsConfig = new TimeShiftConfig(); * tsConfig.isOpenUrlList = bool.Parse(val); * return true; * } else { * form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); * return false;; * } * } * if (lowKeys[i] == "ts-list-m3u8") { * if (val.ToLower() == "true" || val.ToLower() == "false") { * setName = "IsM3u8List"; * setVal = val; * if (tsConfig == null) tsConfig = new TimeShiftConfig(); * tsConfig.isM3u8List = bool.Parse(val); * return true; * } else { * form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); * return false;; * } * } * if (lowKeys[i] == "ts-list-update") { * double _s = 0; * if (double.TryParse(val, out _s) && _s > 0) { * setName = "M3u8UpdateSeconds"; * setVal = val; * if (tsConfig == null) tsConfig = new TimeShiftConfig(); * tsConfig.m3u8UpdateSeconds = double.Parse(val); * return true; * } else { * form.addLogText(name + "の値が設定できませんでした(0以上の数値) " + val, false); * return false;; * } * } * if (lowKeys[i] == "ts-list-command") { * // if (val.ToLower() == "true" || val.ToLower() == "false") { * setName = "openUrlListCommand"; * setVal = val; * if (tsConfig == null) tsConfig = new TimeShiftConfig(); * tsConfig.openListCommand = val; * return true; * //} else { * // form.addLogText(name + "の値が設定できませんでした(0以上の数値) " + val, false); * // return false;; * //} * } */ if (lowKeys[i] == "ts-vpos-starttime") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "IsVposStartTime"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isVposStartTime = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "ts-starttime-comment") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "IsAfterStartTimeComment"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isAfterStartTimeComment = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "ts-endtime-comment") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "IsBeforeEndTimeComment"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isBeforeEndTimeComment = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "ts-starttime-open") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "tsBaseOpenTimeStart"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isOpenTimeBaseStartArg = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "ts-endtime-open") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "tsBaseOpenTimeEnd"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isOpenTimeBaseEndArg = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } if (lowKeys[i] == "ts-endtime-delete-pos") { if (val.ToLower() == "true" || val.ToLower() == "false") { setName = "tsIsDeletePosTime"; setVal = val; if (tsConfig == null) { tsConfig = new TimeShiftConfig(); } tsConfig.isDeletePosTime = bool.Parse(val); return(true); } else { form.addLogText(name + "の値が設定できませんでした(true or false) " + val, false); return(false);; } } setName = keys[i]; setVal = val; return(true); } return(false); }
void okBtn_Click(object sender, EventArgs e) { var startType = (isStartTimeRadioBtn.Checked) ? 0 : 1; var _h = (startType == 0) ? hText.Text : lastFileTime[0]; var _m = (startType == 0) ? mText.Text : lastFileTime[1]; var _s = (startType == 0) ? sText.Text : lastFileTime[2]; int h; int m; int s; if (!int.TryParse(_h, out h) || !int.TryParse(_m, out m) || !int.TryParse(_s, out s)) { MessageBox.Show("開始時間に数字以外が指定されています"); return; } var _endH = endHText.Text; var _endM = endMText.Text; var _endS = endSText.Text; int endH; int endM; int endS; if (!int.TryParse(_endH, out endH) || !int.TryParse(_endM, out endM) || !int.TryParse(_endS, out endS)) { MessageBox.Show("終了時間に数字以外が指定されています"); return; } var timeSeconds = h * 3600 + m * 60 + s; var endTimeSeconds = endH * 3600 + endM * 60 + endS; if ((endH != 0 || endM != 0 || endS != 0) && endTimeSeconds < timeSeconds) { MessageBox.Show("終了時間が開始時間より前に設定されています"); return; } double updateSecond; if (!double.TryParse(updateListSecondText.Text, out updateSecond)) { MessageBox.Show("M3U8の更新間隔に数字以外が指定されています"); return; } if (updateSecond <= 0.5) { MessageBox.Show("M3U8の更新間隔に0.5以下を指定することはできません"); return; } /* * var isUrlList = isUrlListChkBox.Checked; * var openListCommand = openListCommandText.Text; * var isM3u8List = isM3u8RadioBtn.Checked; * var m3u8UpdateSeconds = updateSecond; * var isOpenUrlList = isOpenListCommandChkBox.Checked; */ var isUrlList = false; var openListCommand = ""; var isM3u8List = false; var m3u8UpdateSeconds = 5.1; var isOpenUrlList = false; ret = new TimeShiftConfig(startType, h, m, s, endH, endM, endS, isRenketuLastFile.Checked, isUrlList, openListCommand, isM3u8List, m3u8UpdateSeconds, isOpenUrlList, isSetVposStartTime.Checked); var l = new List <KeyValuePair <string, string> >(); l.Add(new KeyValuePair <string, string>("IsUrlList", isUrlList.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("IsM3u8List", isM3u8List.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("M3u8UpdateSeconds", m3u8UpdateSeconds.ToString())); l.Add(new KeyValuePair <string, string>("IsOpenUrlList", isOpenUrlList.ToString().ToLower())); l.Add(new KeyValuePair <string, string>("openUrlListCommand", openListCommand)); l.Add(new KeyValuePair <string, string>("IsVposStartTime", isSetVposStartTime.Checked.ToString().ToLower())); config.set(l); /* * config.set("IsUrlList", isUrlList.ToString().ToLower()); * config.set("IsM3u8List", isM3u8List.ToString().ToLower()); * config.set("M3u8UpdateSeconds", m3u8UpdateSeconds.ToString()); * config.set("IsOpenUrlList", isOpenUrlList.ToString().ToLower()); * config.set("openUrlListCommand", openListCommand); * config.set("IsVposStartTime", isSetVposStartTime.Checked.ToString().ToLower()); */ Close(); }
public OutputTimeShiftTsUrlList(TimeShiftConfig tsConfig, RecordingManager rm) { this.tsConfig = tsConfig; this.rm = rm; ext = rm.rfu.h5r.isFmp4 ? ".mp4" : ".ts"; }