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(); } }
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(); } }
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(); } }
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(); } }
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(); } }