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 }); } }
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 }); } }