예제 #1
0
        public async Task <OnvifMedia10.AudioEncoderConfiguration> getAudioEncodingsAsync(string targetProfileToken)
        {
            AudioEncoderConfiguration configuration = null;

            try
            {
                if (m_mediaClient == null)
                {
                    bool b = await this.InitalizeAsync();

                    if (m_mediaClient != null)
                    {
                        return(null);
                    }
                }


                configuration = await m_mediaClient.GetAudioEncoderConfigurationAsync(targetProfileToken);
            }
            catch (Exception ex)
            {
                m_ErrorMessage = ex.Message;
                throw new OnVifException("OnVif1Media.getAudioEncodingsAsync", ex);
                //              return null;
            }


            return(configuration);
        }
예제 #2
0
        public static void AdjustAudio2(
            VideoContainer2 form,
            AudioEncoderConfiguration conf)
        {
            if (conf != null)
            {
                string Encoding = null;
                switch (conf.Encoding)
                {
                case AudioEncoding.G711: Encoding = "PCMA"; break;

                case AudioEncoding.G726: Encoding = "G726"; break;

                case AudioEncoding.AAC: Encoding = "MPEG4-GENERIC"; break;
                }
                bool Done = false;
                if ((conf.Multicast != null) && (conf.Multicast.Address != null))
                {
                    if ((conf.Multicast.Address.Type == IPType.IPv4) && !string.IsNullOrEmpty(conf.Multicast.Address.IPv4Address))
                    {
                        form.ConfigureAudio(Encoding, 1, conf.SampleRate, conf.Multicast.Address.IPv4Address, conf.Multicast.Port, conf.Multicast.TTL);
                        Done = true;
                    }
                    if ((conf.Multicast.Address.Type == IPType.IPv6) && !string.IsNullOrEmpty(conf.Multicast.Address.IPv6Address))
                    {
                        form.ConfigureAudio(Encoding, 1, conf.SampleRate, conf.Multicast.Address.IPv6Address, conf.Multicast.Port, conf.Multicast.TTL);
                        Done = true;
                    }
                }
                if (!Done)
                {
                    form.ConfigureAudio(Encoding, 1, conf.SampleRate);
                }
            }
        }
        public void AudioEncoderAACConfiguration()
        {
            RunTest(() =>
            {
                string reason;
                AudioEncoderConfiguration[] configs = GetAudioEncoderConfigurations();
                Assert(ValidateAudioEncoderConfigs(configs, out reason), reason, Resources.StepValidatingAudioEncoders_Title);

                AudioEncoderConfigurationOption options = null;
                AudioEncoderConfiguration config        = GetAudioEncoderConfiguration(configs, AudioEncoding.AAC, out options);

                config.Encoding   = AudioEncoding.AAC;
                config.SampleRate = options.SampleRateList[0] + 1;
                config.Bitrate    = options.BitrateList[0];
                //config.SessionTimeout = "PT600S";//send the same as received
                string details = string.Format("Setting invalid configuration (/AudioEncoderConfiguration/SampleRate = {0})", config.SampleRate);
                SetInvalidAudioEncoderConfiguration(config, false, details);

                config.SampleRate = options.SampleRateList[0];
                SetAudioEncoderConfiguration(config, false);

                AudioEncoderConfiguration newConfig = GetAudioEncoderConfiguration(config.token);
                Assert(EqualConfigurations(config, newConfig, out reason),
                       string.Format(Resources.ErrorAudioEncoderConfigNotEqual_Format, reason),
                       Resources.StepCompareAudioEncoderConfigs_Title);
            });
        }
예제 #4
0
        public void GetMediaUri(
            Profile profile,
            VideoSourceConfiguration videoSourceConfig,
            VideoEncoderConfiguration videoEncoderConfig,
            AudioSourceConfiguration audioSourceConfig,
            AudioEncoderConfiguration audioEncoderConfig,
            TransportProtocol protocol)
        {
            RunInBackground(new Action(() =>
            {
                if (profile == null)
                {
                    profile = CreateProfile(TestMediaProfileName);
                }
                ConfigureProfile(profile, videoSourceConfig, videoEncoderConfig, audioSourceConfig, audioEncoderConfig);

                StreamSetup streamSetup        = new StreamSetup();
                streamSetup.Transport          = new Transport();
                streamSetup.Transport.Protocol = protocol;
                streamSetup.Stream             = StreamType.RTPUnicast;

                MediaUri streamUri = Client.GetStreamUri(streamSetup, profile.token);
                if (OnMediaUriReceived != null)
                {
                    OnMediaUriReceived(streamUri, videoEncoderConfig, audioEncoderConfig);
                }
            }));
        }
예제 #5
0
        protected void ConfigureProfile(
            Profile profile,
            VideoSourceConfiguration videoSourceConfig,
            VideoEncoderConfiguration videoEncoderConfig,
            AudioSourceConfiguration audioSourceConfig,
            AudioEncoderConfiguration audioEncoderConfig)
        {
            if ((profile.VideoSourceConfiguration != null) && (profile.VideoSourceConfiguration.token != videoSourceConfig.token))
            {
                Client.RemoveVideoSourceConfiguration(profile.token);
                profile.VideoSourceConfiguration = null;
            }
            if (profile.VideoSourceConfiguration == null)
            {
                Client.AddVideoSourceConfiguration(profile.token, videoSourceConfig.token);
            }

            if ((profile.VideoEncoderConfiguration != null) && (profile.VideoEncoderConfiguration.token != videoEncoderConfig.token))
            {
                Client.RemoveVideoEncoderConfiguration(profile.token);
                profile.VideoEncoderConfiguration = null;
            }
            if (profile.VideoEncoderConfiguration == null)
            {
                Client.AddVideoEncoderConfiguration(profile.token, videoEncoderConfig.token);
            }
            //encoder configuration can be modified - update it
            Client.SetVideoEncoderConfiguration(videoEncoderConfig, false);

            if ((profile.AudioSourceConfiguration != null) &&
                ((audioSourceConfig == null) ||
                 (profile.AudioSourceConfiguration.token != audioSourceConfig.token)))
            {
                Client.RemoveAudioSourceConfiguration(profile.token);
                profile.AudioSourceConfiguration = null;
            }
            if ((profile.AudioSourceConfiguration == null) && (audioSourceConfig != null))
            {
                Client.AddAudioSourceConfiguration(profile.token, audioSourceConfig.token);
            }

            if ((profile.AudioEncoderConfiguration != null) &&
                ((audioEncoderConfig == null) ||
                 (profile.AudioEncoderConfiguration.token != audioEncoderConfig.token)))
            {
                Client.RemoveAudioEncoderConfiguration(profile.token);
                profile.AudioEncoderConfiguration = null;
            }
            if (audioEncoderConfig != null)
            {
                if ((profile.AudioEncoderConfiguration == null) && (audioEncoderConfig != null))
                {
                    Client.AddAudioEncoderConfiguration(profile.token, audioEncoderConfig.token);
                }
                //encoder configuration can be modified - update it
                Client.SetAudioEncoderConfiguration(audioEncoderConfig, false);
            }
        }
        public void TrackModifiedConfiguration(AudioEncoderConfiguration config)
        {
            AudioEncoderConfiguration modified = _modifiedAudioEncoderConfigurations.Where(AEC => AEC.token == config.token).FirstOrDefault();

            if (modified == null)
            {
                _modifiedAudioEncoderConfigurations.Add(config);
            }
        }
예제 #7
0
        /// <summary>
        /// Get stream uri with specified configurations
        /// </summary>
        /// <param name="profile"></param>
        /// <param name="videoSourceConfig">Video source configuration</param>
        /// <param name="videoEncoderConfig">Video encoder configuration</param>
        /// <param name="audioSourceConfig">Audio source configuration</param>
        /// <param name="audioEncoderConfig">Audio encoder configuration</param>
        /// <param name="protocol"></param>
        public void GetMediaUri(
            Proxies.Onvif.Profile profile,
            VideoSourceConfiguration videoSourceConfig,
            VideoEncoderConfiguration videoEncoderConfig,
            AudioSourceConfiguration audioSourceConfig,
            AudioEncoderConfiguration audioEncoderConfig,
            TransportProtocol protocol)
        {
            if ((videoEncoderConfig == null) || (videoSourceConfig == null))
            {
                throw new ArgumentNullException();
            }
            string address = View.MediaAddress;

            _mediaClientWorking = true;
            InitializeMediaClient(address);
            _mediaClient.GetMediaUri(profile, videoSourceConfig, videoEncoderConfig, audioSourceConfig, audioEncoderConfig, protocol);
        }
        public void AudioEncoderConfigurationConsistencyTest()
        {
            RunTest(() =>
            {
                // Audio Encoder configurations

                AudioEncoderConfiguration[] configurations = GetAudioEncoderConfigurations();

                Assert(configurations != null,
                       "DUT did not return any configuration",
                       "Check if the DUT returned configurations");

                foreach (AudioEncoderConfiguration configuration in configurations)
                {
                    AudioEncoderConfiguration config = GetAudioEncoderConfiguration(configuration.token);

                    CompareConfigurations(configuration, config, true);
                }
            });
        }
        public void AudioEncoderConfiguration()
        {
            Profile profile = null;

            RunTest <Profile>(
                new Backup <Profile>(() => { return(null); }),
                () =>
            {
                profile = CreateProfile("testprofilex", null);
                string reason;
                Assert(IsEmptyProfile(profile, out reason), reason, Resources.StepValidatingNewProfile_Title);

                AudioSourceConfiguration[] sourceConfigs = GetAudioSourceConfigurations();
                Assert(ValidateAudioSourceConfigs(sourceConfigs, out reason), reason, Resources.StepValidatingAudioSources_Title);

                AudioSourceConfiguration sourceConfig = sourceConfigs[0];
                AddAudioSourceConfiguration(profile.token, sourceConfig.token);

                AudioEncoderConfiguration[] configs = GetAudioEncoderConfigurations();
                Assert(ValidateAudioEncoderConfigs(configs, out reason), reason, Resources.StepValidatingAudioEncoders_Title);

                configs = GetCompatibleAudioEncoderConfigurations(profile.token);
                Assert(ValidateAudioEncoderConfigs(configs, out reason), reason, Resources.StepValidatingAudioEncoders_Title);

                AudioEncoderConfiguration encoderConfig = configs[0];
                AddAudioEncoderConfiguration(profile.token, encoderConfig.token);

                RemoveAudioEncoderConfiguration(profile.token);
                RemoveAudioSourceConfiguration(profile.token);
                DeleteProfile(profile.token);
                profile = null;
            },
                (param) =>
            {
                if (profile != null)
                {
                    DeleteProfile(profile.token);
                }
            });
        }
            public static Model Create(
                VideoEncoderConfiguration videoEncCfg,
                AudioEncoderConfiguration audioEncCfg,
                VideoAnalyticsConfiguration analyticsCfg,
                PTZConfiguration ptzCfg,
                MetadataConfiguration metaCfg,
                bool isVideoEncCfgEnabled,
                bool isAudioEncCfgEnabled,
                bool isAnalyticsCfgEnabled,
                bool isPtzCfgEnabled,
                bool isMetaCfgEnabled,
                VideoEncoderConfiguration[] videoEncCfgs,
                AudioEncoderConfiguration[] audioEncCfgs,
                PTZConfiguration[] ptzCfgs,
                VideoAnalyticsConfiguration[] analyticsCfgs,
                MetadataConfiguration[] metaCfgs
                )
            {
                var _this = new Model();

                _this.videoEncCfgs                 = videoEncCfgs;
                _this.audioEncCfgs                 = audioEncCfgs;
                _this.ptzCfgs                      = ptzCfgs;
                _this.analyticsCfgs                = analyticsCfgs;
                _this.metaCfgs                     = metaCfgs;
                _this.origin.videoEncCfg           = videoEncCfg;
                _this.origin.audioEncCfg           = audioEncCfg;
                _this.origin.analyticsCfg          = analyticsCfg;
                _this.origin.ptzCfg                = ptzCfg;
                _this.origin.metaCfg               = metaCfg;
                _this.origin.isVideoEncCfgEnabled  = isVideoEncCfgEnabled;
                _this.origin.isAudioEncCfgEnabled  = isAudioEncCfgEnabled;
                _this.origin.isAnalyticsCfgEnabled = isAnalyticsCfgEnabled;
                _this.origin.isPtzCfgEnabled       = isPtzCfgEnabled;
                _this.origin.isMetaCfgEnabled      = isMetaCfgEnabled;
                _this.RevertChanges();

                return(_this);
            }
        public void AudioEncoderConfigurationAndProfileConsistencyTest()
        {
            RunTest(() =>
            {
                Profile[] profiles = GetProfiles();

                Assert(profiles != null,
                       "DUT did not return any profile",
                       "Check if the DUT returned media profiles");

                // Audio encoder configurations

                AudioEncoderConfiguration[] configurations = GetAudioEncoderConfigurations();

                Assert(configurations != null,
                       "DUT did not return any configuration",
                       "Check if the DUT returned configurations");

                List <string> tokens     = new List <string>();
                List <string> duplicates = new List <string>();
                foreach (AudioEncoderConfiguration configuration in configurations)
                {
                    if (!tokens.Contains(configuration.token))
                    {
                        tokens.Add(configuration.token);
                    }
                    else
                    {
                        if (!duplicates.Contains(configuration.token))
                        {
                            duplicates.Add(configuration.token);
                        }
                    }
                }
                if (duplicates.Count > 0)
                {
                    StringBuilder sb = new StringBuilder("The following tokens are not unique: ");
                    bool first       = true;
                    foreach (string token in duplicates)
                    {
                        sb.Append(first ? token : string.Format(", {0}", token));
                        first = false;
                    }

                    Assert(false, sb.ToString(), "Validate audio source configurations");
                }

                // Check that each AudioEncoderConfigurations from the GetProfilesResponse message
                // are included in the GetAudioEncoderConfigurationsResponse message


                foreach (Profile profile in profiles)
                {
                    if (profile.AudioEncoderConfiguration != null)
                    {
                        string token = profile.AudioEncoderConfiguration.token;

                        AudioEncoderConfiguration configuration =
                            configurations.Where(C => C.token == token).FirstOrDefault();

                        Assert(configuration != null,
                               string.Format("Audio encoder configuration with token '{0}' not found", token),
                               string.Format(
                                   "Check that audio encoder configuration for profile with token '{0}' exists",
                                   profile.token));
                    }
                }

                // Check that AudioSourceConfiguration parameters are same in GetProfilesResponse
                // message and in GetAudioSourceConfigurationsResponse message for each
                // AudioSourceConfiguration

                foreach (Profile profile in profiles)
                {
                    if (profile.AudioEncoderConfiguration != null)
                    {
                        string token = profile.AudioEncoderConfiguration.token;

                        AudioEncoderConfiguration configuration =
                            configurations.Where(C => C.token == token).FirstOrDefault();

                        CompareConfigurations(profile.AudioEncoderConfiguration, configuration, true);
                    }
                }
            });
        }
        public void SetAudioSourceConfigurationTest()
        {
            Profile deletedProfile  = null;
            Profile createdProfile  = null;
            Profile modifiedProfile = null;

            AudioEncoding             backupEncoding = AudioEncoding.G711;
            AudioEncoderConfiguration configBackup   = null;

            RunTest(
                () =>
            {
                Profile profile = CreateProfileByAnnex3("testprofileX", null, out deletedProfile, out createdProfile, out modifiedProfile);
                string reason;

                //5.	ONVIF Client will invoke GetCompatibleAudioSourceConfigurationsRequest message
                // (ProfileToken = ‘testprofileX’) to retrieve the list of audio source configurations
                // compatible with profile.
                //6.	ONVIF Client verifies the list of audio source configurations sent by DUT.
                // Audio source
                AudioSourceConfiguration[] configs = GetCompatibleAudioSourceConfigurations(profile.token);
                Assert(ValidateAudioSourceConfigs(configs, out reason), reason, Resources.StepValidatingAudioSources_Title);

                //7.	ONVIF Client invokes AddAudioSourceConfigurationRequest message
                // (ProfileToken = ‘testprofileX’, ConfigurationToken as one of the tokens received in the
                // GetCompatibleAudioSourceConfigurationsResponse message) to add audio source configuration
                // to profile.
                //8.	DUT adds the audio source configuration to the profile and sends the response.
                AudioSourceConfiguration config = configs[0];
                AddAudioSourceConfiguration(profile.token, config.token);


                //9.	ONVIF Client invokes GetCompatibleAudioEncoderConfigurationsRequest message
                // (ProfileToken = ‘testprofileX’) to retrieve audio encoder configurations compatible with
                // profile.
                //10.	DUT sends the list of audio encoder configurations compatible with the received
                // media profile token.
                // Audio encoder
                AudioEncoderConfiguration[] encoderConfigurations = GetCompatibleAudioEncoderConfigurations(profile.token);
                Assert(ValidateAudioEncoderConfigs(encoderConfigurations, out reason), reason, Resources.StepValidatingAudioEncoders_Title);

                //11.	ONVIF Client invokes AddAudioEncoderConfigurationRequest message (ProfileToken =
                // ‘testprofileX’, ConfigurationToken as one of the tokens received in the
                // GetCompatibleAudioencoderConfigurationsResponse message) to add audio encoder
                // configuration to profile.
                //12.	DUT adds the audio encoder configuration to the profile and sends the response.
                AudioEncoderConfiguration encoderConfig = encoderConfigurations[0];
                AddAudioEncoderConfiguration(profile.token, encoderConfig.token);

                //13.	ONVIF Client invokes GetAudioEncoderConfigurationOptionsRequest
                // (ProfileToken = ‘testprofileX’) request to retrieve audio encoder options for
                // specified profile.
                //14.	DUT sends the audio encoder configuration options which could be applied
                // to audio encoder from specified profile.
                AudioEncoderConfigurationOptions options = GetAudioEncoderConfigurationOptions(null, profile.token);
                Assert(options != null && options.Options != null,
                       "No Audio Encoder Configuration options returned",
                       "Validate response received");


                // Select valid options
                List <AudioEncoderConfigurationOption> validOptions = options.Options.Where(o => o.BitrateList != null && o.SampleRateList != null).ToList();
                Assert(validOptions.Count > 0,
                       "No valid options can be selected",
                       "Select AudioEncoderConfigurationOption to check configuration changing");
                configBackup = Utils.CopyMaker.CreateCopy(encoderConfig);

                backupEncoding = encoderConfig.Encoding;
                List <AudioEncoderConfigurationOption> opts = validOptions.Where(O => O.Encoding != backupEncoding).ToList();

                AudioEncoderConfigurationOption encodingDifferent = opts.FirstOrDefault();

                if (opts.Count == 0)
                {
                    opts = validOptions;
                }

                // select with different encoding
                AudioEncoderConfigurationOption selectedOptions = null;

                AudioEncoderConfigurationOption bitrateDifferent    = null;
                AudioEncoderConfigurationOption sampleRateDifferent = null;
                foreach (AudioEncoderConfigurationOption opt in opts)
                {
                    bool bitrateDiffers    = opt.BitrateList.Where(B => B != encoderConfig.Bitrate).Count() > 0;
                    bool sampleRateDiffers = opt.SampleRateList.Where(SR => SR != encoderConfig.SampleRate).Count() > 0;

                    if (bitrateDiffers && sampleRateDiffers)
                    {
                        selectedOptions = opt;
                        break;
                    }
                    if (bitrateDiffers)
                    {
                        bitrateDifferent = opt;
                    }
                    if (sampleRateDiffers)
                    {
                        sampleRateDifferent = opt;
                    }
                }

                if (selectedOptions == null)
                {
                    selectedOptions = (encodingDifferent != null) ? encodingDifferent : (bitrateDifferent != null ? bitrateDifferent : sampleRateDifferent);
                }

                if (selectedOptions != null)
                {
                    //15.	ONVIF Client invokes SetAudioEncoderConfigurationRequest message
                    // (ConfigurationToken, Encoding=[other than current], Bitrate = [other than current],
                    // SampleRate = [other than current], ForcePersistence = false, where all values was
                    // taken from audio encoder configuration options) to change
                    //16.	DUT sends SetAudioEncoderConfigurationResponse message.
                    // Update encoder configuration
                    encoderConfig.Encoding = selectedOptions.Encoding;

                    List <int> bitrates = selectedOptions.BitrateList.Where(B => B != encoderConfig.Bitrate).ToList();
                    if (bitrates.Count > 0)
                    {
                        encoderConfig.Bitrate = bitrates[0];
                    }

                    List <int> sampleRates = selectedOptions.SampleRateList.Where(SR => SR != encoderConfig.SampleRate).ToList();
                    if (sampleRates.Count > 0)
                    {
                        encoderConfig.SampleRate = sampleRates[0];
                    }

                    SetAudioEncoderConfiguration(encoderConfig, false);

                    //17.	ONVIF Client invokes GetAudioEncoderConfigurationRequest message
                    // (ConfigurationToken) to get new audio encoder configuration parameters.
                    //18.	DUT sends GetAudioEncoderConfigurationResponse message with parameters
                    // specified in set request.
                    AudioEncoderConfiguration actual = GetAudioEncoderConfiguration(encoderConfig.token);


                    //19.	ONVIF Client checks that Audio configuration in GetAudioEncoderConfigurationResponse
                    // message is the same as in SetAudioEncoderConfigurationRequest message.
                    string err     = null;
                    bool equal     = EqualConfigurations(encoderConfig, actual, out err);
                    string message = string.Format(Resources.ErrorAudioEncoderConfigNotEqual_Format, System.Environment.NewLine + err);
                    Assert(equal,
                           message,
                           Resources.StepCompareAudioEncoderConfigs_Title);
                }
            },
                () =>
            {
                if (configBackup != null)
                {
                    SetAudioEncoderConfiguration(configBackup, true);
                }
                RestoreProfileByAnnex3(deletedProfile, createdProfile, modifiedProfile);
            });
        }
예제 #13
0
        public void SetAudioSourceConfigurationTest()
        {
            Profile deletedProfile  = null;
            Profile createdProfile  = null;
            Profile modifiedProfile = null;

            AudioEncoding             backupEncoding = AudioEncoding.G711;
            AudioEncoderConfiguration configBackup   = null;

            RunTest(
                () =>
            {
                string reason;
                bool executeAnnex = false;
                Profile profile   = null;

                //3.	ONVIF Client invokes CreateProfileRequest message (ProfileToken = ‘testprofileX’)
                // to create new profile.
                //4.	Verify CreateProfileResponse message or SOAP 1.2 fault message (Action/MaxNVTProfiles)
                // from the DUT. If fault was received execute Annex A.1
                /// create profile
                try
                {
                    BeginStep("Create profile");
                    profile = Client.CreateProfile("testprofileX", null);
                    StepPassed();

                    Assert(IsEmptyProfile(profile, out reason), reason, Resources.StepValidatingNewProfile_Title);
                    createdProfile = profile;
                }
                catch (FaultException exc)
                {
                    LogFault(exc);
                    string faultDump;
                    if (exc.IsValidOnvifFault("Receiver/Action/MaxNVTProfiles", out faultDump))
                    {
                        LogStepEvent("Unable to create profile - delete one or select existing for test");
                        executeAnnex = true;
                        StepPassed();
                    }
                    else
                    {
                        throw exc;
                    }
                }

                if (executeAnnex)
                {
                    Profile[] profiles = GetProfiles();
                    bool nonFixedFound = false;

                    foreach (Profile p in profiles)
                    {
                        if (!(p.fixedSpecified && p.@fixed))
                        {
                            nonFixedFound  = true;
                            deletedProfile = p;
                            DeleteProfile(p.token);
                            break;
                        }
                    }

                    if (nonFixedFound)
                    {
                        profile        = CreateProfile("testprofileX", null);
                        createdProfile = profile;
                    }
                    else
                    {
                        bool audioProfileFound = false;
                        foreach (Profile p in profiles)
                        {
                            if (p.AudioSourceConfiguration != null)
                            {
                                profile = p;
                                LogTestEvent(string.Format("Use profile with token '{0}' for test{1}", p.token, System.Environment.NewLine));
                                modifiedProfile   = p;
                                audioProfileFound = true;
                                break;
                            }
                        }
                        if (!audioProfileFound)
                        {
                            LogTestEvent("Unable to create or select profile with Audio configuration for test.");
                            return;
                        }
                    }
                }

                //5.	ONVIF Client will invoke GetCompatibleAudioSourceConfigurationsRequest message
                // (ProfileToken = ‘testprofileX’) to retrieve the list of audio source configurations
                // compatible with profile.
                //6.	ONVIF Client verifies the list of audio source configurations sent by DUT.
                // Audio source
                AudioSourceConfiguration[] configs = GetCompatibleAudioSourceConfigurations(profile.token);
                Assert(ValidateAudioSourceConfigs(configs, out reason), reason, Resources.StepValidatingAudioSources_Title);

                //7.	ONVIF Client invokes AddAudioSourceConfigurationRequest message
                // (ProfileToken = ‘testprofileX’, ConfigurationToken as one of the tokens received in the
                // GetCompatibleAudioSourceConfigurationsResponse message) to add audio source configuration
                // to profile.
                //8.	DUT adds the audio source configuration to the profile and sends the response.
                AudioSourceConfiguration config = configs[0];
                AddAudioSourceConfiguration(profile.token, config.token);


                //9.	ONVIF Client invokes GetCompatibleAudioEncoderConfigurationsRequest message
                // (ProfileToken = ‘testprofileX’) to retrieve audio encoder configurations compatible with
                // profile.
                //10.	DUT sends the list of audio encoder configurations compatible with the received
                // media profile token.
                // Audio encoder
                AudioEncoderConfiguration[] encoderConfigurations = GetCompatibleAudioEncoderConfigurations(profile.token);
                Assert(ValidateAudioEncoderConfigs(encoderConfigurations, out reason), reason, Resources.StepValidatingAudioEncoders_Title);

                //11.	ONVIF Client invokes AddAudioEncoderConfigurationRequest message (ProfileToken =
                // ‘testprofileX’, ConfigurationToken as one of the tokens received in the
                // GetCompatibleAudioencoderConfigurationsResponse message) to add audio encoder
                // configuration to profile.
                //12.	DUT adds the audio encoder configuration to the profile and sends the response.
                AudioEncoderConfiguration encoderConfig = encoderConfigurations[0];
                AddAudioEncoderConfiguration(profile.token, encoderConfig.token);

                //13.	ONVIF Client invokes GetAudioEncoderConfigurationOptionsRequest
                // (ProfileToken = ‘testprofileX’) request to retrieve audio encoder options for
                // specified profile.
                //14.	DUT sends the audio encoder configuration options which could be applied
                // to audio encoder from specified profile.
                AudioEncoderConfigurationOptions options = GetAudioEncoderConfigurationOptions(null, profile.token);
                Assert(options != null && options.Options != null,
                       "No Audio Encoder Configuration options returned",
                       "Validate response received");


                // Select valid options
                List <AudioEncoderConfigurationOption> validOptions = options.Options.Where(o => o.BitrateList != null && o.SampleRateList != null).ToList();
                Assert(validOptions.Count > 0,
                       "No valid options can be selected",
                       "Select AudioEncoderConfigurationOption to check configuration changing");
                configBackup = Utils.CopyMaker.CreateCopy(encoderConfig);

                backupEncoding = encoderConfig.Encoding;
                List <AudioEncoderConfigurationOption> opts = validOptions.Where(O => O.Encoding != backupEncoding).ToList();

                AudioEncoderConfigurationOption encodingDifferent = opts.FirstOrDefault();

                if (opts.Count == 0)
                {
                    opts = validOptions;
                }

                // select with different encoding
                AudioEncoderConfigurationOption selectedOptions = null;

                AudioEncoderConfigurationOption bitrateDifferent    = null;
                AudioEncoderConfigurationOption sampleRateDifferent = null;
                foreach (AudioEncoderConfigurationOption opt in opts)
                {
                    bool bitrateDiffers    = opt.BitrateList.Where(B => B != encoderConfig.Bitrate).Count() > 0;
                    bool sampleRateDiffers = opt.SampleRateList.Where(SR => SR != encoderConfig.SampleRate).Count() > 0;

                    if (bitrateDiffers && sampleRateDiffers)
                    {
                        selectedOptions = opt;
                        break;
                    }
                    if (bitrateDiffers)
                    {
                        bitrateDifferent = opt;
                    }
                    if (sampleRateDiffers)
                    {
                        sampleRateDifferent = opt;
                    }
                }

                if (selectedOptions == null)
                {
                    selectedOptions = (encodingDifferent != null) ? encodingDifferent : (bitrateDifferent != null ? bitrateDifferent : sampleRateDifferent);
                }

                if (selectedOptions != null)
                {
                    //15.	ONVIF Client invokes SetAudioEncoderConfigurationRequest message
                    // (ConfigurationToken, Encoding=[other than current], Bitrate = [other than current],
                    // SampleRate = [other than current], ForcePersistence = false, where all values was
                    // taken from audio encoder configuration options) to change
                    //16.	DUT sends SetAudioEncoderConfigurationResponse message.
                    // Update encoder configuration
                    encoderConfig.Encoding = selectedOptions.Encoding;

                    List <int> bitrates = selectedOptions.BitrateList.Where(B => B != encoderConfig.Bitrate).ToList();
                    if (bitrates.Count > 0)
                    {
                        encoderConfig.Bitrate = bitrates[0];
                    }

                    List <int> sampleRates = selectedOptions.SampleRateList.Where(SR => SR != encoderConfig.SampleRate).ToList();
                    if (sampleRates.Count > 0)
                    {
                        encoderConfig.SampleRate = sampleRates[0];
                    }

                    SetAudioEncoderConfiguration(encoderConfig, false);

                    //17.	ONVIF Client invokes GetAudioEncoderConfigurationRequest message
                    // (ConfigurationToken) to get new audio encoder configuration parameters.
                    //18.	DUT sends GetAudioEncoderConfigurationResponse message with parameters
                    // specified in set request.
                    AudioEncoderConfiguration actual = GetAudioEncoderConfiguration(encoderConfig.token);


                    //19.	ONVIF Client checks that Audio configuration in GetAudioEncoderConfigurationResponse
                    // message is the same as in SetAudioEncoderConfigurationRequest message.
                    string err     = null;
                    bool equal     = EqualConfigurations(encoderConfig, actual, out err);
                    string message = string.Format(Resources.ErrorAudioEncoderConfigNotEqual_Format, System.Environment.NewLine + err);
                    Assert(equal,
                           message,
                           Resources.StepCompareAudioEncoderConfigs_Title);
                }

                //20.	If used created Media Profile then ONVIF Client invokes DeleteProfileRequest
                // message (ProfileToken = ‘testprofileX’). Otherwise ONVIF client skip rest steps
                // and and restore profile settings.
                //21.	DUT deletes the media profile and sends the response.
                if (modifiedProfile == null)
                {
                    //
                    // if modifiedProfile != null, it means that all profiles have "fixed" attribute
                    // and one of them has been selected for test.
                    // In this case we cannot delete this profile.
                    //
                    DeleteProfile(profile.token);
                    createdProfile = null;
                }
            },
                () =>
            {
                if (configBackup != null)
                {
                    SetAudioEncoderConfiguration(configBackup, true);
                }

                if (createdProfile != null)
                {
                    DeleteProfile(createdProfile.token);
                }

                string remark            = null;
                bool create              = true;
                Profile profileToRestore = null;
                if (deletedProfile != null)
                {
                    profileToRestore = deletedProfile;
                    remark           = "Restore profile deleted during the test";
                }
                if (modifiedProfile != null)
                {
                    //
                    // We did not change video etc. configirations during the test.
                    // The only configurations which (possible) need to be restored are
                    // audio source and audio encoder (add)
                    //
                    profileToRestore = modifiedProfile;
                    remark           = "Restore profile modified during the test";
                    create           = false;
                }

                if (profileToRestore != null)
                {
                    // profile has been deleted for test: add all possible configurations
                    // profile has been selected for test: it has been deleted at the end.

                    RestoreProfile(profileToRestore, remark, create);
                }
            });
        }
예제 #14
0
 public static void SetAudioEncoderConfiguration(BaseOnvifTest test, MediaClient client, AudioEncoderConfiguration configuration, bool persistency)
 {
     RunStep(test, () => { client.SetAudioEncoderConfiguration(configuration, persistency); },
             Resources.StepSetAudioEncoderConfig_Title);
     DoRequestDelay(test);
 }
예제 #15
0
        MediaUri GetAudioMediaUri(
            TestAudioEncoderConfigurationOptions audioTest,
            string audioCodec,
            AudioEncoding audioEncoding,
            StreamType streamType,
            TransportProtocol protocol,
            IPType?multicastAddressType, MediaConfigurationChangeLog changeLog)
        {
            Profile[] profiles = GetProfiles();

            Profile profile = null;
            AudioEncoderConfigurationOptions audioOptions = null;
            int bitrate    = 0;
            int sampleRate = 0;

            RunStep(() =>
            {
                foreach (Profile p in profiles)
                {
                    if (p.AudioEncoderConfiguration != null && p.AudioSourceConfiguration != null)
                    {
                        LogStepEvent("GetAudioEncoderConfigurationOptions");
                        audioOptions =
                            Client.GetAudioEncoderConfigurationOptions(p.AudioEncoderConfiguration.token, p.token);
                        DoRequestDelay();

                        if (audioTest(audioOptions))
                        {
                            profile = p;
                            LogStepEvent("OK - profile found");
                            break;
                        }
                    }
                    else
                    {
                        LogStepEvent("GetAudioEncoderConfigurations");
                        AudioEncoderConfiguration[] audioEncoderConfigurations =
                            Client.GetAudioEncoderConfigurations();
                        DoRequestDelay();

                        bool audioEncoderConfigurationFound = false;

                        foreach (AudioEncoderConfiguration configuration in audioEncoderConfigurations)
                        {
                            LogStepEvent("GetAudioEncoderConfigurationOptions");
                            audioOptions =
                                Client.GetAudioEncoderConfigurationOptions(configuration.token, p.token);
                            DoRequestDelay();

                            if (audioTest(audioOptions))
                            {
                                if (p.AudioSourceConfiguration == null)
                                {
                                    AudioSourceConfiguration[] audioSourceConfigurations = Client.GetAudioSourceConfigurations();

                                    DoRequestDelay();

                                    if (audioSourceConfigurations.Length > 0)
                                    {
                                        {
                                            Profile profileCopy = Utils.CopyMaker.CreateCopy(p);
                                            changeLog.TrackModifiedProfile(profileCopy);
                                        }

                                        LogStepEvent("AddAudioSourceConfiguration");
                                        Client.AddAudioSourceConfiguration(p.token, audioSourceConfigurations[0].token);
                                        DoRequestDelay();
                                    }
                                    else
                                    {
                                        throw new DutPropertiesException("Audio Source Configurations not found");
                                    }
                                }

                                {
                                    Profile profileCopy = Utils.CopyMaker.CreateCopy(p);
                                    changeLog.TrackModifiedProfile(profileCopy);
                                }

                                LogStepEvent("AddAudioEncoderConfiguration");
                                Client.AddAudioEncoderConfiguration(p.token, configuration.token);
                                DoRequestDelay();

                                p.AudioEncoderConfiguration = configuration;

                                profile = p;

                                LogStepEvent(string.Format("Add Audio configuration to the {0} profile - OK", profile.Name));

                                audioEncoderConfigurationFound = true;
                                break;
                            }
                        }

                        if (!audioEncoderConfigurationFound)
                        {
                            throw new DutPropertiesException("Audio Encoder Configuration with required properties not found");
                        }
                    }
                }

                if (profile == null)
                {
                    throw new DutPropertiesException("Respective profile cannot be found or created");
                }
            },
                    string.Format("Select or create profile with {0} Audio encoder configuration", audioCodec));

            // find nearest bitrate and samplerate
            bitrate = FindNearestAudioBitrate(profile.AudioEncoderConfiguration.Bitrate, audioEncoding,
                                              audioOptions);
            sampleRate = FindNearestAudioSamplerate(profile.AudioEncoderConfiguration.SampleRate,
                                                    audioEncoding, audioOptions);

            {
                AudioEncoderConfiguration aecCopy = Utils.CopyMaker.CreateCopy(profile.AudioEncoderConfiguration);
                changeLog.TrackModifiedConfiguration(aecCopy);
            }

            if (multicastAddressType.HasValue)
            {
                SetMulticastSettings(profile, false, true, multicastAddressType.Value);
            }

            profile.AudioEncoderConfiguration.Encoding   = audioEncoding;
            profile.AudioEncoderConfiguration.Bitrate    = bitrate;
            profile.AudioEncoderConfiguration.SampleRate = sampleRate;

            SetAudioEncoderConfiguration(profile.AudioEncoderConfiguration, false, multicastAddressType.HasValue);

            StreamSetup streamSetup = new StreamSetup();

            streamSetup.Transport          = new Transport();
            streamSetup.Transport.Protocol = protocol;
            streamSetup.Stream             = streamType;

            UsedProfileToken = profile.token;
            MediaUri streamUri = GetStreamUri(streamSetup, profile.token);

            AdjustVideo(protocol, streamType, streamUri, profile.VideoEncoderConfiguration);

            return(streamUri);
        }
예제 #16
0
		public Task SetAudioEncoderConfigurationAsync(AudioEncoderConfiguration Configuration, bool ForcePersistence)
		{
			throw new NotImplementedException();
		}
예제 #17
0
 /// <summary>
 /// Handles media uri received event
 /// </summary>
 protected void OnMediaUriReceived(MediaUri uri, VideoEncoderConfiguration encoder, AudioEncoderConfiguration audio)
 {
     View.ShowVideo(uri, encoder);
 }