示例#1
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;
                });
            }
        }
示例#2
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(); });
            }
        }
示例#3
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);
        }