/// <summary> /// 设置音质 /// </summary> /// <param name="playUrl"></param> /// <param name="defaultAudioQuality"></param> /// <returns></returns> private static ObservableCollection <string> GetAudioQualityFormatList(PlayUrl playUrl, int defaultAudioQuality) { List <string> audioQualityFormatList = new List <string>(); if (playUrl.Dash.Audio == null) { return(new ObservableCollection <string>()); } foreach (PlayUrlDashVideo audio in playUrl.Dash.Audio) { // 音质id大于设置画质时,跳过 if (audio.Id > defaultAudioQuality) { continue; } Quality audioQuality = Constant.GetAudioQualities().FirstOrDefault(t => { return(t.Id == audio.Id); }); if (audioQuality != null) { ListHelper.AddUnique(audioQualityFormatList, audioQuality.Name); } } audioQualityFormatList.Sort(new StringLogicalComparer <string>()); audioQualityFormatList.Reverse(); return(new ObservableCollection <string>(audioQualityFormatList)); }
/// <summary> /// 设置画质 & 视频编码 /// </summary> /// <param name="playUrl"></param> /// <param name="defaultQuality"></param> /// <param name="userInfo"></param> /// <param name="videoCodecs"></param> /// <returns></returns> private static List <VideoQuality> GetVideoQualityList(PlayUrl playUrl, UserInfoSettings userInfo, int defaultQuality, VideoCodecs videoCodecs) { List <VideoQuality> videoQualityList = new List <VideoQuality>(); if (playUrl.Dash.Video == null) { return(videoQualityList); } foreach (PlayUrlDashVideo video in playUrl.Dash.Video) { // 画质id大于设置画质时,跳过 if (video.Id > defaultQuality) { continue; } // 非大会员账户登录时 if (!userInfo.IsVip) { // 如果画质为720P60,跳过 if (video.Id == 74) { continue; } } string qualityFormat = string.Empty; PlayUrlSupportFormat selectedQuality = playUrl.SupportFormats.FirstOrDefault(t => t.Quality == video.Id); if (selectedQuality != null) { qualityFormat = selectedQuality.NewDescription; } // 寻找是否已存在这个画质 // 不存在则添加,存在则修改 string codecName = GetVideoCodecName(video.Codecs); VideoQuality videoQualityExist = videoQualityList.FirstOrDefault(t => t.Quality == video.Id); if (videoQualityExist == null) { List <string> videoCodecList = new List <string>(); if (codecName != string.Empty) { ListHelper.AddUnique(videoCodecList, codecName); } VideoQuality videoQuality = new VideoQuality() { Quality = video.Id, QualityFormat = qualityFormat, VideoCodecList = videoCodecList }; videoQualityList.Add(videoQuality); } else { if (!videoQualityList[videoQualityList.IndexOf(videoQualityExist)].VideoCodecList.Exists(t => t.Equals(codecName))) { if (codecName != string.Empty) { videoQualityList[videoQualityList.IndexOf(videoQualityExist)].VideoCodecList.Add(codecName); } } } // 设置选中的视频编码 VideoQuality selectedVideoQuality = videoQualityList.FirstOrDefault(t => t.Quality == video.Id); if (selectedVideoQuality == null) { continue; } if (videoQualityList[videoQualityList.IndexOf(selectedVideoQuality)].VideoCodecList.Count == 1) { // 当获取的视频没有设置的视频编码时,执行 videoQualityList[videoQualityList.IndexOf(selectedVideoQuality)].SelectedVideoCodec = videoQualityList[videoQualityList.IndexOf(selectedVideoQuality)].VideoCodecList[0]; } // 设置选中的视频编码 switch (videoCodecs) { case VideoCodecs.AVC: if (videoQualityList[videoQualityList.IndexOf(selectedVideoQuality)].VideoCodecList.Contains("H.264/AVC")) { videoQualityList[videoQualityList.IndexOf(selectedVideoQuality)].SelectedVideoCodec = "H.264/AVC"; } break; case VideoCodecs.HEVC: if (videoQualityList[videoQualityList.IndexOf(selectedVideoQuality)].VideoCodecList.Contains("H.265/HEVC")) { videoQualityList[videoQualityList.IndexOf(selectedVideoQuality)].SelectedVideoCodec = "H.265/HEVC"; } break; case VideoCodecs.NONE: break; default: break; } } return(videoQualityList); }