public void SetAudioSourceConfigurationInvalidConfigurationTest() { RunTest(() => { AudioSourceConfiguration[] configurations = GetAudioSourceConfigurations(); Assert(configurations != null, "DUT did not return any configuration", "Check if the DUT returned configurations"); List <string> tokens = new List <string>(); foreach (AudioSourceConfiguration config in configurations) { tokens.Add(config.token); } string token = tokens.GetNonMatchingString(); AudioSourceConfiguration configuration = new AudioSourceConfiguration(); configuration.token = token; configuration.Name = configurations[0].Name; configuration.SourceToken = configurations[0].SourceToken; configuration.UseCount = configurations[0].UseCount; RunStep( () => { Client.SetAudioSourceConfiguration(configuration, false); }, "Set audio source configuration - negative test", "Sender/InvalidArgVal/NoConfig", true); DoRequestDelay(); }); }
public static Model Create( string profName, string profToken, VideoSourceConfiguration videoSrcCfg, AudioSourceConfiguration audioSrcCfg, bool isVideoSrcCfgEnabled, bool isAudioSrcCfgEnabled, VideoSourceConfiguration[] videoSrcCfgs, AudioSourceConfiguration[] audioSrcCfgs ) { var _this = new Model(); _this.videoSrcCfgs = videoSrcCfgs; _this.audioSrcCfgs = audioSrcCfgs; _this.origin.profName = profName; _this.origin.profToken = profToken; _this.origin.videoSrcCfg = videoSrcCfg; _this.origin.audioSrcCfg = audioSrcCfg; _this.origin.isVideoSrcCfgEnabled = isVideoSrcCfgEnabled; _this.origin.isAudioSrcCfgEnabled = isAudioSrcCfgEnabled; _this.RevertChanges(); return(_this); }
private void ok_btn_Click(object sender, RoutedEventArgs e) { if (configs != null) { try { AudioSourceConfiguration asc = JsonConvert.DeserializeObject <AudioSourceConfiguration>(info_config.Text); media.SetAudioSourceConfiguration(asc); } catch (Exception ex) { error_log.Visibility = Visibility.Visible; error_log.Content = "Error in the JSON format!"; error_log.Foreground = new SolidColorBrush(Colors.Red); return; } ConfigurationRef[] config = { new ConfigurationRef() }; config[0].Type = "AudioSource"; config[0].Token = configs[selectedIndex].token; media.AddConfiguration(profileToken, profileName, config); } this.DialogResult = true; this.Close(); }
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); } })); }
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 AudioSourceConfiguration() { 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); AudioSource[] sources = GetAudioSources(); Assert(ValidateAudioSources(sources, out reason), reason, Resources.StepValidatingAudioSources_Title); AudioSourceConfiguration[] configs = GetAudioSourceConfigurations(); Assert(ValidateAudioSourceConfigs(configs, out reason), reason, Resources.StepValidatingAudioSources_Title); configs = GetCompatibleAudioSourceConfigurations(profile.token); Assert(ValidateAudioSourceConfigs(configs, out reason), reason, Resources.StepValidatingAudioSources_Title); AudioSourceConfiguration config = configs[0]; AddAudioSourceConfiguration(profile.token, config.token); AudioSourceConfigurationOptions options = GetAudioSourceConfigurationOptions(null, config.token); string sourceToken = config.SourceToken; config.SourceToken = "InvalidToken"; //TODO make sure that token is invalid string details = string.Format("Setting invalid configuration (/AudioSourceConfiguration/SourceToken = '{0}')", config.SourceToken); SetInvalidAudioSourceConfiguration(config, false, details); config.SourceToken = sourceToken; SetAudioSourceConfiguration(config, false); AudioSourceConfiguration newConfig = GetAudioSourceConfiguration(config.token); Assert(EqualConfigurations(config, newConfig, out reason), string.Format(Resources.ErrorAudioSourceConfigNotEqual_Format, reason), Resources.StepCompareAudioSourceConfigs_Title); RemoveAudioSourceConfiguration(profile.token); DeleteProfile(profile.token); profile = null; }, (param) => { if (profile != null) { DeleteProfile(profile.token); } }); }
public ILoopSFX PlayLoop(AudioClip loopClip, Transform anchor, AudioSourceConfiguration config, UnityEngine.Audio.AudioMixerGroup defaultGroup = null) { if (loopClip == null) { Debug.LogError("Cannot play sound clip, because it is null"); return(null); } var go = CreateNewSource(loopClip, transform, config, defaultGroup); var loop = go.AddComponent <LoopController>(); loop.Init(config, anchor); return(loop); }
public void AudioSourceConfiguration() { Profile deletedProfile = null; Profile createdProfile = null; Profile modifiedProfile = null; Profile profile = null; RunTest( () => { profile = CreateProfileByAnnex3("testprofileX", null, out deletedProfile, out createdProfile, out modifiedProfile); string reason; Assert(IsEmptyProfile(profile, out reason), reason, Resources.StepValidatingNewProfile_Title); AudioSource[] sources = GetAudioSources(); Assert(ValidateAudioSources(sources, out reason), reason, Resources.StepValidatingAudioSources_Title); AudioSourceConfiguration[] configs = GetAudioSourceConfigurations(); Assert(ValidateAudioSourceConfigs(configs, out reason), reason, Resources.StepValidatingAudioSources_Title); configs = GetCompatibleAudioSourceConfigurations(profile.token); Assert(ValidateAudioSourceConfigs(configs, out reason), reason, Resources.StepValidatingAudioSources_Title); AudioSourceConfiguration config = configs[0]; AddAudioSourceConfiguration(profile.token, config.token); AudioSourceConfigurationOptions options = GetAudioSourceConfigurationOptions(null, config.token); string sourceToken = config.SourceToken; config.SourceToken = "InvalidToken"; //TODO make sure that token is invalid string details = string.Format("Setting invalid configuration (/AudioSourceConfiguration/SourceToken = '{0}')", config.SourceToken); SetInvalidAudioSourceConfiguration(config, false, details); config.SourceToken = sourceToken; SetAudioSourceConfiguration(config, false); AudioSourceConfiguration newConfig = GetAudioSourceConfiguration(config.token); Assert(EqualConfigurations(config, newConfig, out reason), string.Format(Resources.ErrorAudioSourceConfigNotEqual_Format, reason), Resources.StepCompareAudioSourceConfigs_Title); RemoveAudioSourceConfiguration(profile.token); }, () => { RestoreProfileByAnnex3(deletedProfile, createdProfile, modifiedProfile); }); }
public void Init(AudioSourceConfiguration config, Transform anchor) { _anchor = anchor; _source = GetComponent <AudioSource>(); _source.loop = true; _source.Play(); _source.volume = 0; _volume.Start(0); _volume.SetDesire(1); _config = config; config.SetConfiguration(_source); _source.volume = _volume.Value * config.Volume; }
GameObject CreateNewSource(AudioClip clip, Transform parent, AudioSourceConfiguration config, UnityEngine.Audio.AudioMixerGroup defaultGroup = null) { var go = new GameObject(clip.name); go.transform.parent = parent; var source = go.AddComponent <AudioSource>(); source.clip = clip; config.SetConfiguration(source); if (source.outputAudioMixerGroup == null) { source.outputAudioMixerGroup = defaultGroup ?? _defaultGroup; } return(go); }
/// <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 AudioSource PlayOnce(AudioClip clip, Vector3 position, Transform parent, AudioSourceConfiguration config, UnityEngine.Audio.AudioMixerGroup defaultGroup = null, float delay = 0) { if (clip == null) { Debug.LogError("Cannot play sound clip, because it is null"); return(null); } var go = CreateNewSource(clip, parent, config, defaultGroup); go.transform.position = position; var source = go.GetComponent <AudioSource>(); DontDestroyOnLoad(gameObject); source.PlayDelayed(delay); UnscaledDelayedDestroy.Apply(go, delay + clip.length / config.MinPitch + 0.01f); return(source); }
public void AudioSourceConfigurationConsistencyTest() { RunTest(() => { // Audio source configurations AudioSourceConfiguration[] configurations = GetAudioSourceConfigurations(); Assert(configurations != null, "DUT did not return any configuration", "Check if the DUT returned configurations"); foreach (AudioSourceConfiguration configuration in configurations) { AudioSourceConfiguration config = GetAudioSourceConfiguration(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 override void SetAudioSourceConfiguration(AudioSourceConfiguration Configuration, bool ForcePersistence, ref System.Xml.XmlElement[] Any) { throw new NotImplementedException(); }
public Task SetAudioSourceConfigurationAsync(AudioSourceConfiguration Configuration, bool ForcePersistence) { throw new NotImplementedException(); }
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); }); }
public void AudioSourceConfigurationAndProfileConsistencyTest() { RunTest(() => { Profile[] profiles = GetProfiles(); Assert(profiles != null, "DUT did not return any profile", "Check if the DUT returned media profiles"); // Audio source configurations AudioSourceConfiguration[] configurations = GetAudioSourceConfigurations(); 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 (AudioSourceConfiguration 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 AudioSourceConfigurations from the GetProfilesResponse message // are included in the GetAudioSourceConfigurationsResponse message foreach (Profile profile in profiles) { if (profile.AudioSourceConfiguration != null) { string token = profile.AudioSourceConfiguration.token; AudioSourceConfiguration configuration = configurations.Where(C => C.token == token).FirstOrDefault(); Assert(configuration != null, string.Format("Audio source configuration with token '{0}' not found", token), string.Format( "Check that audio source 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.AudioSourceConfiguration != null) { string token = profile.AudioSourceConfiguration.token; AudioSourceConfiguration configuration = configurations.Where(C => C.token == token).FirstOrDefault(); CompareConfigurations(profile.AudioSourceConfiguration, configuration, true); } } }); }
public AudioSource PlayOnce(AudioClip clip, Vector3 position, AudioSourceConfiguration config, UnityEngine.Audio.AudioMixerGroup defaultGroup = null, float delay = 0) { return(PlayOnce(clip, position, transform, config, defaultGroup, delay)); }
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); } }); }
public override void SetAudioSourceConfiguration(AudioSourceConfiguration Configuration) { throw new NotImplementedException(); }