public static async Task CreateDashDownloadAsync(BiliVideo video, DashVideoInfo videoInfo, DashAudioInfo audioInfo) { try { var download = await BiliDashDownload.CreateAsync(video, videoInfo, audioInfo, Settings.SESSDATA); DownloadPage.Current.CreateDownload(download); download.Completed += async(s, e) => { await LogCompleteAsync(s as BiliDashDownload); _logger.Info($"下载完成 {video.Title}-{video.Name}({video.Bv},P{video.Order})"); }; var task = download.StartAsync(); _logger.Info($"开始下载 {video.Title}-{video.Name}({video.Bv},P{video.Order})"); await task; } catch (WebException e) { _logger.Info(e, e.Message); //var dialog = new ExceptionDialog(e); //await dialog.ShowAsync(); return; } catch (Exception e) { _logger.Error(e, e.Message); //var dialog = new ExceptionDialog(e); //await dialog.ShowAsync(); return; } }
private static async Task <BiliBangumiMaster> GetBangumiMasterAsync(string url, string sessdata) { var json = await HttpHelper.GetJsonAsync(url, sessdata); if (json.code != 0) { throw new ParsingVideoException(); } var list = new List <BiliBangumi>(); int i = 1; foreach (var b in json.result.episodes) { var video = new BiliVideo() { Av = b.aid, Bv = b.bvid, Cid = b.cid, Title = json.result.season_title, Name = b.long_title, Order = i }; var bangumi = new BiliBangumi() { EpisodeId = b.id, Title = video.Title, Name = video.Name, Order = i, CoverUrl = b.cover, Video = video }; list.Add(bangumi); i++; } var master = new BiliBangumiMaster() { SeasonId = json.result.season_id, MediaId = json.result.media_id, Title = json.result.season_title, Evaluate = json.result.evaluate, CoverUrl = json.result.cover, BGCoverUrl = json.result.bkg_cover, SquareCoverUrl = json.result.square_cover, MediaType = (MediaType)(int)json.result.type, EpisodeList = list.ToArray() }; return(master); }
public void processVideoBilibili(IGroupMessageEventArgs e, string bvn) { BiliVideo biliv = new BiliVideo(bvn, MainHolder.biliapi); if (DataBase.me.isUserOperator(e.Sender.Id)) { MainHolder.broadcaster.SendToGroup(e.Sender.Group.Id, "【视频分享】\n《" + biliv.title + "》\nBy " + biliv.owner.name); return; //不处理管理员行为 } string dt = "[视频分享]\n群:" + e.Sender.Group.Name + "\n人:" + e.Sender.Name + "\n分享视频:\n" + biliv.title + "\nUP:" + biliv.owner.name + "\nhttps://www.bilibili.com/video/" + biliv.vid + "\n"; if (biliv.owner.uid == 5659864 || biliv.participants.Contains(new BiliUser(5659864, "", "", "", false, 0, "", 0, 0, new BiliUser.OfficialInfo(), MainHolder.biliapi)) || biliv.owner.uid == 415413197 || biliv.participants.Contains(new BiliUser(415413197, "", "", "", false, 0, "", 0, 0, new BiliUser.OfficialInfo(), MainHolder.biliapi)) )//鹿野发布或参与 { MainHolder.broadcaster.BroadcastToAdminGroup(dt + "【鹿野视频,通过】"); } else if (biliv.owner.fans > 500000) { MainHolder.broadcaster.BroadcastToAdminGroup(dt + "【通识up,通过】"); } else if (biliv.owner.official.Type == BiliUser.OfficialType.Organization) { MainHolder.broadcaster.BroadcastToAdminGroup(dt + "【机构官方,通过】"); } else { //违规!警告涉事者并撤回消息 MainHolder.session.RevokeMessageAsync(((SourceMessage)e.Chain[0]).Id); MainHolder.broadcaster.SendToGroup(e.Sender.Group.Id, "该视频不被允许分享。请仔细阅读群规。\n特殊情况请联系管理员哦"); MainHolder.broadcaster.BroadcastToAdminGroup(dt + "【涉嫌推广,已撤回】"); return; } MainHolder.broadcaster.SendToGroup(e.Sender.Group.Id, "《" + biliv.title + "》\nBy " + biliv.owner.name); }
public static async Task <BiliVideoDashInfo> GetVideoDashStreamAsync(BiliVideo video, string sessdata = null) { var info = new BiliVideoDashInfo(); var json = await HttpHelper.GetJsonAsync(VIDEO_GET_PLAY_URL, sessdata, $"bvid={video.Bv}&cid={video.Cid}&fnval=16&fourk=1"); var list = new List <BiliVideoQuality>(); foreach (var q in json.data.accept_quality) { list.Add((BiliVideoQuality)q); } info.VideoQualities = list.ToArray(); var list2 = new List <DashVideoInfo>(); foreach (var v in json.data.dash.video) { list2.Add(new DashVideoInfo { Quality = (BiliVideoQuality)v.id, Codec = ((string)v.codecs).Contains("avc") ? BiliVideoCodec.AVC : BiliVideoCodec.HEVC, Url = v.baseUrl }); } info.Videos = list2.ToArray(); var list3 = new List <DashAudioInfo>(); foreach (var a in json.data.dash.audio) { list3.Add(new DashAudioInfo { Quality = (BiliAudioQuality)a.id, Codec = BiliAudioCodec.MP4, Url = a.baseUrl }); } info.Audios = list3.ToArray(); return(info); }
public static async Task <BiliVideo> GetSingleVideoAsync(string bv, long cid, int quality, string sESSDATA) { var master = await GetVideoMasterInfoAsync(bv, sESSDATA); List <(string, string)> cookies = null; if (!string.IsNullOrWhiteSpace(sESSDATA)) { cookies = new List <(string, string)>(); cookies.Add(("SESSDATA", sESSDATA)); } if (quality == 0) { quality = 64; } var json = JsonConvert.DeserializeObject <VideoStreamJson> (await NetHelper.HttpGet("http://api.bilibili.com/x/player/playurl", cookies, $"bvid={bv}", $"cid={cid}", $"qn={quality}", "fnval=16")); if (json.data == null) { throw new ParsingVideoException("视频解析失败,请检查是否缺少大会员权限"); } var video = new BiliVideo(); video.Bv = bv; video.Cid = cid; video.Name = master.VideoList.Where(v => v.Cid == cid).FirstOrDefault().Name; video.P = master.VideoList.Where(v => v.Cid == cid).FirstOrDefault().P; video.Quality = (BiliVideoQuality)json.data.quality; video.Title = master.Title; if ((bool)ApplicationData.Current.LocalSettings.Values["HEVC"])//优先使用hevc { if (json.data.dash.video.Where(v => v.id == quality && v.codecs.Contains("hev")).Count() > 0) { video.VideoUrl = json.data.dash.video.Where(v => v.id == quality && v.codecs.Contains("hev")).FirstOrDefault().baseUrl; } else if (json.data.dash.video.Where(v => v.codecs.Contains("hev")).Count() > 0) { var list = json.data.dash.video.Where(v => v.codecs.Contains("hev")).OrderByDescending(v => v.id).ToList(); video.VideoUrl = list.First().baseUrl; } else if (json.data.dash.video.Where(v => v.id == quality && v.codecs.Contains("avc")).Count() > 0) { video.VideoUrl = json.data.dash.video.Where(v => v.id == quality && v.codecs.Contains("avc")).FirstOrDefault().baseUrl; } else { var list = json.data.dash.video.Where(v => v.codecs.Contains("avc")).OrderByDescending(v => v.id).ToList(); video.VideoUrl = list.First().baseUrl; } } else { if (json.data.dash.video.Where(v => v.id == quality && v.codecs.Contains("avc")).Count() > 0) { video.VideoUrl = json.data.dash.video.Where(v => v.id == quality && v.codecs.Contains("avc")).FirstOrDefault().baseUrl; } else { var list = json.data.dash.video.Where(v => v.codecs.Contains("avc")).OrderByDescending(v => v.id).ToList(); video.VideoUrl = list.First().baseUrl; } } if (json.data.dash.audio.Where(v => v.id == 30280).Count() > 0) { video.AudioUrl = json.data.dash.audio.Where(v => v.id == 30280).FirstOrDefault().baseUrl; } else { var list = json.data.dash.audio.OrderByDescending(v => v.id).ToList(); video.AudioUrl = list.First().baseUrl; } return(video); }