public static string 载完成合并FLV(DownIofoData downIofo, bool 是否直播结束) { string filename = string.Empty; List <string> DelFileList = new List <string>(); if (downIofo.继承.待合并文件列表.Count > 1) { filename = downIofo.继承.待合并文件列表[0]; for (int i = 0; i < downIofo.继承.待合并文件列表.Count - 1; i++) { DelFileList.Add(downIofo.继承.待合并文件列表[i + 1]); FlvMethod.Flv A = new FlvMethod.Flv() { File1Url = filename, File2Url = downIofo.继承.待合并文件列表[i + 1] }; DelFileList.Add(filename); string BB = FlvMethod.FlvSum(A, 是否直播结束); if (string.IsNullOrEmpty(BB)) { InfoLog.InfoPrintf($"{downIofo.房间_频道号}:{downIofo.主播名称}因为网络连接不稳定,无法获取文件头,放弃合并该flv", InfoLog.InfoClass.载必要提示); return(filename); } filename = BB; } } foreach (var item in DelFileList) { MMPU.文件删除委托(item, "FLV合并任务"); } return(filename); }
/// <summary> /// 关闭直播流和弹幕储存流 /// </summary> public static void Clear(bool 续命模式, DownIofoData DOL) { //DOL.备注 = "下载任务结束"; DOL.载状态 = false; if (!续命模式) { try { DOL.阿B直播流对象.Dispose(); InfoLog.InfoPrintf($"{DOL.房间_频道号}房间直播流对象回收完成", InfoLog.InfoClass.Debug); } catch (Exception) { } try { DOL.弹幕储存流.Close(); DOL.弹幕储存流.Dispose(); InfoLog.InfoPrintf($"{DOL.房间_频道号}房间弹幕储存流对象回收完成", InfoLog.InfoClass.Debug); } catch (Exception) { } try { DOL.礼物储存流.Close(); DOL.礼物储存流.Dispose(); InfoLog.InfoPrintf($"{DOL.房间_频道号}房间礼物储存流对象回收完成", InfoLog.InfoClass.Debug); } catch (Exception) { } } try { DOL.WC.Dispose(); InfoLog.InfoPrintf($"{DOL.房间_频道号}房间WebClient对象回收完成", InfoLog.InfoClass.Debug); } catch (Exception) { } }
/// <summary> /// 初始化上传任务 /// </summary> /// <param name="downIofo">下载信息</param> public UploadTask(DownIofoData downIofo) { try { uploadInfo = new UploadInfo(downIofo); //创建上传文件信息 Uploader.UploadList.Add(uploadInfo); //加入上传列表,便于Web端获取上传详情 } catch (CreateUploadTaskFailure) { uploadInfo = null;//无法获取上传信息时为空 } }
/// <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(); }
/// <summary> /// 初始化上传信息 /// </summary> /// <param name="downIofo">下载信息</param> public UploadInfo(DownIofoData downIofo) { try { streamerName = downIofo.主播名称; streamTitle = downIofo.标题; srcFile = downIofo.文件保存路径; fileName = System.IO.Path.GetFileName(srcFile); fileSize = (double)new FileInfo(srcFile).Length; remotePath = $"{downIofo.主播名称}_{downIofo.房间_频道号}/{MMPU.Unix转换为DateTime(downIofo.开始时间.ToString()).ToString("yyyyMMdd")}_{downIofo.标题}/"; type = null; retries = 0; } catch { InfoLog.InfoPrintf($"创建{srcFile}上传任务失败,无法获取文件信息", InfoLog.InfoClass.系统错误信息); throw new CreateUploadTaskFailure("fail to ctreate upload task");//处理获取文件名、文件大小的错误 } }
public void 载结束提醒(bool 是否结束弹幕录制, string 提醒标题, DownIofoData DOL) { try { if (是否结束弹幕录制 && MMPU.录制弹幕 && MMPU.弹幕录制种类 == 2) { try { DOL.弹幕储存流.WriteLine("</i>"); DOL.弹幕储存流.Flush();//写入弹幕数据 } catch (Exception) { } if (DOL != DownIofo) { Clear(false, DownIofo); } Clear(false, DOL); } else { Clear(true, DOL); } } catch (Exception) { } InfoLog.InfoPrintf($"\r\n=============={提醒标题}================\r\n" + $"主播名:{DOL.主播名称}" + $"\r\n房间号:{DOL.房间_频道号}" + $"\r\n标题:{DOL.标题}" + $"\r\n开播时间:{MMPU.Unix转换为DateTime(DOL.开始时间.ToString())}" + $"\r\n结束时间:{MMPU.Unix转换为DateTime(DOL.结束时间.ToString())}" + $"\r\n保存路径:{DOL.文件保存路径}" + $"\r\n下载任务类型:{(DOL.继承.是否为继承对象 ? "续下任务" : "新建下载任务")}" + $"\r\n结束原因:{DOL.备注}" + $"\r\n==============={提醒标题}===============\r\n", InfoLog.InfoClass.载必要提示); }
public static Downloader 新建下载对象(string 平台, string 唯一码, string 标题, string GUID, string 载地址, string 备注, bool 是否保存, string 主播名称, bool 是否为继承项目, string 继承项目的原始文件, DownIofoData 继承的项目 = null) { foreach (var item in MMPU.DownList) { if (item.DownIofo.房间_频道号 == 唯一码) { if (item.DownIofo.载状态 && item.DownIofo.是否保存 && 是否保存) { InfoLog.InfoPrintf($"新建任务冲突,放弃新建任务,任务内容:\r\n房间号:{唯一码}\r\n主播名称:{主播名称}\r\n标题:{标题}", InfoLog.InfoClass.载必要提示); return(null); } else { break; } } } if (string.IsNullOrEmpty(标题)) { 标题 = $"V{new Random().Next(10000,99999)}"; } Downloader 载对象 = new Downloader(); 载对象.DownIofo.继承 = new 继承(); string 缓存路径 = MMPU.缓存路径; string 保存路径; if (MMPU.载储存目录 == 缓存路径) { 保存路径 = 缓存路径 + 平台 + "_" + 主播名称 + "_" + 唯一码 + "/"; if (!Directory.Exists(保存路径))//如果不存在就创建文件夹 { Directory.CreateDirectory(保存路径); } 保存路径 = 保存路径 + 标题 + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".flv"; } else { 保存路径 = MMPU.载储存目录 + "/" + 平台 + "_" + 主播名称 + "_" + 唯一码 + "/"; if (!Directory.Exists(保存路径))//如果不存在就创建file文件夹 { try { Directory.CreateDirectory(保存路径); } catch (Exception) { MMPU.载储存目录 = 缓存路径; MMPU.setFiles("file", MMPU.载储存目录); 保存路径 = MMPU.载储存目录 + "/" + 平台 + "_" + 主播名称 + "_" + 唯一码 + "/"; } } 保存路径 = 保存路径 + 标题 + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".flv"; if (File.Exists(保存路径)) { Thread.Sleep(1); 保存路径 = MMPU.载储存目录 + "/" + 平台 + "_" + 主播名称 + "_" + 唯一码 + "/" + 标题 + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".flv"; } } switch (平台) { case "bilibili": { 载地址 = 载地址; break; } case "youtube": { break; } } 载对象.DownIofo = new Downloader.DownIofoData { 平台 = 平台, 载状态 = true, 房间_频道号 = 唯一码, 文件保存路径 = 保存路径, 事件GUID = GUID, 载地址 = 载地址, 是否保存 = 是否保存, 标题 = 标题, 备注 = 备注, 主播名称 = 主播名称, 继承 = new 继承() { 是否为继承对象 = 是否为继承项目, 继承的下载文件路径 = 继承项目的原始文件, } }; if (继承的项目 != null) { 载对象.DownIofo.继承.待合并文件列表 = 继承的项目.继承.待合并文件列表; } if (!是否保存) { int 随机值 = new Random().Next(1000, 9999); 载对象.DownIofo.文件保存路径 = 缓存路径 + "LiveCache/" + 载对象.DownIofo.标题 + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_" + 随机值 + ".flv"; if (File.Exists(载对象.DownIofo.文件保存路径)) { 载对象.DownIofo.文件保存路径 = 缓存路径 + "LiveCache/" + 载对象.DownIofo.标题 + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_" + (随机值) + 1 + ".flv"; } } 载对象.Start(备注); return(载对象); }