Exemple #1
0
        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);
        }
Exemple #2
0
 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;
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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;
 }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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);
            }
        }
Exemple #8
0
        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);
            }
        }
Exemple #9
0
        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;
        }
Exemple #10
0
        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;
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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, "&quot;permissions&quot;:\\[[^\\]]*(CHASE_PLAY)") != null &&
                                 res.IndexOf("isChasePlayEnabled&quot;: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;
                }

                //;,&quot;permissions&quot;:[&quot;CHASE_PLAY&quot;],&quot;
                //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);
        }
Exemple #14
0
        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();
        }
Exemple #15
0
        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);
        }
Exemple #16
0
    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);
    }
Exemple #17
0
        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();
        }
Exemple #19
0
        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);
        }
Exemple #20
0
        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();
        }
Exemple #21
0
 public OutputTimeShiftTsUrlList(TimeShiftConfig tsConfig, RecordingManager rm)
 {
     this.tsConfig = tsConfig;
     this.rm       = rm;
     ext           = rm.rfu.h5r.isFmp4 ? ".mp4" : ".ts";
 }