MediaUri GetVideoMediaUri(TestVideoEncoderConfigurationOptions test, CopyVideoEncoderConfiguration copyMethod, string profileRequirementsDescription, VideoEncoding encoding, TransportProtocol protocol, StreamType streamType) { return(GetVideoMediaUri(test, copyMethod, profileRequirementsDescription, encoding, protocol, streamType, null)); }
MediaUri GetAudioVideoMediaUri(TestVideoEncoderConfigurationOptions videoTest, string videoCodec, VideoEncoding encoding, TestAudioEncoderConfigurationOptions audioTest, string audioCodec, AudioEncoding audioEncoding, StreamType streamType, TransportProtocol protocol) { return(GetAudioVideoMediaUri( videoTest, videoCodec, encoding, audioTest, audioCodec, audioEncoding, streamType, protocol, null)); }
// Annex A.14 protected Profile SelectVideoProfile( VideoEncoding videoEncoding, string profileRequirementsDescription, TestVideoEncoderConfigurationOptions testVideo, ref VideoEncoderConfigurationOptions videoOptions) { Profile[] profiles = GetProfiles(); Profile profile = null; VideoEncoderConfigurationOptions videoOptionsTmp = null; RunStep(() => { foreach (Profile p in profiles) { LogStepEvent(string.Format("Check if {0} profile supports {1} Video encoder configuration", p.Name, profileRequirementsDescription)); if (p.VideoEncoderConfiguration != null) { videoOptionsTmp = Client.GetVideoEncoderConfigurationOptions(p.VideoEncoderConfiguration.token, p.token); DoRequestDelay(); if (testVideo(videoOptionsTmp)) { profile = p; break; } } } }, string.Format("Select profile with {0} Video encoder configuration", profileRequirementsDescription)); Assert(profile != null, string.Format("Profile with {0} Video encoder configuration not found", profileRequirementsDescription), "Check if required profile found"); profile.VideoEncoderConfiguration.Encoding = videoEncoding; videoOptions = videoOptionsTmp; AdjustVideoEncoderConfiguration(videoEncoding, profile.VideoEncoderConfiguration, videoOptions); return(profile); }
MediaUri GetVideoMediaUri(TestVideoEncoderConfigurationOptions test, CopyVideoEncoderConfiguration copyMethod, string profileRequirementsDescription, VideoEncoding encoding, TransportProtocol protocol, StreamType streamType, IPType?multicastAddressType) { Profile profile = null; VideoEncoderConfigurationOptions options = null; Profile[] profiles = GetProfiles(); RunStep(() => { foreach (Profile p in profiles) { LogStepEvent(string.Format("Check if {0} profile supports {1} Video encoder configuration", p.Name, profileRequirementsDescription)); if (p.VideoEncoderConfiguration != null) { options = Client.GetVideoEncoderConfigurationOptions(p.VideoEncoderConfiguration.token, p.token); DoRequestDelay(); if (test(options)) { profile = p; break; } } } }, string.Format("Select profile with {0} Video encoder configuration", profileRequirementsDescription)); Assert(profile != null, string.Format("Profile with {0} Video encoder configuration not found", profileRequirementsDescription), "Check if required profile found"); profile.VideoEncoderConfiguration.Encoding = encoding; copyMethod(profile, options); // fix for Panasonic if (encoding == VideoEncoding.JPEG) { profile.VideoEncoderConfiguration.MPEG4 = null; profile.VideoEncoderConfiguration.H264 = null; // support for extensions (bitrate limits) if (options.Extension != null) { if (options.Extension.JPEG != null) { if (options.Extension.JPEG.BitrateRange != null) { if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit < options.Extension.JPEG.BitrateRange.Min) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.JPEG.BitrateRange.Min; } if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit > options.Extension.JPEG.BitrateRange.Max) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.JPEG.BitrateRange.Max; } } } } } if (encoding == VideoEncoding.MPEG4) { profile.VideoEncoderConfiguration.H264 = null; // support for extensions (bitrate limits) if (options.Extension != null) { if (options.Extension.MPEG4 != null) { if (options.Extension.MPEG4.BitrateRange != null) { if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit < options.Extension.MPEG4.BitrateRange.Min) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.MPEG4.BitrateRange.Min; } if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit > options.Extension.MPEG4.BitrateRange.Max) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.MPEG4.BitrateRange.Max; } } } } } if (encoding == VideoEncoding.H264) { profile.VideoEncoderConfiguration.MPEG4 = null; // support for extensions (bitrate limits) if (options.Extension != null) { if (options.Extension.H264 != null) { if (options.Extension.H264.BitrateRange != null) { if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit < options.Extension.H264.BitrateRange.Min) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.H264.BitrateRange.Min; } if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit > options.Extension.H264.BitrateRange.Max) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.H264.BitrateRange.Max; } } } } } if (multicastAddressType.HasValue) { SetMulticastSettings(profile, true, false, multicastAddressType.Value); } SetVideoEncoderConfiguration(profile.VideoEncoderConfiguration, 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); }
MediaUri GetAudioVideoMediaUri(TestVideoEncoderConfigurationOptions videoTest, string videoCodec, VideoEncoding encoding, TestAudioEncoderConfigurationOptions audioTest, string audioCodec, AudioEncoding audioEncoding, StreamType streamType, TransportProtocol protocol, IPType?multicastAddressType) { Profile[] profiles = GetProfiles(); Profile profile = null; VideoEncoderConfigurationOptions options = null; int bitrate = 0; int sampleRate = 0; RunStep(() => { foreach (Profile p in profiles) { LogStepEvent(string.Format("Check if {0} profile satisfies current needs", p.Name)); if (p.VideoEncoderConfiguration != null) { LogStepEvent("GetVideoEncoderConfigurationOptions"); VideoEncoderConfigurationOptions videoOptions = Client.GetVideoEncoderConfigurationOptions(p.VideoEncoderConfiguration.token, p.token); DoRequestDelay(); if (videoTest(videoOptions)) { // Video configuration OK - configure Audio, if needed. options = videoOptions; if (p.AudioEncoderConfiguration != null && p.AudioSourceConfiguration != null) { LogStepEvent("GetAudioEncoderConfigurationOptions"); AudioEncoderConfigurationOptions audioOptions = Client.GetAudioEncoderConfigurationOptions(p.AudioEncoderConfiguration.token, p.token); DoRequestDelay(); if (audioTest(audioOptions)) { profile = p; LogStepEvent("OK - profile found"); // find nearest bitrate and samplerate bitrate = FindNearestAudioBitrate(p.AudioEncoderConfiguration.Bitrate, audioEncoding, audioOptions); sampleRate = FindNearestAudioSamplerate(p.AudioEncoderConfiguration.SampleRate, audioEncoding, audioOptions); break; } } else { LogStepEvent("GetAudioEncoderConfigurations"); AudioEncoderConfiguration[] audioEncoderConfigurations = Client.GetAudioEncoderConfigurations(); DoRequestDelay(); bool audioEncoderConfigurationFound = false; foreach (AudioEncoderConfiguration configuration in audioEncoderConfigurations) { LogStepEvent("GetAudioEncoderConfigurationOptions"); AudioEncoderConfigurationOptions audioOptions = Client.GetAudioEncoderConfigurationOptions(configuration.token, p.token); DoRequestDelay(); if (audioTest(audioOptions)) { if (p.AudioSourceConfiguration == null) { AudioSourceConfiguration[] audioSourceConfigurations = Client.GetAudioSourceConfigurations(); DoRequestDelay(); if (audioSourceConfigurations.Length > 0) { LogStepEvent("AddAudioSourceConfiguration"); Client.AddAudioSourceConfiguration(p.token, audioSourceConfigurations[0].token); DoRequestDelay(); } else { throw new DutPropertiesException("Audio Source Configurations not found"); } } bitrate = FindNearestAudioBitrate(configuration.Bitrate, audioEncoding, audioOptions); sampleRate = FindNearestAudioSamplerate(configuration.SampleRate, audioEncoding, audioOptions); 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} Video encoder configuration and {1} Audio encoder configuration", videoCodec, audioCodec)); // profile found profile.VideoEncoderConfiguration.Encoding = encoding; // support for extensions (bitrate limits) // fix for Panasonic if (encoding == VideoEncoding.JPEG) { profile.VideoEncoderConfiguration.MPEG4 = null; profile.VideoEncoderConfiguration.H264 = null; // support for extensions (bitrate limits) if (options.Extension != null) { if (options.Extension.JPEG != null) { if (options.Extension.JPEG.BitrateRange != null) { if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit < options.Extension.JPEG.BitrateRange.Min) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.JPEG.BitrateRange.Min; } if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit > options.Extension.JPEG.BitrateRange.Max) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.JPEG.BitrateRange.Max; } } } } } if (encoding == VideoEncoding.MPEG4) { profile.VideoEncoderConfiguration.H264 = null; // support for extensions (bitrate limits) if (options.Extension != null) { if (options.Extension.MPEG4 != null) { if (options.Extension.MPEG4.BitrateRange != null) { if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit < options.Extension.MPEG4.BitrateRange.Min) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.MPEG4.BitrateRange.Min; } if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit > options.Extension.MPEG4.BitrateRange.Max) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.MPEG4.BitrateRange.Max; } } } } } if (encoding == VideoEncoding.H264) { profile.VideoEncoderConfiguration.MPEG4 = null; // support for extensions (bitrate limits) if (options.Extension != null) { if (options.Extension.H264 != null) { if (options.Extension.H264.BitrateRange != null) { if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit < options.Extension.H264.BitrateRange.Min) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.H264.BitrateRange.Min; } if (profile.VideoEncoderConfiguration.RateControl.BitrateLimit > options.Extension.H264.BitrateRange.Max) { profile.VideoEncoderConfiguration.RateControl.BitrateLimit = options.Extension.H264.BitrateRange.Max; } } } } } if (multicastAddressType.HasValue) { SetMulticastSettings(profile, true, true, multicastAddressType.Value); } SetVideoEncoderConfiguration(profile.VideoEncoderConfiguration, false, multicastAddressType.HasValue); 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); }
MediaUri GetVideoMediaUri(TestVideoEncoderConfigurationOptions test, CopyVideoEncoderConfiguration copyMethod, string profileRequirementsDescription, VideoEncoding encoding, TransportProtocol protocol, StreamType streamType, IPType?multicastAddressType, MediaConfigurationChangeLog changeLog) { Profile profile = null; VideoEncoderConfigurationOptions options = null; Profile[] profiles = GetProfiles(); RunStep(() => { foreach (Profile p in profiles) { LogStepEvent(string.Format("Check if {0} profile supports {1} Video encoder configuration", p.Name, profileRequirementsDescription)); if (p.VideoEncoderConfiguration != null) { options = Client.GetVideoEncoderConfigurationOptions(p.VideoEncoderConfiguration.token, p.token); DoRequestDelay(); if (test(options)) { profile = p; break; } } } }, string.Format("Select profile with {0} Video encoder configuration", profileRequirementsDescription)); Assert(profile != null, string.Format("Profile with {0} Video encoder configuration not found", profileRequirementsDescription), "Check if required profile found"); VideoEncoderConfiguration vecCopy = Utils.CopyMaker.CreateCopy(profile.VideoEncoderConfiguration); changeLog.TrackModifiedConfiguration(vecCopy); profile.VideoEncoderConfiguration.Encoding = encoding; copyMethod(profile, options); AdjustVideoEncoderConfiguration(encoding, profile.VideoEncoderConfiguration, options); if (multicastAddressType.HasValue) { SetMulticastSettings(profile, true, false, multicastAddressType.Value); } SetVideoEncoderConfiguration(profile.VideoEncoderConfiguration, 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); }
// Annex A.15 protected Profile SelectVideoAudioProfile( VideoEncoding videoEncoding, string videoCodec, TestVideoEncoderConfigurationOptions testVideo, AudioEncoding audioEncoding, string audioCodec, TestAudioEncoderConfigurationOptions testAudio, ref VideoEncoderConfigurationOptions videoOptions, ref AudioEncoderConfigurationOptions audioOptions) { Profile[] profiles = GetProfiles(); Profile profile = null; VideoEncoderConfigurationOptions videoOptionsTmp = null; AudioEncoderConfigurationOptions audioOptionsTmp = null; RunStep(() => { foreach (Profile p in profiles) { LogStepEvent(string.Format("Check if {0} profile satisfies current needs", p.Name)); if (p.VideoEncoderConfiguration != null) { LogStepEvent("GetVideoEncoderConfigurationOptions"); videoOptionsTmp = Client.GetVideoEncoderConfigurationOptions(p.VideoEncoderConfiguration.token, p.token); DoRequestDelay(); if (testVideo(videoOptionsTmp)) { // Video configuration OK - configure Audio, if needed. if (p.AudioEncoderConfiguration != null && p.AudioSourceConfiguration != null) { LogStepEvent("GetAudioEncoderConfigurationOptions"); audioOptionsTmp = Client.GetAudioEncoderConfigurationOptions(p.AudioEncoderConfiguration.token, p.token); DoRequestDelay(); if (testAudio(audioOptionsTmp)) { 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"); audioOptionsTmp = Client.GetAudioEncoderConfigurationOptions(configuration.token, p.token); DoRequestDelay(); if (testAudio(audioOptionsTmp)) { if (p.AudioSourceConfiguration == null) { AudioSourceConfiguration[] audioSourceConfigurations = Client.GetAudioSourceConfigurations(); DoRequestDelay(); if (audioSourceConfigurations.Length > 0) { LogStepEvent("AddAudioSourceConfiguration"); Client.AddAudioSourceConfiguration(p.token, audioSourceConfigurations[0].token); DoRequestDelay(); } else { throw new DutPropertiesException("Audio Source Configurations not found"); } } 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} Video encoder configuration and {1} Audio encoder configuration", videoCodec, audioCodec)); profile.VideoEncoderConfiguration.Encoding = videoEncoding; // find nearest bitrate and samplerate profile.AudioEncoderConfiguration.Bitrate = FindNearestAudioBitrate(profile.AudioEncoderConfiguration.Bitrate, audioEncoding, audioOptions); profile.AudioEncoderConfiguration.SampleRate = FindNearestAudioSamplerate(profile.AudioEncoderConfiguration.SampleRate, audioEncoding, audioOptions); videoOptions = videoOptionsTmp; audioOptions = audioOptionsTmp; AdjustVideoEncoderConfiguration(videoEncoding, profile.VideoEncoderConfiguration, videoOptions); return(profile); }