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); }
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); }); }
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 TrackModifiedConfiguration(AudioEncoderConfiguration config) { AudioEncoderConfiguration modified = _modifiedAudioEncoderConfigurations.Where(AEC => AEC.token == config.token).FirstOrDefault(); if (modified == null) { _modifiedAudioEncoderConfigurations.Add(config); } }
/// <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); }); }
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 static void SetAudioEncoderConfiguration(BaseOnvifTest test, MediaClient client, AudioEncoderConfiguration configuration, bool persistency) { RunStep(test, () => { client.SetAudioEncoderConfiguration(configuration, persistency); }, Resources.StepSetAudioEncoderConfig_Title); DoRequestDelay(test); }
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); }
public Task SetAudioEncoderConfigurationAsync(AudioEncoderConfiguration Configuration, bool ForcePersistence) { throw new NotImplementedException(); }
/// <summary> /// Handles media uri received event /// </summary> protected void OnMediaUriReceived(MediaUri uri, VideoEncoderConfiguration encoder, AudioEncoderConfiguration audio) { View.ShowVideo(uri, encoder); }