Example #1
0
        private async Task <ApiDataModel <FlvModel> > GetGrpcFlv(PlayInfo playInfo, int qn)
        {
            try
            {
                Proto.Reply.PlayViewReply playViewReply = new Proto.Reply.PlayViewReply();
                Proto.Request.CodeType    codec         = Proto.Request.CodeType.Code264;
                if (playInfo.play_mode == VideoPlayType.Season)
                {
                    playViewReply = await playUrlApi.BangumiPlayView(Convert.ToInt64(playInfo.ep_id), Convert.ToInt64(playInfo.cid), qn, 0, codec, SettingHelper.Account.AccessKey);
                }
                else
                {
                    playViewReply = await playUrlApi.VideoPlayView(Convert.ToInt64(playInfo.avid), Convert.ToInt64(playInfo.cid), qn, 0, codec, SettingHelper.Account.AccessKey);
                }

                FlvModel flvModel = new FlvModel();
                flvModel.accept_description = playViewReply.VideoInfo.StreamList.Select(x => x.StreamInfo.NewDescription).ToList();
                flvModel.accept_quality     = playViewReply.VideoInfo.StreamList.Select(x => x.StreamInfo.Quality).ToList();
                flvModel.code          = 0;
                flvModel.message       = "";
                flvModel.quality       = playViewReply.VideoInfo.Quality;
                flvModel.timelength    = playViewReply.VideoInfo.Timelength;
                flvModel.video_codecid = playViewReply.VideoInfo.VideoCodecid;
                flvModel.durl          = new List <FlvDurlModel>();
                var video = playViewReply.VideoInfo.StreamList.FirstOrDefault(x => x.SegmentVideo != null);
                foreach (var item in video.SegmentVideo.Segment)
                {
                    flvModel.durl.Add(new FlvDurlModel()
                    {
                        backup_url = item.BackupUrl.ToList(),
                        length     = item.Length,
                        order      = item.Order,
                        size       = item.Size,
                        url        = item.Url
                    });
                }
                return(new ApiDataModel <FlvModel>()
                {
                    code = 0,
                    data = flvModel
                });
            }
            catch (Exception ex)
            {
                var data = HandelError <object>(ex);
                if (playInfo.play_mode == VideoPlayType.Season)
                {
                    return(await GetBiliPlusFlv(playInfo, qn));
                }
                return(new ApiDataModel <FlvModel>()
                {
                    code = -999,
                    message = data.message
                });
            }
        }
Example #2
0
        private async Task <ApiDataModel <DashModel> > GetGrpcDash(PlayInfo playInfo, int qn, int mode)
        {
            try
            {
                Proto.Reply.PlayViewReply playViewReply = new Proto.Reply.PlayViewReply();
                Proto.Request.CodeType    codec         = (mode == 1) ? Proto.Request.CodeType.Code264 : Proto.Request.CodeType.Code265;
                if (playInfo.play_mode == VideoPlayType.Season)
                {
                    playViewReply = await playUrlApi.BangumiPlayView(Convert.ToInt64(playInfo.ep_id), Convert.ToInt64(playInfo.cid), qn, 16, codec, SettingHelper.Account.AccessKey);
                }
                else
                {
                    playViewReply = await playUrlApi.VideoPlayView(Convert.ToInt64(playInfo.avid), Convert.ToInt64(playInfo.cid), qn, 16, codec, SettingHelper.Account.AccessKey);
                }

                DashModel dashModel = new DashModel();
                if (playViewReply.VideoInfo.DashAudio == null)
                {
                    return(new ApiDataModel <DashModel>()
                    {
                        code = -910,
                        message = "需要使用FLV"
                    });
                }
                dashModel.accept_description = playViewReply.VideoInfo.StreamList.Select(x => x.StreamInfo.NewDescription).ToList();
                dashModel.accept_quality     = playViewReply.VideoInfo.StreamList.Select(x => x.StreamInfo.Quality).ToList();
                dashModel.format             = playViewReply.VideoInfo.Format;
                dashModel.timelength         = playViewReply.VideoInfo.Timelength;
                dashModel.video_codecid      = playViewReply.VideoInfo.VideoCodecid;
                dashModel.dash       = new DashDashModel();
                dashModel.dash.video = new List <DashItemModel>();
                dashModel.dash.audio = new List <DashItemModel>();
                foreach (var item in playViewReply.VideoInfo.StreamList)
                {
                    dashModel.dash.video.Add(new DashItemModel()
                    {
                        backupUrl  = item.DashVideo.BackupUrl.ToList(),
                        backup_url = item.DashVideo.BackupUrl.ToList(),
                        baseUrl    = item.DashVideo.BaseUrl,
                        bandwidth  = item.DashVideo.Bandwidth,
                        base_url   = item.DashVideo.BaseUrl,
                        codecid    = item.DashVideo.Codecid,
                        mimeType   = "video/mp4",
                        id         = item.StreamInfo.Quality,
                    });
                }
                foreach (var item in playViewReply.VideoInfo.DashAudio)
                {
                    dashModel.dash.audio.Add(new DashItemModel()
                    {
                        backupUrl  = item.BackupUrl.ToList(),
                        backup_url = item.BackupUrl.ToList(),
                        baseUrl    = item.BaseUrl,
                        bandwidth  = item.Bandwidth,
                        base_url   = item.BaseUrl,
                        codecid    = item.Codecid,
                        mimeType   = "video/mp4",
                        id         = item.Id,
                    });
                }


                return(new ApiDataModel <DashModel>()
                {
                    code = 0,
                    data = dashModel
                });
            }
            catch (Exception ex)
            {
                var data = HandelError <object>(ex);
                if (playInfo.play_mode == VideoPlayType.Season)
                {
                    return(await GetBiliPlusDash(playInfo, qn));
                }
                return(new ApiDataModel <DashModel>()
                {
                    code = -999,
                    message = data.message
                });
            }
        }