Example #1
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;
        }
Example #2
0
        private void rtmpRecord(string websocketMsg, string quality)
        {
            string url = null;

            if (websocketMsg != null)
            {
                var _msg = util.getRegGroup(websocketMsg, "\"currentStream\":{(.+?)}");
                if (_msg == null)
                {
                    util.debugWriteLine("rtmpRecord _msg null");
                    return;
                }
                url = util.getRegGroup(_msg, "\"uri\":\"(.+?)\"") + "/" + util.getRegGroup(_msg, "\"name\":\"(.+?)\"");
                util.debugWriteLine("rtmp url " + url);
            }

            rfu.subGotNumTaskInfo = new List <numTaskInfo>();
            if (rr != null)
            {
                rr.resetRtmpUrl(url);
            }
            else
            {
                rr = new RtmpRecorder(lvid, container, rm, rfu, !isRtmp, recFolderFile, this, openTime);
                Task.Run(() => {
                    rr.record(url, quality);
                    rm.hlsUrl = "end";
                    if (rr.isEndProgram)
                    {
                        isEndProgram = true;
                        //if (endTime == DateTime.MinValue)
                        //	endTime = DateTime.Now;
                    }
                    isRetry = false;
                });
            }
        }
Example #3
0
        private void process()
        {
            //util.debugWriteLine("testtest" + util.getMainSubStr(isSub, true));

            /*
             * try {var a = new WebSocket4Net.MessageReceivedEventArgs(null, null).Data;}
             * catch (Exception e) {
             *      System.Windows.Forms.MessageBox.Show("websocket", "aa");
             * }
             */
            //util.debugWriteLine(System.Diagnostics.FileVersionInfo.GetVersionInfo("websocket4net.dll").
            if (isRtmp ||
                (rm.cfg.get("IsHokan") == "true" &&
                 !rfu.isRtmpMain && !rm.isPlayOnlyMode &&
                 !rfu.isSubAccountHokan &&
                 rm.cfg.get("EngineMode") == "0" && !isTimeShift))
            {
                rfu.subGotNumTaskInfo = new List <numTaskInfo>();

                rr = new RtmpRecorder(lvid, container, rm, rfu, !isRtmp, recFolderFile, this, releaseTime);
                Task.Run(() => {
                    rr.record(null, null);
                    rm.hlsUrl = "end";
                    if (rr.isEndProgram)
                    {
                        isEndProgram = true;
                    }
                    isRetry = false;
                });
            }
            Task.Run(() => { connectKeeper(); });
            if (!isRtmp)
            {
                Task.Run(() => { record(); });
            }
        }
Example #4
0
        public bool start(bool isRtmpOnlyPage)
        {
            addDebugBuf("ws rec start");

            isXmlComment = false;
            tsWriterTask = Task.Run(() => { startDebugWriter(); });

//			connect(webSocketInfo[0]);
            if (isRtmpOnlyPage)
            {
                Task.Run(() => {
                    rr = new RtmpRecorder(lvid, container, rm, rfu, !isRtmp, recFolderFile, this, openTime);
                    Task.Run(() => {
                        rr.record(null, null);
                        rm.hlsUrl = "end";
                        if (rr.isEndProgram)
                        {
                            isEndProgram = true;
                        }
                        isRetry = false;
                    });
                });
            }
            else
            {
                connect();
                broadcastId = util.getRegGroup(webSocketInfo[0], "watch/.*?(\\d+?)(\\?|/)");
            }

            /*
             * if (isRtmp ||
             *  (rm.cfg.get("IsHokan") == "true" &&
             *   !rfu.isRtmpMain && !rm.isPlayOnlyMode &&
             *   !rfu.isSubAccountHokan && engineMode == "0" && !isTimeShift)) {
             *      rfu.subGotNumTaskInfo = new List<numTaskInfo>();
             *      rr = new RtmpRecorder(lvid, container, rm, rfu, !isRtmp, recFolderFile, this, openTime);
             *      Task.Run(() => {
             *              rr.record();
             *              rm.hlsUrl = "end";
             *              if (rr.isEndProgram) isEndProgram = true;
             *              isRetry = false;
             *      });
             *      /*
             *      Task.Run(() => {
             *          xcg = new XmlCommentGetter(lvid, container, rm, rfu, recFolderFile[1], this, isTimeShift, isRtmp, openTime, _openTime, serverTime);
             *          xcg.get();
             *      });
             *      while (rm.rfu == rfu && isRetry) Thread.Sleep(1000);
             *
             *
             * }
             */

            /*
             * if (!isRtmpOnlyPage) {
             *      connect();
             *      addDebugBuf("rm.rfu dds1 " + rm.rfu);
             *
             *      broadcastId = util.getRegGroup(webSocketInfo[0], "watch/.*?(\\d+?)(\\?|/)");
             * }
             */
//			userId = util.getRegGroup(webSocketInfo[0], "audience_token=.+?_(.+?)_");

            addDebugBuf("rm.rfu dds6 " + rm.rfu);

            addDebugBuf("ws main " + ws + " a " + (ws == null));



//			while (ws.State != WebSocket4Net.WebSocketState.Closed) {
//			while (rm.rfu == rfu && ws != null && isRetry &&
//			       (rec == null || !rec.isStopRead())) {
            while (rm.rfu == rfu && isRetry)
            {
                /*
                 * if (isTimeShift && rm.rfu == rfu &&
                 *      isGetComment == "true" && engineMode == "3" &&
                 *      tscg != null && tscg.isEnd) {
                 *      break;
                 * }
                 */
//				if (rec != null)
//					addDebugBuf("isStopread " + rec.isStopRead());


                if (!isRtmp && ws.State == WebSocket4Net.WebSocketState.Closed)
                {
                    addDebugBuf("no connect loop ws close");
//					connect();
                }

//				if (DateTime.Now > DateTime.Parse("2018/10/19 4:43")) resetWebsocketInfo();
                //test
//				GC.Collect();
//				GC.WaitForPendingFinalizers();

                System.Threading.Thread.Sleep(1000);
            }
//			while (isTimeShift && rm.rfu == rfu)
//				System.Threading.Thread.Sleep(300);


            //util.debugWriteLine("loop end rm.rfu " + rm.rfu.GetHashCode() + " " + rfu.GetHashCode() + " isretry " + isRetry);

            isRetry = false;
            if (rr != null)
            {
                rr.retryMode = (isEndProgram) ? 2 : 1;
            }
//			if (rm.rfu != rfu && tscg != null) tscg.setIsRetry(false);

//			if (isTimeShift && rm.rfu == rfu && tscg != null) {


            if (rm.rfu != rfu)
            {
                //if (rr != null) rr.isRetry = false;
                stopRecording(ws, wsc);
//				ws.Close();
//				wsc.Close();
                if (rec != null)
                {
                    rec.waitForEnd();
                }
            }
            if (!isRetry)
            {
                //if (rr != null) rr.isRetry = false;
                stopRecording(ws, wsc);
                if (rec != null)
                {
                    rec.waitForEnd();
                }
            }


            addDebugBuf("closed saikai");

            return(isNoPermission);
        }
Example #5
0
        private int _rec(string url, bool isSub)
        {
            JikkenRecorder  jr     = null;
            RtmpRecorder    rr     = null;
            var             isRtmp = !isSubAccountHokan && (isRtmpMain || isSub);
            CookieContainer cc     = null;

            var pageType = wssUrl == null?
                           this.getPageType(url, true, isSub, ref jr, out cc) :
                               0;

            container = cc;
            if (pageType == -2 && isSub)
            {
                return(2);
            }
            if (pageType == -1)
            {
                return(2);
            }

            //var ccInd = (isSub) ? 1 : 0;
            var ccInd = 0;

            util.debugWriteLine("pagetype " + pageType + " container " + cc + " isSub " + isSub);
            if ((cc == null || cc == null) && wssUrl == null)
            {
                rm.form.addLogText("ログインに失敗しました。");
                if (bool.Parse(rm.cfg.get("IsmessageBox")) && util.isShowWindow)
                {
                    if (rm.form.IsDisposed)
                    {
                        return(2);
                    }
                    try {
                        rm.form.Invoke((MethodInvoker) delegate() {
                            MessageBox.Show("ログインに失敗しました。(" + util.getMainSubStr(isSub) + ")\n" + lvid, "", MessageBoxButtons.OK, MessageBoxIcon.None);
                        });
                    } catch (Exception e) {
                        util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite);
                    }
                }
                if (bool.Parse(rm.cfg.get("IsfailExit")) && false)
                {
                    rm.rfu = null;
                    if (util.isShowWindow)
                    {
                        try {
                            rm.form.Invoke((MethodInvoker) delegate() {
                                try { rm.form.Close(); }
                                catch (Exception e) {
                                    util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite);
                                }
                            });
                        } catch (Exception e) {
                            util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite);
                        }
                    }
                }

                return(2);
            }

            util.debugWriteLine("pagetype " + pageType);

            while (true && this == rm.rfu)
            {
                util.debugWriteLine("pagetype " + pageType);
                if (pageType == 0 || pageType == 7)
                {
                    if (wssUrl != null)
                    {
                        res = "";
                    }
                    var isJikken  = res.IndexOf("siteId&quot;:&quot;nicocas") > -1;
                    int recResult = 0;

                    if (rm.isPlayOnlyMode && pageType == 7 && isRtmp)
                    {
                        isRtmp = false;
                    }

                    if (isJikken)
                    {
                        if (!jr.isLive && isSub)
                        {
                            return(2);
                        }
                        recResult = jr.record(res, isRtmp);
                    }
                    else
                    {
                        var isTimeShift = pageType == 7;
                        if (isTimeShift && isSub)
                        {
                            return(2);
                        }

                        var h5r = new Html5Recorder(url, cc, lvid, rm, this, isTimeShift, isSub);
                        recResult = h5r.record(res, isRtmp, pageType);
                    }

                    util.debugWriteLine("recresult " + recResult);
                    return(recResult);
                }
                else if (pageType == 1)
                {
                    rm.form.addLogText("満員です。");
                    if (bool.Parse(rm.cfg.get("Isretry")))
                    {
                        System.Threading.Thread.Sleep(10000);

                        while (this == rm.rfu)
                        {
                            try {
                                var wc = new WebHeaderCollection();
                                res = util.getPageSource(url, ref wc, cc);

                                isJikken = res.IndexOf("siteId&quot;:&quot;nicocas") > -1;
                                var _pageType = (isJikken) ? getJikkenPageType(res, isSub, out jr, cc) : util.getPageType(res);
                                util.debugWriteLine(_pageType);
                                if (pageType != 1)
                                {
                                    continue;
                                }

                                System.Threading.Thread.Sleep(5000);
                            } catch (Exception e) {
                                util.debugWriteLine(e.Message + " " + e.StackTrace + " ");
                            }
                        }

                        continue;
                    }
                    else
                    {
                        return(2);
                    }
                }
                else if (pageType == 5)
                {
                    if (bool.Parse(rm.cfg.get("Isretry")))
                    {
                        rm.form.addLogText("接続エラー。10秒後リトライします。");
                        System.Threading.Thread.Sleep(10000);

                        try {
//							var wc = new WebHeaderCollection();
//							res = util.getPageSource(url, ref wc, container);
//							pageType = util.getPageType(res);
                            pageType  = getPageType(url, false, isSub, ref jr, out cc);
                            container = cc;
                            util.debugWriteLine("pagetype_ " + pageType);
                        } catch (Exception e) {
                            util.debugWriteLine(e.Message + " " + e.StackTrace + " ");
//							rm.form.addLogText(e.Message + " " + e.StackTrace + " ");
                        }
                        continue;
                    }
                    else
                    {
                        rm.form.addLogText("接続エラー");
                        return(2);
                    }
                }
                else if (pageType == 6)
                {
                    util.debugWriteLine("pagetype6process");
                    System.Threading.Thread.Sleep(3000);
                    try {
                        pageType  = getPageType(url, false, isSub, ref jr, out cc);
                        container = cc;
                        util.debugWriteLine("pagetype_ " + pageType);
                    } catch (Exception e) {
                        util.debugWriteLine(e.Message + " " + e.StackTrace + " ");
                        rm.form.addLogText(e.Message + " " + e.StackTrace + " ");
                    }
                    continue;
                }
                else if (pageType == 4)
                {
                    rm.form.addLogText("require_community_menber");
//					rm.form.addLogText(res);


                    if (true && false)
                    {
                        rm.rfu = null;
                        if (util.isShowWindow)
                        {
                            try {
                                rm.form.Invoke((MethodInvoker) delegate() {
                                    try { rm.form.Close(); }
                                    catch (Exception e) {
                                        util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite);
                                    }
                                });
                            } catch (Exception e) {
                                util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite);
                            }
                        }
                    }
                    return(2);
                }
                else if (pageType == 8)
                {
                    rm.form.addLogText("この番組の視聴にはシリアル番号が必要です。");
                    return(2);
                }
                else if (pageType == 9)
                {
                    if (isSub)
                    {
                        return(2);
                    }

                    rm.form.addLogText("この番組の視聴には予約が必要です。");
                    return(2);
                }
                else
                {
                    var mes = "";
                    if (pageType == 2)
                    {
                        mes = "この放送は終了しています。";
                    }
                    if (pageType == 3)
                    {
                        mes = "この放送は終了しています。";
                    }
                    if (pageType == 7)
                    {
                        mes = "この放送は終了しています。";
                    }
                    rm.form.addLogText(mes);
                    util.debugWriteLine("pagetype " + pageType + " 終了");

                    if (bool.Parse(rm.cfg.get("IsdeleteExit")) && false)
                    {
                        rm.rfu = null;
                        if (util.isShowWindow)
                        {
                            try {
                                rm.form.Invoke((MethodInvoker) delegate() {
                                    try { rm.form.Close(); }
                                    catch (Exception e) {
                                        util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite);
                                    }
                                });
                            } catch (Exception e) {
                                util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite);
                            }
                        }
                    }
                    return(2);
                    //var nh5r = new NotHtml5Recorder(url, container, lvid, rm, this);
                    //nh5r.record(res);
                }
            }
            return(2);
        }