Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        /// <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);
        }