コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }