/// <summary> /// 返回延迟最低的连接 /// </summary> /// <param name="URL">连接对象</param> /// <param name="num">采集次数</param> /// <returns></returns> private static string 返回延迟最低的连接(List <延迟对象> URL, double num) { string 默认返回值 = "https://api.vtbs.moe"; double 当前延迟 = 65535.0; foreach (var item in URL) { for (int i = 0; i < num + 1.0; i++) { double T = MMPU.测试延迟(item.CDN_URL + "/v1/vtbs"); double 延迟 = T > 0 ? T : 1000.0; if (i != 0) { item.延迟总计数 += 延迟; } } item.平均延迟 = item.延迟总计数 / num; } foreach (var item in URL) { if (item.平均延迟 < 当前延迟) { 当前延迟 = item.平均延迟; 默认返回值 = item.CDN_URL; } } return(默认返回值); }
public void 软件启动配置初始化() { #region 配置文件设置 try { RoomConfigFile = MMPU.getFiles("RoomConfiguration"); } catch (Exception) { MMPU.setFiles("RoomConfiguration", "./RoomListConfig.json"); RoomConfigFile = "./RoomListConfig.json"; } //播放窗口默认高度 try { MMPU.PlayWindowH = int.Parse(MMPU.getFiles("PlayWindowH")); } catch (Exception) { MMPU.setFiles("PlayWindowH", "450"); MMPU.PlayWindowH = 450; } //播放窗口默认宽度 try { MMPU.PlayWindowW = int.Parse(MMPU.getFiles("PlayWindowW")); } catch (Exception) { MMPU.setFiles("PlayWindowW", "800"); MMPU.PlayWindowH = 800; } //直播缓存目录 try { MMPU.直播缓存目录 = MMPU.getFiles("Livefile"); } catch (Exception) { MMPU.setFiles("Livefile", "./tmp/LiveCache/"); MMPU.直播缓存目录 = "./tmp/LiveCache/"; } //直播缓存目录 try { MMPU.载储存目录 = MMPU.getFiles("file"); } catch (Exception) { MMPU.setFiles("file", "./tmp/"); MMPU.载储存目录 = "./tmp/"; } //直播更新时间 try { MMPU.直播更新时间 = int.Parse(MMPU.getFiles("RoomTime")); } catch (Exception) { MMPU.setFiles("RoomTime", "40"); MMPU.直播更新时间 = 40; } //默认音量 try { MMPU.默认音量 = int.Parse(MMPU.getFiles("DefaultVolume")); } catch (Exception) { MMPU.setFiles("DefaultVolume", "50"); MMPU.默认音量 = 50; } //缩小功能 try { MMPU.缩小功能 = int.Parse(MMPU.getFiles("Zoom")); } catch (Exception) { MMPU.setFiles("Zoom", "1"); MMPU.缩小功能 = 1; } //最大直播并行数量 try { MMPU.最大直播并行数量 = int.Parse(MMPU.getFiles("PlayNum")); } catch (Exception) { MMPU.setFiles("PlayNum", "5"); MMPU.最大直播并行数量 = 5; } //默认弹幕颜色 try { MMPU.默认弹幕颜色 = MMPU.getFiles("DanMuColor"); } catch (Exception) { MMPU.setFiles("DanMuColor", "0xFF, 0x00, 0x00, 0x00"); MMPU.默认弹幕颜色 = "0xFF, 0x00, 0x00, 0x00"; } //默认字幕颜色 try { MMPU.默认字幕颜色 = MMPU.getFiles("ZiMuColor"); } catch (Exception) { MMPU.setFiles("ZiMuColor", "0xFF, 0x00, 0x00, 0x00"); MMPU.默认字幕颜色 = "0xFF, 0x00, 0x00, 0x00"; } //默认字幕大小 try { MMPU.默认字幕大小 = int.Parse(MMPU.getFiles("ZiMuSize")); } catch (Exception) { MMPU.setFiles("ZiMuSize", "24"); MMPU.默认字幕大小 = 24; } //默认弹幕大小 try { MMPU.默认弹幕大小 = int.Parse(MMPU.getFiles("DanMuSize")); } catch (Exception) { MMPU.setFiles("DanMuSize", "20"); MMPU.默认弹幕大小 = 20; } #endregion //初始化房间 RoomInit.start(); //公告加载线程 new Thread(new ThreadStart(delegate { 公告项目启动(); })).Start(); //房间刷新线程 new Thread(new ThreadStart(delegate { while (true) { 刷新房间列表UI(); Thread.Sleep(5 * 1000); this.Dispatcher.Invoke(new Action(delegate { newtime.Content = "数据更新时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); })); while (true) { if (房间信息更新次数 > 0) { this.Dispatcher.Invoke(new Action(delegate { 首次更新.Visibility = Visibility.Collapsed; })); break; } Thread.Sleep(100); } } })).Start(); //延迟测试 new Thread(new ThreadStart(delegate { while (true) { try { double 国内 = MMPU.测试延迟("https://live.bilibili.com"); string 国内延迟 = string.Empty; string 国外延迟 = string.Empty; if (国内 > 0) { 国内延迟 = "国内服务器延迟(阿B):" + 国内.ToString().Split('.')[0] + "ms"; MMPU.是否能连接阿B = true; } else { 国内延迟 = "国内服务器延迟(阿B): 连接超时"; MMPU.是否能连接阿B = false; } if (MMPU.连接404使能) { double 国外 = MMPU.测试延迟("https://www.google.com"); if (国外 > 0) { 国外延迟 = "国内服务器延迟(404):" + 国外.ToString().Split('.')[0] + "ms"; MMPU.是否能连接404 = true; } else { 国外延迟 = "国内服务器延迟(404): 连接超时"; MMPU.是否能连接404 = false; } } else { MMPU.是否能连接404 = false; 国外延迟 = ""; } this.Dispatcher.Invoke(new Action(delegate { 国内服务器延迟.Content = 国内延迟; })); if (MMPU.连接404使能) { this.Dispatcher.Invoke(new Action(delegate { 国外服务器延迟.Content = 国外延迟; })); } else { this.Dispatcher.Invoke(new Action(delegate { 国外服务器延迟.Content = ""; })); } } catch (Exception) { } Thread.Sleep(4000); } })).Start(); //缩小功能 { MMPU.缩小功能 = int.Parse(MMPU.getFiles("Zoom")); if (MMPU.缩小功能 == 1) { 缩小到任务栏选择按钮.IsChecked = true; } else { 隐藏到后台托盘选择按钮.IsChecked = true; } } //加载配置文件 { 默认音量值显示.Content = MMPU.默认音量; 修改默认音量.Value = MMPU.默认音量; 默认下载路径.Text = MMPU.载储存目录; //读取字幕弹幕颜色 { SolidColorBrush S1 = new SolidColorBrush(Color.FromArgb(0xFF, Convert.ToByte(MMPU.默认字幕颜色.Split(',')[1], 16), Convert.ToByte(MMPU.默认字幕颜色.Split(',')[2], 16), Convert.ToByte(MMPU.默认字幕颜色.Split(',')[3], 16))); this.Dispatcher.Invoke(new Action(delegate { 字幕默认颜色.Foreground = S1; 字幕颜色 = S1; })); SolidColorBrush S2 = new SolidColorBrush(Color.FromArgb(0xFF, Convert.ToByte(MMPU.默认弹幕颜色.Split(',')[1], 16), Convert.ToByte(MMPU.默认弹幕颜色.Split(',')[2], 16), Convert.ToByte(MMPU.默认弹幕颜色.Split(',')[3], 16))); this.Dispatcher.Invoke(new Action(delegate { 弹幕默认颜色.Foreground = S2; 弹幕颜色 = S2; })); } //读取字幕弹幕字体大小 { 字幕文字大小.Text = MMPU.默认字幕大小.ToString(); 弹幕文字大小.Text = MMPU.默认弹幕大小.ToString(); } //默认音量 { 修改默认音量.Value = MMPU.默认音量; } //播放窗口默认大小 { 默认播放宽度.Text = MMPU.PlayWindowW.ToString(); 默认播放高度.Text = MMPU.PlayWindowH.ToString(); } } //增加插件列表 { PluginC.Items.Add(new { 编号 = "1", 称 = "bilibili数据接口插件", 版本 = "1.0.1.1", 是否加载 = "√", 说明 = "获取和处理来自阿B的直播数据流", 备注 = "" }); PluginC.Items.Add(new { 编号 = "2", 称 = "播放插件", 版本 = "1.0.0.4", 是否加载 = "√", 说明 = "用于播放直播视频流", 备注 = "" }); PluginC.Items.Add(new { 编号 = "3", 称 = "DDNA直播统计插件", 版本 = "1.0.0.1", 是否加载 = "√", 说明 = "用于获取目前已知正在直播的vtb列表(工具箱内)", 备注 = "" }); } //剪切板监听,用于播放主站视频 // Thread T1 = new Thread(new ThreadStart(delegate //{ // while (true) // { // try // { // System.Windows.IDataObject iData = System.Windows.Clipboard.GetDataObject(); // string A = (string)iData.GetData(System.Windows.DataFormats.Text); // if (!string.IsNullOrEmpty(A)) // { // if (A.Substring(0, 4).ToLower() == "http" && A.Contains("www.bilibili.com/video/")) // { // string C = A.Replace("www.bilibili.com/video/", "㈨").Split('㈨')[1].Split('/')[0].ToLower().Replace("av", ""); // System.Windows.Clipboard.SetDataObject(""); // // string AB = MMPU.获取网页数据_下载视频用("https://www.bilibili.com/video/av68188405"); // string CIDstr = MMPU.获取网页数据_下载视频用("https://www.bilibili.com/widget/getPageList?aid=" + C, true); // JArray JO1 = (JArray)JsonConvert.DeserializeObject(CIDstr); // string CID = JO1[0]["cid"].ToString(); // string 下载地址 = MMPU.获取网页数据_下载视频用("https://api.bilibili.com/x/player/playurl?avid=" + C + "&cid=" + "118184249" + "&otype=json&qn=116", false); // JObject JO2 = (JObject)JsonConvert.DeserializeObject(下载地址); // 下载地址 = JO2["data"]["durl"][0]["url"].ToString(); // Downloader 下载对象 = new Downloader // { // DownIofo = new Downloader.DownIofoData() { 平台 = "主站视频", 房间_频道号 = "主站视频", 标题 = "主站视频", 事件GUID = Guid.NewGuid().ToString(), 下载地址 = 下载地址, 备注 = "主站视频播放", 是否保存 = false } // }; // //Downloader 下载对象 = Downloader.新建下载对象(平台, 唯一码, 标题, GUID, 下载地址, "视频播放缓存", false); // Task.Run(() => // { // this.Dispatcher.Invoke(new Action(delegate // { // 打开直播列表(下载对象); // MMPU.当前直播窗口数量++; // 等待框.Visibility = Visibility.Collapsed; // })); // }); // } // } // } // catch (Exception ex) // { // } // Thread.Sleep(500); // } //})); // T1.TrySetApartmentState(ApartmentState.STA); // T1.Start(); this.Dispatcher.Invoke(new Action(delegate { 版本显示.Content = "版本:" + MMPU.版本号; })); }