Esempio n. 1
0
        private Task GetVideoCodecs()
        {
            var task = Task.Run(() =>
            {
                #if NETFX_CORE
                var videoCodecList = WebRTC.GetVideoCodecs().OrderBy(CodecInfo =>
                {
                    switch (CodecInfo.Name)
                    {
                    case "VP8": return(1);

                    case "VP9": return(2);

                    case "H264": return(3);

                    default: return(99);
                    }
                });
                lock (_videoLock)
                {
                    foreach (var videoCodec in videoCodecList)
                    {
                        VideoCodecs.Add(videoCodec);
                    }
                }
                #endif
            });

            return(task);
        }
Esempio n. 2
0
 /// <summary>
 /// Initilializes Camerastream
 /// </summary>
 /// <param name="protocol"></param>
 /// <param name="resolution"></param>
 /// <param name="authorizationType"></param>
 /// <param name="videoCodec"></param>
 /// <param name="audioCodec"></param>
 public CameraStream(CameraProtocols protocol, Resolution resolution, CameraAuthorizationTypes authorizationType, VideoCodecs videoCodec, AudioCodecs audioCodec)
 {
     Protocol          = protocol;
     Resolution        = resolution;
     AuthorizationType = authorizationType;
     VideoCodec        = videoCodec;
     AudioCodec        = audioCodec;
 }
 /// <summary>
 /// Initialises ResponseCameraStream
 /// </summary>
 /// <param name="uri"></param>
 /// <param name="expirationTime"></param>
 /// <param name="protocol"></param>
 /// <param name="resolution"></param>
 /// <param name="authorizationType"></param>
 /// <param name="videoCodec"></param>
 /// <param name="audioCodec"></param>
 /// <param name="idle"></param>
 public ResponseCameraStream(string uri, CameraProtocols protocol, Resolution resolution, CameraAuthorizationTypes authorizationType,
                             VideoCodecs videoCodec, AudioCodecs audioCodec, int?idle = null, DateTime?expirationTime = null)
     : base(protocol, resolution, authorizationType, videoCodec, audioCodec)
 {
     URI                = uri;
     ExpirationTime     = expirationTime;
     IdleTimeoutSeconds = idle;
 }
Esempio n. 4
0
        /// <summary>
        /// Generate the necessary parameters
        /// </summary>
        public List <KeyValuePair <string, string> > GetParams()
        {
            var p = new List <KeyValuePair <string, string> >();

            if (EnableTurn != null)
            {
                p.Add(new KeyValuePair <string, string>("EnableTurn", EnableTurn.Value.ToString().ToLower()));
            }

            if (Type != null)
            {
                p.Add(new KeyValuePair <string, string>("Type", Type.ToString()));
            }

            if (UniqueName != null)
            {
                p.Add(new KeyValuePair <string, string>("UniqueName", UniqueName));
            }

            if (StatusCallback != null)
            {
                p.Add(new KeyValuePair <string, string>("StatusCallback", Serializers.Url(StatusCallback)));
            }

            if (StatusCallbackMethod != null)
            {
                p.Add(new KeyValuePair <string, string>("StatusCallbackMethod", StatusCallbackMethod.ToString()));
            }

            if (MaxParticipants != null)
            {
                p.Add(new KeyValuePair <string, string>("MaxParticipants", MaxParticipants.ToString()));
            }

            if (RecordParticipantsOnConnect != null)
            {
                p.Add(new KeyValuePair <string, string>("RecordParticipantsOnConnect", RecordParticipantsOnConnect.Value.ToString().ToLower()));
            }

            if (VideoCodecs != null)
            {
                p.AddRange(VideoCodecs.Select(prop => new KeyValuePair <string, string>("VideoCodecs", prop.ToString())));
            }

            if (MediaRegion != null)
            {
                p.Add(new KeyValuePair <string, string>("MediaRegion", MediaRegion));
            }

            return(p);
        }
Esempio n. 5
0
        /// <summary>
        /// Generate the necessary parameters
        /// </summary>
        public List <KeyValuePair <string, string> > GetParams()
        {
            var p = new List <KeyValuePair <string, string> >();

            if (EnableTurn != null)
            {
                p.Add(new KeyValuePair <string, string>("EnableTurn", EnableTurn.Value.ToString()));
            }

            if (Type != null)
            {
                p.Add(new KeyValuePair <string, string>("Type", Type.ToString()));
            }

            if (UniqueName != null)
            {
                p.Add(new KeyValuePair <string, string>("UniqueName", UniqueName));
            }

            if (StatusCallback != null)
            {
                p.Add(new KeyValuePair <string, string>("StatusCallback", StatusCallback.AbsoluteUri));
            }

            if (StatusCallbackMethod != null)
            {
                p.Add(new KeyValuePair <string, string>("StatusCallbackMethod", StatusCallbackMethod.ToString()));
            }

            if (MaxParticipants != null)
            {
                p.Add(new KeyValuePair <string, string>("MaxParticipants", MaxParticipants.Value.ToString()));
            }

            if (RecordParticipantsOnConnect != null)
            {
                p.Add(new KeyValuePair <string, string>("RecordParticipantsOnConnect", RecordParticipantsOnConnect.Value.ToString()));
            }

            if (VideoCodecs != null)
            {
                p.Add(new KeyValuePair <string, string>("VideoCodecs", VideoCodecs.ToString()));
            }

            if (MediaRegion != null)
            {
                p.Add(new KeyValuePair <string, string>("MediaRegion", MediaRegion));
            }

            return(p);
        }
Esempio n. 6
0
 /// <summary>
 /// 设置优先下载的视频编码
 /// </summary>
 /// <param name="videoCodecs"></param>
 /// <returns></returns>
 public bool SetVideoCodecs(VideoCodecs videoCodecs)
 {
     appSettings.Video.VideoCodecs = videoCodecs;
     return(SetSettings());
 }
 private void TestResponseCameraStream(ResponseCameraStream s, string uri, DateTime expirationTime, int idleTimeout,
                                       CameraProtocols protocol, int width, int height, CameraAuthorizationTypes authorizationType, VideoCodecs videoCodec, AudioCodecs audioCodec)
 {
     Assert.Equal(uri, s.URI);
     Assert.Equal(expirationTime.ToUniversalTime(), s.ExpirationTime);
     Assert.Equal(idleTimeout, s.IdleTimeoutSeconds);
     TestRequestCameraStream(s, protocol, width, height, authorizationType, videoCodec, audioCodec);
 }
 private void TestRequestCameraStream(CameraStream s, CameraProtocols protocol, int width, int height,
                                      CameraAuthorizationTypes authorizationType, VideoCodecs videoCodec, AudioCodecs audioCodec)
 {
     Assert.Equal(protocol, s.Protocol);
     Assert.NotNull(s.Resolution);
     Assert.Equal(width, s.Resolution.Width);
     Assert.Equal(height, s.Resolution.Height);
     Assert.Equal(authorizationType, s.AuthorizationType);
     Assert.Equal(videoCodec, s.VideoCodec);
     Assert.Equal(audioCodec, s.AudioCodec);
 }
Esempio n. 9
0
 /// <summary>
 /// 设置优先下载的视频编码
 /// </summary>
 /// <param name="videoCodecs"></param>
 /// <returns></returns>
 public bool SetVideoCodecs(VideoCodecs videoCodecs)
 {
     settingsEntity.VideoCodecs = videoCodecs;
     return(SetEntity());
 }
Esempio n. 10
0
        /// <summary>
        /// 从视频流更新VideoPage
        /// </summary>
        /// <param name="playUrl"></param>
        /// <param name="page"></param>
        internal static void VideoPageInfo(PlayUrl playUrl, VideoPage page)
        {
            if (playUrl == null)
            {
                return;
            }

            // 视频流信息
            page.PlayUrl = playUrl;

            // 获取设置
            UserInfoSettings userInfo       = SettingsManager.GetInstance().GetUserInfo();
            int         defaultQuality      = SettingsManager.GetInstance().GetQuality();
            VideoCodecs videoCodecs         = SettingsManager.GetInstance().GetVideoCodecs();
            int         defaultAudioQuality = SettingsManager.GetInstance().GetAudioQuality();

            // 未登录时,最高仅720P
            if (userInfo.Mid == -1)
            {
                if (defaultQuality > 64)
                {
                    defaultQuality = 64;
                }
            }

            // 非大会员账户登录时,如果设置的画质高于1080P,则这里限制为1080P
            if (!userInfo.IsVip)
            {
                if (defaultQuality > 80)
                {
                    defaultQuality = 80;
                }
            }

            if (playUrl.Durl != null)
            {
                // 音质

                // 画质

                // 视频编码

                // 时长

                return;
            }

            if (playUrl.Dash != null)
            {
                // 如果video列表或者audio列表没有内容,则返回false
                if (playUrl.Dash.Video == null)
                {
                    return;
                }
                if (playUrl.Dash.Video.Count == 0)
                {
                    return;
                }

                // 音质
                page.AudioQualityFormatList = GetAudioQualityFormatList(playUrl, defaultAudioQuality);
                if (page.AudioQualityFormatList.Count > 0)
                {
                    page.AudioQualityFormat = page.AudioQualityFormatList[0];
                }

                // 画质 & 视频编码
                page.VideoQualityList = GetVideoQualityList(playUrl, userInfo, defaultQuality, videoCodecs);
                if (page.VideoQualityList.Count > 0)
                {
                    page.VideoQuality = page.VideoQualityList[0];
                }

                // 时长
                page.Duration = Format.FormatDuration(playUrl.Dash.Duration);
            }
        }
Esempio n. 11
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);
        }
Esempio n. 12
0
        /// <summary>
        /// Builds the dlna URL.
        /// </summary>
        private static string BuildDlnaUrl(string deviceID, VideoCodecs? videoCodec, AudioCodecs? audioCodec, int? subtitleIndex, int? audiostreamIndex, int? videoBitrate, int? audiochannels, int? audioBitrate, long? startPositionTicks, string profile, string videoLevel)
        {
            var usCulture = new CultureInfo("en-US");

            var dlnaparam = string.Format("Params={0};", deviceID);

            dlnaparam += videoCodec.HasValue ? videoCodec.Value + ";" : ";";
            dlnaparam += audioCodec.HasValue ? audioCodec.Value + ";" : ";";
            dlnaparam += audiostreamIndex.HasValue ? audiostreamIndex.Value.ToString(usCulture) + ";" : ";";
            dlnaparam += subtitleIndex.HasValue ? subtitleIndex.Value.ToString(usCulture) + ";" : ";";
            dlnaparam += videoBitrate.HasValue ? videoBitrate.Value.ToString(usCulture) + ";" : ";";
            dlnaparam += audioBitrate.HasValue ? audioBitrate.Value.ToString(usCulture) + ";" : ";";
            dlnaparam += audiochannels.HasValue ? audiochannels.Value.ToString(usCulture) + ";" : ";";
            dlnaparam += startPositionTicks.HasValue ? startPositionTicks.Value.ToString(usCulture) + ";" : ";";
            dlnaparam += profile + ";";
            dlnaparam += videoLevel + ";";

            return dlnaparam;
        }
Esempio n. 13
0
        private void LoadSettingsInternal()
        {
            cbxCaptureDevices.Items.Clear();
            foreach (DsDevice ds in DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice))
            {
                cbxCaptureDevices.Items.Add(ds.Name);
            }

            List <SystemCodecEntry> systemCodecs = VideoCodecs.GetSupportedVideoCodecs();

            foreach (SystemCodecEntry codec in systemCodecs)
            {
                RadioButton rbCodec = gbxCompression
                                      .Controls
                                      .Cast <Control>()
                                      .SingleOrDefault(x => x is RadioButton && string.Equals(x.Text, codec.DeviceName.ToString())) as RadioButton;

                if (rbCodec != null)
                {
                    rbCodec.Enabled = codec.DeviceName != null && codec.IsInstalled;
                    rbCodec.Tag     = codec;
                    rbCodec.Checked = codec.DeviceName == settings.PreferredCompressorDevice;
                }
            }

            cbxOtherCodecs.Items.Clear();
            foreach (DsDevice ds in DsDevice.GetDevicesOfCat(FilterCategory.VideoCompressorCategory).Where(x => systemCodecs.All(y => y.DeviceName != x.Name)))
            {
                cbxOtherCodecs.Items.Add(ds.Name);
                if (ds.Name == settings.PreferredCompressorDevice)
                {
                    cbxOtherCodecs.SelectedItem      = ds.Name;
                    rbCompressionUnsupported.Checked = true;
                }
            }

            if (cbxCaptureDevices.Items.Count > 0)
            {
                if (cbxCaptureDevices.Items.Contains(settings.PreferredCaptureDevice))
                {
                    cbxCaptureDevices.SelectedIndex = cbxCaptureDevices.Items.IndexOf(settings.PreferredCaptureDevice);
                }
                else
                {
                    cbxCaptureDevices.SelectedIndex = 0;
                }
            }

            cbxSensorType.Items.Clear();
            cbxSensorType.Items.Add(VideoFrameLayout.Monochrome);
            cbxSensorType.Items.Add(VideoFrameLayout.Color);
            //cbxSensorType.Items.Add(VideoFrameLayout.BayerRGGB);
            cbxSensorType.SelectedItem = settings.SimulatedImageLayout;

            cbxMonochromePixelsFrom.Items.Clear();
            cbxMonochromePixelsFrom.Items.Add(LumaConversionMode.R);
            cbxMonochromePixelsFrom.Items.Add(LumaConversionMode.G);
            cbxMonochromePixelsFrom.Items.Add(LumaConversionMode.B);
            cbxMonochromePixelsFrom.Items.Add(LumaConversionMode.GrayScale);
            cbxMonochromePixelsFrom.SelectedItem = settings.LumaConversionMode;
        }