public static void 载任务状态检测() { foreach (var item in MMPU.DownList) { if (!item.DownIofo.网络超时 && item.DownIofo.载状态 && item.DownIofo.已下载大小bit > 10000 && item.DownIofo.最后连接时间 != 0 && Gettime() - item.DownIofo.最后连接时间 > 60) { InfoLog.InfoPrintf(item.DownIofo.房间_频道号 + "下载状态异常,重置下载任务", InfoLog.InfoClass.载必要提示); item.DownIofo.网络超时 = true; item.DownIofo.备注 = "下载状态异常,重置下载任务"; Clear(true, item.DownIofo); item.DownIofo.载状态 = false; item.DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); item.DownIofo.WC.CancelAsync(); new Task(() => { string 标题 = bilibili.根据房间号获取房间信息.获取标题(item.DownIofo.标题); if (string.IsNullOrEmpty(标题)) { 标题 = $"重置下载任务{DateTime.Now.ToString("yyyyMMddHHmmssfff")}{new Random().Next(10000,99999)}"; } Downloader DLL = Downloader.新建下载对象(item.DownIofo.平台, item.DownIofo.房间_频道号, bilibili.根据房间号获取房间信息.获取标题(item.DownIofo.标题), Guid.NewGuid().ToString(), bilibili.根据房间号获取房间信息.载地址(item.DownIofo.标题), "下载状态异常,重置下载任务", item.DownIofo.是否保存, item.DownIofo.主播名称, false, null); }).Start(); Upload.UploadTask uploadTask = new Upload.UploadTask(item.DownIofo); uploadTask.UploadVideo(); } } }
/// <summary> /// 测试上传,自动生成相应数据 /// 生成上传源文件,上传顺序从config中获取 /// </summary> public UploadTest() : this(@"./UplaodTest_FilePath/UplaodTest_FileName.flv") { CreateFixedSizeFile(@"UplaodTest_FilePath/UplaodTest_FileName.flv", 1024 * 1024 * 1024); uploadTask = new UploadTask(downIofo); uploadTask.UploadVideo(); }
/// <summary> /// 测试上传,自动生成相应数据 /// 指定上传源路径,上传顺序从config中获取 /// </summary> /// <param name="srcFile">上传源文件路径</param> public UploadTest(string srcFile) { MMPU.Debug模式 = true; MMPU.Debug打印到终端 = true; downIofo = new DownIofoData(); downIofo.主播名称 = "UplaodTest_SteamerName"; downIofo.标题 = "UplaodTest_StreamTitle"; downIofo.房间_频道号 = "UplaodTest_RoomChannel"; downIofo.开始时间 = 0; downIofo.文件保存路径 = srcFile; uploadTask = new UploadTask(downIofo); uploadTask.UploadVideo(); }
/// <summary> /// 测试上传,自动生成相应数据 /// 指定上传源文件,指定上传目标 /// </summary> /// <param name="srcFile">上传源文件路径</param> /// <param name="type">上传目标</param> public UploadTest(string srcFile, string type) { MMPU.Debug模式 = true; MMPU.Debug打印到终端 = true; Uploader.enableUpload = true; downIofo = new DownIofoData(); downIofo.主播名称 = "UplaodTest_SteamerName"; downIofo.标题 = "UplaodTest_StreamTitle"; downIofo.房间_频道号 = "UplaodTest_RoomChannel"; downIofo.开始时间 = 0; downIofo.文件保存路径 = srcFile; Uploader.UploadOrder.Clear(); Uploader.UploadOrder.Add(1, type); uploadTask = new UploadTask(downIofo); uploadTask.UploadVideo(); }
// public event EventHandler<EventArgs> DownUpdate; // public event EventHandler<EventArgs> DownOk; private void 载完成事件(object sender, AsyncCompletedEventArgs e) { new Task((() => { try { DownIofo.载状态 = false; DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); DownIofo.备注 = "下载任务结束"; if (e.Cancelled && !DownIofo.网络超时) { Upload.UploadTask uploadTask = new Upload.UploadTask(DownIofo); if (!DownIofo.播放状态 && DownIofo.是否是播放任务) { DownIofo.备注 = "播放窗口关闭"; DownIofo.载状态 = false; 载结束提醒(true, "下载任务结束", DownIofo); uploadTask.UploadVideo(); return; } DownIofo.继承.待合并文件列表.Add(DownIofo.文件保存路径); DownIofo.备注 = "用户取消,停止下载"; DownIofo.载状态 = false; 载结束提醒(true, "下载任务结束", DownIofo); uploadTask.UploadVideo(); } else if (!e.Cancelled && !bilibili.根据房间号获取房间信息.是否正在直播(DownIofo.房间_频道号, true)) { DownIofo.继承.待合并文件列表.Add(DownIofo.文件保存路径); DownIofo.载状态 = false; DownIofo.备注 = "下载完成,直播间已关闭"; if (DownIofo.继承 == null) { DownIofo.继承.是否为继承对象 = false; } if (DownIofo.继承.是否为继承对象 && !DownIofo.是否是播放任务) { DownIofo.继承.合并后的文件路径 = 载完成合并FLV(DownIofo, true); if (!string.IsNullOrEmpty(DownIofo.继承.合并后的文件路径)) { DownIofo.文件保存路径 = DownIofo.继承.合并后的文件路径; } } if (!DownIofo.是否是播放任务) { FlvMethod.转码(DownIofo.文件保存路径); } InfoLog.InfoPrintf(DownIofo.房间_频道号 + "房间:" + DownIofo.主播名称 + " 下播,录制完成", InfoLog.InfoClass.载必要提示); foreach (var item in RoomInit.bilibili房间主表) { if (item.唯一码 == DownIofo.房间_频道号) { item.直播状态 = false; break; } } DownIofo.载状态 = false; 载结束提醒(true, "下载任务结束", DownIofo); Upload.UploadTask uploadTask = new Upload.UploadTask(DownIofo); uploadTask.UploadVideo(); return; } else { if (bilibili.根据房间号获取房间信息.是否正在直播(DownIofo.房间_频道号, true) && DownIofo.是否保存) { DownIofo.网络超时 = true; DownIofo.载状态 = false; DownIofo.备注 = "下载流中断,检测到房间仍为开播状态,新建续下任务。"; DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); switch (DownIofo.平台) { case "bilibili": { if (!DownIofo.是否是播放任务) { DownIofo.继承.待合并文件列表.Add(DownIofo.文件保存路径); InfoLog.InfoPrintf($"{DownIofo.房间_频道号}:{DownIofo.主播名称}下载任务续下,历史文件加入待合并文件列表:{DownIofo.文件保存路径}", InfoLog.InfoClass.载必要提示); } DownIofo.载状态 = false; Downloader 重连下载对象 = Downloader.新建下载对象( DownIofo.平台, DownIofo.房间_频道号, bilibili.根据房间号获取房间信息.获取标题(DownIofo.房间_频道号), Guid.NewGuid().ToString(), bilibili.根据房间号获取房间信息.载地址(DownIofo.房间_频道号), "重连", DownIofo.是否保存, DownIofo.主播名称, true, DownIofo.文件保存路径, DownIofo ); if (!重连下载对象.DownIofo.载状态) { try { 重连下载对象.DownIofo.弹幕录制基准时间 = DownIofo.弹幕录制基准时间; 重连下载对象.DownIofo.阿B直播流对象 = DownIofo.阿B直播流对象; 重连下载对象.DownIofo.弹幕储存流 = DownIofo.弹幕储存流; 重连下载对象.DownIofo.礼物储存流 = DownIofo.礼物储存流; 重连下载对象.DownIofo.载状态 = false; 重连下载对象.DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); 重连下载对象.DownIofo.备注 = "服务器主动断开连接,直播结束"; foreach (var item in RoomInit.bilibili房间主表) { if (item.唯一码 == DownIofo.房间_频道号) { item.直播状态 = false; break; } } if (DownIofo.继承.是否为继承对象 && !DownIofo.是否是播放任务) { DownIofo.继承.合并后的文件路径 = 载完成合并FLV(DownIofo, true); if (!string.IsNullOrEmpty(DownIofo.继承.合并后的文件路径)) { DownIofo.文件保存路径 = DownIofo.继承.合并后的文件路径; } } if (!DownIofo.是否是播放任务) { FlvMethod.转码(DownIofo.文件保存路径); } DownIofo.备注 = "服务器主动断开连接,直播结束"; 重连下载对象.DownIofo.载状态 = false; 重连下载对象.DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); DownIofo.载状态 = false; DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); 载结束提醒(true, "下载任务结束", 重连下载对象.DownIofo); Upload.UploadTask uploadTask = new Upload.UploadTask(DownIofo); uploadTask.UploadVideo(); } catch (Exception) {} return; } new Task((() => { while (true) { Thread.Sleep(10000); if (重连下载对象.DownIofo.已下载大小bit > 5000) { DownIofo.载状态 = false; DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); 载结束提醒(true, "下载任务结束", DownIofo); 重连下载对象.DownIofo.备注 = "完成重连,正在续命.."; //下载对象.DownIofo.下载状态 = true; return; } if (!bilibili.根据房间号获取房间信息.是否正在直播(DownIofo.房间_频道号, true)) { 重连下载对象.DownIofo.备注 = "停止直播"; DownIofo.备注 = "直播停止,下载完成下载完成"; 重连下载对象.DownIofo.载状态 = false; 重连下载对象.DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); DownIofo.载状态 = false; DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); 重连下载对象.DownIofo.WC.CancelAsync(); MMPU.DownList.Remove(重连下载对象); 载结束提醒(true, "下载任务结束", DownIofo); 载结束提醒(true, "下载任务结束", 重连下载对象.DownIofo); return; } } })).Start(); DownIofo.载状态 = false; break; } default: DownIofo.备注 = "不受支持的平台"; DownIofo.载状态 = false; DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); InfoLog.InfoPrintf("该房间的配置文件发现了与当前版本不支持的平台,请检查文件配置或者检查更新", InfoLog.InfoClass.系统错误信息); //下载结束提醒(false); return; } } else { DownIofo.备注 = "直播停止,下载完成下载完成"; 载结束提醒(true, "下载任务结束", DownIofo); DownIofo.载状态 = false; return; } } DownIofo.载状态 = false; DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); DownIofo.备注 = "下载任务结束"; } catch (Exception ES) { InfoLog.InfoPrintf($"录制任务意外终止:\r\n{ES.ToString()}", InfoLog.InfoClass.系统错误信息); DownIofo.载状态 = false; DownIofo.备注 = "录制任务意外终止,已新建续命任务"; 载结束提醒(true, "录制任务意外终止,已新建续命任务", DownIofo); Downloader 载对象 = new Downloader(); try { DownIofo.载状态 = false; 载对象 = Downloader.新建下载对象( DownIofo.平台, DownIofo.房间_频道号, bilibili.根据房间号获取房间信息.获取标题(DownIofo.房间_频道号), Guid.NewGuid().ToString(), bilibili.根据房间号获取房间信息.载地址(DownIofo.房间_频道号), "前一个下载出现异常,新建下载", DownIofo.是否保存, DownIofo.主播名称, false, DownIofo.文件保存路径 ); } catch (Exception) { try { 载对象.DownIofo.备注 = "新建续下载对象出现异常,放弃新建任务"; 载结束提醒(true, "下载任务结束", DownIofo); 载对象.DownIofo.载状态 = false; 载对象.DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); 载对象.DownIofo.WC.CancelAsync(); MMPU.DownList.Remove(载对象); } catch (Exception) { } } } })).Start(); }