コード例 #1
0
        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
            });
        }