public StreamResponse GetStream(string streamId, int videoPreset, int audioPreset) { _logger.LogInformation( $"Getting stream for streamId {streamId} with videoPreset {videoPreset} and audioPreset {audioPreset}"); var streamResponse = _grabber.GetMediaStream(streamId); if (_transcoder.GetAvailableAudioPresets().All(item => item.PresetId != audioPreset)) { var actualAudioPreset = _transcoder.GetAvailableAudioPresets().First().PresetId; _logger.LogWarning( $"Replacing audioPreset {audioPreset} with {actualAudioPreset} because not found in transcoder"); audioPreset = actualAudioPreset; } if (_transcoder.GetAvailableVideoPresets().All(item => item.PresetId != videoPreset)) { var actualVideoPreset = _transcoder.GetAvailableVideoPresets().First().PresetId; _logger.LogWarning( $"Replacing videoPreset {videoPreset} with {actualVideoPreset} because not found in transcoder"); videoPreset = actualVideoPreset; } Uri ourUri = null; lock (TranscoderCache) { var cacheObject = TranscoderCache.FirstOrDefault(item => item.VideoSourceUri == streamResponse.Item1 && item.AudioPresetId == audioPreset && item.VideoPresetId == videoPreset); if (cacheObject != null) { ourUri = cacheObject.TranscodedVideoUri; } } ourUri ??= _transcoder.StartProcess(streamResponse.Item1, videoPreset, audioPreset); return(new StreamResponse() { Settings = new StreamSettings() { AudioPresetId = audioPreset, VideoPresetId = videoPreset }, StreamLink = ourUri }); }