Example #1
0
 public void  载结束提醒(bool 是否结束弹幕录制, string 提醒标题 = "下载任务结束")
 {
     try
     {
         if (是否结束弹幕录制 && MMPU.录制弹幕 && MMPU.弹幕录制种类 == 2)
         {
             try
             {
                 DownIofo.弹幕储存流.WriteLine("</i>");
                 DownIofo.弹幕储存流.Flush();//写入弹幕数据
             }
             catch (Exception)
             { }
             Clear(false);
         }
         else
         {
             Clear(true);
         }
     }
     catch (Exception) { }
     InfoLog.InfoPrintf($"\n=============={提醒标题}================\n" +
                        $"主播名:{DownIofo.主播名称}" +
                        $"\n房间号:{DownIofo.房间_频道号}" +
                        $"\n标题:{DownIofo.标题}" +
                        $"\n开播时间:{MMPU.Unix转换为DateTime(DownIofo.开始时间.ToString())}" +
                        $"\n结束时间:{MMPU.Unix转换为DateTime(DownIofo.结束时间.ToString())}" +
                        $"\n保存路径:{DownIofo.文件保存路径}" +
                        $"\n下载任务类型:{(DownIofo.继承.是否为继承对象 ? "续下任务" : "新建下载任务")}" +
                        $"\n结束原因:{DownIofo.备注}" +
                        $"\n==============={提醒标题}===============\n", InfoLog.InfoClass.载必要提示);
 }
Example #2
0
        public string Start(string 开始后显示的备注)
        {
            DownIofo.开始时间 = Gettime();
            MMPU.DownList.Add(this);
            int a = 0;

            DownIofo.WC = new WebClient();
            DownIofo.WC.Headers.Add("Accept: */*");
            DownIofo.WC.Headers.Add("User-Agent: " + MMPU.UA.Ver.UA());
            DownIofo.WC.Headers.Add("Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4");
            DownIofo.WC.DownloadFileCompleted   += 载完成事件;
            DownIofo.WC.DownloadProgressChanged += 载过程中事件;
            DownIofo.WC.Headers.Add("Accept-Encoding: gzip, deflate, br");
            DownIofo.WC.Headers.Add("Cache-Control: max-age=0");
            DownIofo.WC.Headers.Add("Sec-Fetch-Mode: navigate");
            DownIofo.WC.Headers.Add("Sec-Fetch-Site: none");
            DownIofo.WC.Headers.Add("Sec-Fetch-User: ?1");
            DownIofo.WC.Headers.Add("Upgrade-Insecure-Requests: 1");
            DownIofo.WC.Headers.Add("Cache-Control: max-age=0");
            DownIofo.WC.Headers.Add("Referer: https://www.bilibili.com/");
            if (!string.IsNullOrEmpty(MMPU.Cookie))
            {
                DownIofo.WC.Headers.Add("Cookie", MMPU.Cookie);
            }
            if (!Directory.Exists(GetDirectoryName(DownIofo.文件保存路径)))
            {
                Directory.CreateDirectory(GetDirectoryName(DownIofo.文件保存路径));
            }
            // ReSharper restore AssignNullToNotNullAttribute
            DownIofo.备注  = "等待接收直播数据流";
            DownIofo.载状态 = true;
            MMPU.判断网络路径是否存在 判断文件是否存在 = new MMPU.判断网络路径是否存在();
            while (true)
            {
                Thread.Sleep(5000);
                switch (DownIofo.平台)
                {
                case "bilibili":
                    if (!bilibili.根据房间号获取房间信息.是否正在直播(DownIofo.房间_频道号, true))
                    {
                        InfoLog.InfoPrintf(DownIofo.房间_频道号 + "房间:" + DownIofo.主播名称 + " 房间直播状态为False,取消建立新的下载任务", InfoLog.InfoClass.载必要提示);
                        DownIofo.载状态 = false;
                        DownIofo.备注  = "该房间未直播";

                        DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                        MMPU.DownList.Remove(this);
                        return(null);
                    }
                    break;

                case "主站视频":
                    break;

                default:
                    DownIofo.载状态  = false;
                    DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                    DownIofo.备注   = "不支持的平台";
                    MMPU.DownList.Remove(this);
                    return(null);
                }

                if (判断文件是否存在.判断(DownIofo.载地址, DownIofo.平台, DownIofo.房间_频道号))
                {
                    break;
                }
                else
                {
                    Thread.Sleep(5000);
                    switch (DownIofo.平台)
                    {
                    case "bilibili":
                    {
                        if (bilibili.根据房间号获取房间信息.是否正在直播(DownIofo.房间_频道号, true))
                        {
                            a++;
                            if (判断文件是否存在.判断(DownIofo.载地址, DownIofo.平台, DownIofo.房间_频道号))
                            {
                                //DownIofo.下载地址 = bilibili.根据房间号获取房间信息.下载地址(DownIofo.房间_频道号);
                                break;
                            }
                            else
                            {
                                DownIofo.载地址 = bilibili.根据房间号获取房间信息.载地址(DownIofo.房间_频道号);
                                if (判断文件是否存在.判断(DownIofo.载地址, DownIofo.平台, DownIofo.房间_频道号))
                                {
                                    break;
                                }
                                else
                                {
                                    DownIofo.备注 = "等待房间推流...";
                                    Thread.Sleep(30000);
                                    //return null;
                                }
                            }
                        }
                        else
                        {
                            InfoLog.InfoPrintf(DownIofo.房间_频道号 + "房间:" + DownIofo.主播名称 + " 房间未直播,下载任务取消", InfoLog.InfoClass.载必要提示);
                            DownIofo.载状态  = false;
                            DownIofo.备注   = "该房间未直播";
                            DownIofo.结束时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                            MMPU.DownList.Remove(this);
                            if (DownIofo.继承.是否为继承对象)
                            {
                                //MMPU.弹窗.Add(3000, "重连任务取消", DownIofo.房间_频道号 + ",该房间未直播");
                            }
                            else
                            {
                                MMPU.弹窗.Add(3000, "下载任务取消", DownIofo.房间_频道号 + ",该房间未直播");
                            }

                            return(null);
                        }
                        break;
                    }

                    case "主站视频":
                    {
                        break;
                    }
                    }
                }
            }
            DownIofo.开始时间 = Convert.ToInt32((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
            try
            {
                DownIofo.WC.DownloadFileTaskAsync(new Uri(DownIofo.载地址), DownIofo.文件保存路径);
                InfoLog.InfoPrintf(DownIofo.主播名称 + "开始直播,建立下载任务\r\n==============建立下载任务================\r\n主播名:" + DownIofo.主播名称 + "\r\n房间号:" + DownIofo.房间_频道号 + "\r\n标题:" + DownIofo.标题 + "\r\n开播时间:" + MMPU.Unix转换为DateTime(DownIofo.开始时间.ToString()) + "\r\n保存路径:" + DownIofo.文件保存路径 + "\r\n下载任务类型:" + (DownIofo.继承.是否为继承对象 ? "续下任务" : "新建下载任务") + "\r\n===============建立下载任务===============\r\n", InfoLog.InfoClass.载必要提示);

                if (MMPU.录制弹幕 && !DownIofo.继承.是否为继承对象)
                {
                    DownIofo.弹幕储存流 = new StreamWriter(DownIofo.文件保存路径.Substring(0, DownIofo.文件保存路径.Length - 4) + (MMPU.弹幕录制种类 == 1 ? ".ass" : ".xml"));
                    DownIofo.礼物储存流 = new StreamWriter(DownIofo.文件保存路径 + ".txt");
                    DownIofo.阿B直播流对象.Connect(int.Parse(DownIofo.房间_频道号));
                    DownIofo.阿B直播流对象.MessageReceived += Listener_MessageReceived;
                    DownIofo.弹幕储存流.WriteLine(danmu.返回ASS字幕文件头(DownIofo.标题, DownIofo.房间_频道号, DownIofo.主播名称));
                }
            }
            catch (WebException) {
                DownIofo.备注  = "主播未推流,已结束直播";
                DownIofo.载状态 = false;
                return(null);
            }
            DownIofo.备注  = 开始后显示的备注;
            DownIofo.载状态 = true;

            return(DownIofo.文件保存路径);
        }
Example #3
0
        /// <summary>
        /// 返回下载列表HTML字符串
        /// </summary>
        /// <returns></returns>
        public static string DownloaderInfoPrintf()
        {
            string        返回字符串  = "<html><head><title>%title%</title><meta charset=\"utf-8\"></head><body><table border=\"5\">";
            List <string> 载任务    = new List <string>();
            int           计数     = 1;
            int           完成数量   = 0;
            int           正在下载数量 = 0;

            载任务.Add(string.Format("<tr><td>序号</td><td>房间号</td><td>下载状态</td><td>已下载大小</td><td>备注</td><td>主播名称</td><td>开始时间</td><td>结束时间</td></td>"));
            foreach (var item in MMPU.DownList)
            {
                载任务.Add(string.Format("<tr><td>" + 计数 + "</td><td>" + item.DownIofo.房间_频道号 + "</td><td>" + (item.DownIofo.备注.Contains("断开")? "■下载完成" : (item.DownIofo.载状态 ? "□正在下载" : "■下载完成")) + "</td><td> " + item.DownIofo.已下载大小str + "</td><td>" + item.DownIofo.备注 + "</td><td>" + item.DownIofo.主播名称 + "</td><td>" + MMPU.Unix转换为DateTime(item.DownIofo.开始时间.ToString()) + "</td><td>" + MMPU.Unix转换为DateTime(item.DownIofo.结束时间.ToString()) + "</td></td>"));
                计数++;
                if (item.DownIofo.载状态)
                {
                    正在下载数量++;
                }
                else
                {
                    完成数量++;
                }
            }

            for (int i = 0; i < 载任务.Count; i++)
            {
                返回字符串 += 载任务[i];
            }
            返回字符串 = (返回字符串 + "</table></body></html>").Replace("%title%", "正在下载:" + 正在下载数量 + " 已经完成:" + 完成数量);
            return(返回字符串);
        }
Example #4
0
        // public event EventHandler<EventArgs> DownUpdate;
        // public event EventHandler<EventArgs> DownOk;
        private void  载完成事件(object sender, AsyncCompletedEventArgs e)
        {
            WebClient WWC = (WebClient)sender;

            new Task((() =>
            {
                DownIofo.载状态 = false;
                DownIofo.结束时间 = Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                DownIofo.备注 = "下载任务结束";

                // if (e.Error != null && e.Error.)
                //Clipboard.SetDataObject(e.Error.Message);

                if (e.Cancelled)
                {
                    DownIofo.备注 = "用户取消,停止下载";
                    if (!DownIofo.播放状态 && DownIofo.是否是播放任务)
                    {
                        DownIofo.备注 = "播放窗口关闭";
                        InfoLog.InfoPrintf("下载任务结束\n==============下载任务结束================\n主播名:" + DownIofo.主播名称 + "\n房间号:" + DownIofo.房间_频道号 + "\n标题:" + DownIofo.标题 + "\n开播时间:" + MMPU.Unix转换为DateTime(DownIofo.开始时间.ToString()) + "\n结束时间:" + MMPU.Unix转换为DateTime(DownIofo.结束时间.ToString()) + "\n保存路径:" + DownIofo.文件保存路径 + "\n下载任务类型:" + (DownIofo.继承.是否为继承对象 ? "续下任务" : "新建下载任务") + "\n结束原因:" + DownIofo.备注 + "\n===============下载任务结束===============\n", InfoLog.InfoClass.载必要提示);
                        if (DownIofo.阿B直播流对象 != null && DownIofo.阿B直播流对象.startIn)
                        {
                            DownIofo.阿B直播流对象.Dispose();
                        }
                        return;
                    }
                }
                else if (e.Cancelled == false && !bilibili.根据房间号获取房间信息.是否正在直播(DownIofo.房间_频道号))
                {
                    DownIofo.备注 = "直播停止,下载完成下载完成";
                    InfoLog.InfoPrintf("下载任务结束\n==============下载任务结束================\n主播名:" + DownIofo.主播名称 + "\n房间号:" + DownIofo.房间_频道号 + "\n标题:" + DownIofo.标题 + "\n开播时间:" + MMPU.Unix转换为DateTime(DownIofo.开始时间.ToString()) + "\n结束时间:" + MMPU.Unix转换为DateTime(DownIofo.结束时间.ToString()) + "\n保存路径:" + DownIofo.文件保存路径 + "\n下载任务类型:" + (DownIofo.继承.是否为继承对象 ? "续下任务" : "新建下载任务") + "\n结束原因:" + DownIofo.备注 + "\n===============下载任务结束===============\n", InfoLog.InfoClass.载必要提示);
                    if (DownIofo.继承 == null)
                    {
                        DownIofo.继承.是否为继承对象 = false;
                    }
                    if (DownIofo.继承.是否为继承对象 && !DownIofo.是否是播放任务)
                    {
                        DownIofo.继承.合并后的文件路径 = 载完成合并FLV(DownIofo.继承.继承的下载文件路径, DownIofo.文件保存路径, true);
                        if (!string.IsNullOrEmpty(DownIofo.继承.合并后的文件路径))
                        {
                            DownIofo.文件保存路径 = DownIofo.继承.合并后的文件路径;
                        }
                    }
                    else if (!DownIofo.是否是播放任务)
                    {
                        FlvMethod.转码(DownIofo.文件保存路径);
                    }
                    InfoLog.InfoPrintf(DownIofo.房间_频道号 + "房间:" + DownIofo.主播名称 + " 下播,录制完成", InfoLog.InfoClass.载必要提示);
                    if (DownIofo.阿B直播流对象 != null && DownIofo.阿B直播流对象.startIn)
                    {
                        DownIofo.阿B直播流对象.Dispose();
                    }
                    foreach (var item in RoomInit.bilibili房间主表)
                    {
                        if (item.唯一码 == DownIofo.房间_频道号)
                        {
                            item.直播状态 = false;
                            break;
                        }
                    }
                    return;
                }
                else
                {
                    if (bilibili.根据房间号获取房间信息.是否正在直播(DownIofo.房间_频道号) && DownIofo.是否保存)
                    {
                        DownIofo.备注 = "下载流断开,但检测到房间仍为开播状态,已新建续下任务";
                        DownIofo.载状态 = false;
                        DownIofo.结束时间 = Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                        switch (DownIofo.平台)
                        {
                        case "bilibili":
                            {
                                if (DownIofo.继承.是否为继承对象 && !DownIofo.是否是播放任务)
                                {
                                    DownIofo.继承.合并后的文件路径 = 载完成合并FLV(DownIofo.继承.继承的下载文件路径, DownIofo.文件保存路径, false);
                                    if (!string.IsNullOrEmpty(DownIofo.继承.合并后的文件路径))
                                    {
                                        DownIofo.文件保存路径 = DownIofo.继承.合并后的文件路径;
                                    }
                                }

                                Downloader 载对象 = Downloader.新建下载对象(
                                    DownIofo.平台,
                                    DownIofo.房间_频道号,
                                    bilibili.根据房间号获取房间信息.获取标题(DownIofo.房间_频道号),
                                    Guid.NewGuid().ToString(),
                                    bilibili.根据房间号获取房间信息.载地址(DownIofo.房间_频道号),
                                    "重连",
                                    DownIofo.是否保存,
                                    DownIofo.主播名称,
                                    true,
                                    DownIofo.文件保存路径
                                    );
                                if (!载对象.DownIofo.载状态)
                                {
                                    载对象.DownIofo.弹幕录制基准时间 = DownIofo.弹幕录制基准时间;
                                    载对象.DownIofo.阿B直播流对象 = DownIofo.阿B直播流对象;
                                    载对象.DownIofo.弹幕储存流 = DownIofo.弹幕储存流;
                                    载对象.DownIofo.载状态 = false;
                                    载对象.DownIofo.结束时间 = Convert.ToInt32((DateTime.UtcNow - 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.继承.继承的下载文件路径, DownIofo.文件保存路径, true);
                                        if (!string.IsNullOrEmpty(DownIofo.继承.合并后的文件路径))
                                        {
                                            DownIofo.文件保存路径 = DownIofo.继承.合并后的文件路径;
                                        }
                                    }
                                    else if (!DownIofo.是否是播放任务)
                                    {
                                        FlvMethod.转码(DownIofo.文件保存路径);
                                    }

                                    InfoLog.InfoPrintf("下载任务结束\n==============下载任务结束================\n主播名:" + DownIofo.主播名称 + "\n房间号:" + DownIofo.房间_频道号 + "\n标题:" + DownIofo.标题 + "\n开播时间:" + MMPU.Unix转换为DateTime(DownIofo.开始时间.ToString()) + "\n结束时间:" + MMPU.Unix转换为DateTime(DownIofo.结束时间.ToString()) + "\n保存路径:" + DownIofo.文件保存路径 + "\n下载任务类型:" + (DownIofo.继承.是否为继承对象 ? "续下任务" : "新建下载任务") + "\n结束原因:" + DownIofo.备注 + "\n===============下载任务结束===============\n", InfoLog.InfoClass.载必要提示);
                                    载对象.DownIofo.载状态 = false;
                                    载对象.DownIofo.结束时间 = Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                                    DownIofo.载状态 = false;
                                    DownIofo.结束时间 = Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                                    return;
                                }
                                new Task((() =>
                                {
                                    while (true)
                                    {
                                        Thread.Sleep(1000);
                                        if (载对象.DownIofo.已下载大小bit > 1000)
                                        {
                                            DownIofo.载状态 = true;
                                            return;
                                        }
                                        if (!bilibili.根据房间号获取房间信息.是否正在直播(DownIofo.房间_频道号))
                                        {
                                            InfoLog.InfoPrintf("下载任务结束\n==============下载任务结束================\n主播名:" + DownIofo.主播名称 + "\n房间号:" + DownIofo.房间_频道号 + "\n标题:" + DownIofo.标题 + "\n开播时间:" + MMPU.Unix转换为DateTime(DownIofo.开始时间.ToString()) + "\n结束时间:" + MMPU.Unix转换为DateTime(DownIofo.结束时间.ToString()) + "\n保存路径:" + DownIofo.文件保存路径 + "\n下载任务类型:" + (DownIofo.继承.是否为继承对象 ? "续下任务" : "新建下载任务") + "\n结束原因:" + DownIofo.备注 + "\n===============下载任务结束===============\n", InfoLog.InfoClass.载必要提示);
                                            载对象.DownIofo.备注 = "停止直播";
                                            载对象.DownIofo.载状态 = false;
                                            载对象.DownIofo.结束时间 = Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                                            DownIofo.载状态 = false;
                                            DownIofo.结束时间 = Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                                            载对象.DownIofo.WC.CancelAsync();
                                            MMPU.DownList.Remove(载对象);
                                            return;
                                        }
                                    }
                                })).Start();
                                break;
                            }

                        //case "youtube":
                        //    {
                        //        break;
                        //    }
                        //case "T台":
                        //    {
                        //        break;
                        //    }
                        //case "FC2":
                        //    {
                        //        break;
                        //    }
                        //case "DDTV直播服务器":
                        //    {
                        //        break;
                        //    }
                        default:
                            DownIofo.载状态 = false;
                            DownIofo.结束时间 = Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
                            InfoLog.InfoPrintf("该房间的配置文件发现了与当前版本不支持的平台,请检查文件配置或者检查更新", InfoLog.InfoClass.系统错误信息);
                            return;
                        }
                    }
                    else
                    {
                        DownIofo.备注 = "直播停止,下载完成下载完成";
                        InfoLog.InfoPrintf("下载任务结束\n==============下载任务结束================\n主播名:" + DownIofo.主播名称 + "\n房间号:" + DownIofo.房间_频道号 + "\n标题:" + DownIofo.标题 + "\n开播时间:" + MMPU.Unix转换为DateTime(DownIofo.开始时间.ToString()) + "\n结束时间:" + MMPU.Unix转换为DateTime(DownIofo.结束时间.ToString()) + "\n保存路径:" + DownIofo.文件保存路径 + "\n下载任务类型:" + (DownIofo.继承.是否为继承对象 ? "续下任务" : "新建下载任务") + "\n结束原因:" + DownIofo.备注 + "\n===============下载任务结束===============\n", InfoLog.InfoClass.载必要提示);
                        if (DownIofo.阿B直播流对象 != null && DownIofo.阿B直播流对象.startIn)
                        {
                            DownIofo.阿B直播流对象.Dispose();
                        }
                        return;
                    }
                }
            })).Start();
        }
Example #5
0
        public static Downloader 新建下载对象(string 平台, string 唯一码, string 标题, string GUID, string 载地址, string 备注, bool 是否保存, string 主播名称, bool 是否为继承项目, string 继承项目的原始文件)
        {
            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
            {
                平台     = 平台,
                房间_频道号 = 唯一码,
                文件保存路径 = 保存路径,
                事件GUID = GUID,
                载地址    = 载地址,
                是否保存   = 是否保存,
                标题     = 标题,
                备注     = 备注,
                主播名称   = 主播名称,
                继承     = new 继承()
                {
                    是否为继承对象   = 是否为继承项目,
                    继承的下载文件路径 = 继承项目的原始文件,
                }
            };
            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";
                }
            }
            MMPU.DownList.Add(载对象);
            载对象.Start(备注);
            InfoLog.InfoPrintf(主播名称 + "开始直播,建立下载任务\n==============建立下载任务================\n主播名:" + 载对象.DownIofo.主播名称 + "\n房间号:" + 唯一码 + "\n标题:" + 标题 + "\n开播时间:" + MMPU.Unix转换为DateTime(载对象.DownIofo.开始时间.ToString()) + "\n保存路径:" + 载对象.DownIofo.文件保存路径 + "\n下载任务类型:" + (载对象.DownIofo.继承.是否为继承对象 ? "续下任务" : "新建下载任务") + "\n===============建立下载任务===============\n", InfoLog.InfoClass.载必要提示);
            return(载对象);
        }