Esempio n. 1
0
        public async void Start()
        {
            _mw.SetProcessingBtn();
            if (IsRunning)
            {
                _mw.AppendLogln("ERROR", "已经是运行状态了。");
                return;
            }
            //设置运行状态。
            IsRunning = true;

            //读取设置
            var originalRoomId = _mw.roomIdBox.Text;
            var savepath       = _mw.savepathBox.Text;

            _downloadCommentOption = _mw.saveCommentCheckBox.IsChecked ?? true;
            _autoStart             = _mw.waitForStreamCheckBox.IsChecked ?? true;

            //准备查找下载地址
            var pathFinder = new PathFinder(_mw);

            //查找真实房间号
            _roomid = await pathFinder.GetRoomid(originalRoomId);

            if (_roomid != null)
            {
                _mw.SetStartBtn();
            }
            else
            {
                _mw.AppendLogln("ERROR", "未取得真实房间号");
                Stop();
                return; //停止并退出
            }
            //查找真实下载地址
            try
            {
                _flvUrl = await pathFinder.GetTrueUrl(_roomid);
            }catch
            {
                _mw.AppendLogln("ERROR", "未取得下载地址");
                Stop();
                return; //停止并退出
            }

            var cmtProvider = ReceiveComment();

            _flvDownloader       = new FlvDownloader(_roomid, _flvUrl, savepath, _downloadCommentOption, cmtProvider);
            _flvDownloader.Info += _flvDownloader_Info;
            CheckStreaming();
            try
            {
                _flvDownloader.Start();
            }
            catch (Exception e)
            {
                _mw.AppendLogln("ERROR", "下载视频流时出错:" + e.Message);
                Stop();
            }
        }
Esempio n. 2
0
 private void CommentProvider_OnReceivedComment(object sender, ReceivedCommentArgs e)
 {
     //接收到弹幕时的处理。
     if (e.Comment.MsgType != MsgTypeEnum.LiveStart)
     {
         if (e.Comment.MsgType != MsgTypeEnum.LiveEnd)
         {
             return;
         }
         _mw.AppendLogln("INFO", "[主播结束直播]");
         _flvDownloader?.Stop();
         if (!_autoStart)
         {
             Stop();
         }
         else
         {
             _mw.Dispatcher.Invoke(() => { _mw.LiveStatus.Content = "未直播"; });
         }
     }
     else
     {
         _mw.AppendLogln("INFO", "[主播开始直播]");
         if (!_autoStart || _flvDownloader.IsDownloading)
         {
             return;
         }
         _flvDownloader.Start();
         _mw.Dispatcher.Invoke(() => { _mw.LiveStatus.Content = "正在直播"; });
     }
 }
Esempio n. 3
0
        private async void CommentProvider_OnReceivedComment(object sender, ReceivedCommentArgs e)
        {
            //接收到弹幕时的处理。
            if (e.Comment.MsgType != MsgTypeEnum.LiveStart)
            {
                if (e.Comment.MsgType != MsgTypeEnum.LiveEnd)
                {
                    return;
                }
                _mw.AppendLogln("INFO", "[主播结束直播]");
                _flvDownloader?.Stop();
                if (!_autoStart)
                {
                    Stop();
                }
                else
                {
                    _mw.Dispatcher.Invoke(() => { _mw.LiveStatus.Content = "未直播"; });
                }
            }
            else
            {
                _mw.AppendLogln("INFO", "[主播开始直播]");

                if (!_autoStart || _flvDownloader.IsDownloading)
                {
                    return;
                }
                //准备查找下载地址
                var pathFinder = new PathFinder(_mw);

                //查找真实下载地址
                try
                {
                    if (_flvRunning)
                    {
                        return;
                    }
                    _flvRunning = true;
                    _flvUrl     = await pathFinder.GetTrueUrl(_roomid);

                    _flvRunning = false;
                }
                catch
                {
                    _mw.AppendLogln("ERROR", "未取得下载地址");
                    Stop();
                    return; //停止并退出
                }

                _mw.AppendLogln("INFO", "下载地址已更新。");

                _flvDownloader.Start(_flvUrl);
                CheckStreaming();
            }
        }
Esempio n. 4
0
        public async void Start(string savepath)
        {
            try
            {
                if (IsRunning)
                {
                    InfoLogger.SendInfo(_roomid, "ERROR", "已经是运行状态了。");
                    return;
                }
                //设置运行状态。
                IsRunning = true;

                //读取设置
                var config = Config.Instance;
                _downloadCommentOption = config.IsDownloadComment;
                _autoRetry             = config.IsAutoRetry;

                int.TryParse(config.Timeout ?? "2000", out _streamTimeout);

                //获取真实下载地址
                try
                {
                    _flvUrl = await PathFinder.GetTrueUrl(_roomid);
                }
                catch
                {
                    InfoLogger.SendInfo(_roomid, "ERROR", "未取得下载地址");
                    Stop();
                    return; //停止并退出
                }

                flvDownloader       = new FlvDownloader(_roomid, savepath, _downloadCommentOption, _commentProvider);
                flvDownloader.Info += _flvDownloader_Info;
                CheckStreaming();
                try
                {
                    flvDownloader.Start(_flvUrl);
                }
                catch (Exception e)
                {
                    InfoLogger.SendInfo(_roomid, "ERROR", "下载视频流时出错:" + e.Message);
                    Stop();
                }
            }catch (Exception e)
            {
                InfoLogger.SendInfo(_roomid, "ERROR", "未知错误:" + e.Message);
                Stop();
            }
        }
Esempio n. 5
0
        private async void CommentProvider_OnReceivedComment(object sender, ReceivedCommentArgs e)
        {
            try
            {
                //DEBUG: 弹幕显示测试
                _mw.AppendLogln("收到弹幕", e.Comment.CommentUser + ": " + e.Comment.CommentText);
                //接收到弹幕时的处理。
                if (e.Comment.MsgType != MsgTypeEnum.LiveStart)
                {
                    if (e.Comment.MsgType != MsgTypeEnum.LiveEnd)
                    {
                        return;
                    }
                    _mw.AppendLogln("INFO", "[主播结束直播]");
                    _flvDownloader?.Stop();
                    if (!_autoStart)
                    {
                        Stop();
                    }
                    else
                    {
                        _mw.Dispatcher.Invoke(() => { _mw.LiveStatus.Content = "未直播"; });
                    }
                }
                else
                {
                    _mw.AppendLogln("INFO", "[主播开始直播]");

                    if (!_autoStart || _flvDownloader.IsDownloading)
                    {
                        return;
                    }
                    //准备查找下载地址
                    var pathFinder = new PathFinder(_mw);

                    //查找真实下载地址
                    try
                    {
                        if (_flvRunning)
                        {
                            return;
                        }
                        _flvRunning = true;
                        _flvUrl     = await pathFinder.GetTrueUrl(_roomid);

                        _flvRunning = false;
                    }
                    catch
                    {
                        _mw.AppendLogln("ERROR", "未取得下载地址");
                        Stop();
                        return; //停止并退出
                    }

                    _mw.AppendLogln("INFO", "下载地址已更新。");

                    try
                    {
                        _flvDownloader.Start(_flvUrl);
                    }
                    catch (Exception exception)
                    {
                        _mw.AppendLogln("ERROR", "下载视频流时出错:" + exception.Message);
                        Stop();
                    }

                    CheckStreaming();
                }
            }catch (Exception ex)
            {
                _mw.AppendLogln("ERROR", "在收取弹幕时发生未知错误:" + ex.Message);
                Stop();
            }
        }
Esempio n. 6
0
        public async void Start(string savepath)
        {
            try
            {
                if (IsRunning)
                {
                    InfoLogger.SendInfo(_roomid, "ERROR", "已经是运行状态了。");
                    return;
                }
                //设置运行状态。
                IsRunning = true;

                //读取设置
                var config = Config.Instance;
                _downloadCommentOption = config.IsDownloadComment;
                _autoRetry             = config.IsAutoRetry;

                int.TryParse(config.Timeout ?? "2000", out _streamTimeout);

                //获取真实下载地址
                try
                {
                    _flvUrl = await PathFinder.GetTrueUrl(_roomid);
                }
                catch (WebException)
                {
                    InfoLogger.SendInfo(_roomid, "ERROR", "未取得下载地址<net>");
                    Stop(true);
                    return; //停止并退出
                }
                catch
                {
                    InfoLogger.SendInfo(_roomid, "ERROR", "未取得下载地址");
                    Stop();
                    return; //停止并退出
                }

                flvDownloader       = new FlvDownloader(_roomid, savepath, _downloadCommentOption, _commentProvider);
                flvDownloader.Info += _flvDownloader_Info;
                CheckStreaming();

                _larecordedSize = _recordedSize = 0;
                try
                {
                    flvDownloader.Start(_flvUrl);
                }
                catch (WebException e)
                {
                    InfoLogger.SendInfo(_roomid, "ERROR", "下载视频流时出错<net>:" + e.Message);
                    Stop(true);
                    return; //停止并退出
                }
                catch (Exception e)
                {
                    InfoLogger.SendInfo(_roomid, "ERROR", "下载视频流时出错:" + e.Message);
                    Stop();
                }
                _timer = new Timer((e) => {
                    if (_larecordedSize == _recordedSize)
                    {
                        InfoLogger.SendInfo(_roomid, "INFO", "接收流超时,超时时间内文件大小未有变动。");
                        Stop(true);
                    }
                    else
                    {
                        _larecordedSize = _recordedSize;
                    }
                }, null, _streamTimeout, _streamTimeout);
            }
            catch (WebException e)
            {
                InfoLogger.SendInfo(_roomid, "ERROR", "未知错误<net>:" + e.Message);
                Stop(true);
                return; //停止并退出
            }
            catch (Exception e)
            {
                InfoLogger.SendInfo(_roomid, "ERROR", "未知错误:" + e.Message);
                Stop();
            }
        }