Пример #1
0
 public bool IsEncoderRegistered(EncoderHandler handler)
 {
     lock (_syncLock)
     {
         return(_registeredEncoders.ContainsKey(handler));
     }
 }
Пример #2
0
 public void EndEncoding(EncoderHandler handler, string transcodeId)
 {
     lock (_syncLock)
     {
         if (_currentEncoderTranscodes[handler].Contains(transcodeId) == true)
         {
             _currentEncoderTranscodes[handler].Remove(transcodeId);
         }
     }
 }
Пример #3
0
 public FFMpegEncoderConfig GetEncoderConfig(EncoderHandler handler)
 {
     lock (_syncLock)
     {
         FFMpegEncoderConfig config;
         if (_registeredEncoders.TryGetValue(handler, out config))
         {
             return(config);
         }
         return(_softwareEncoder);
     }
 }
Пример #4
0
 public void UnregisterEncoder(EncoderHandler handler)
 {
     lock (_syncLock)
     {
         if (_currentEncoderTranscodes.ContainsKey(handler))
         {
             _currentEncoderTranscodes.Remove(handler);
         }
         if (_registeredEncoders.ContainsKey(handler))
         {
             _registeredEncoders.Remove(handler);
         }
     }
 }
Пример #5
0
        public EncoderHandler StartEncoding(string transcodeId, VideoCodec codec)
        {
            EncoderHandler handler = EncoderHandler.Software;

            lock (_syncLock)
            {
                foreach (KeyValuePair <EncoderHandler, FFMpegEncoderConfig> encoder in _registeredEncoders)
                {
                    if (encoder.Value.SupportedCodecs.Contains(codec)) //Check codec support
                    {
                        handler = encoder.Key;
                        break;
                    }
                }
                if (_currentEncoderTranscodes[handler].Contains(transcodeId) == false)
                {
                    _currentEncoderTranscodes[handler].Add(transcodeId);
                }
                return(handler);
            }
        }
Пример #6
0
 public void RegisterEncoder(EncoderHandler handler)
 {
     lock (_syncLock)
     {
         if (_registeredEncoders.ContainsKey(handler) == true)
         {
             return;
         }
         if (handler == EncoderHandler.HardwareIntel)
         {
             if (_currentEncoderTranscodes.ContainsKey(handler) == false)
             {
                 _currentEncoderTranscodes.Add(handler, new List <string>());
             }
             _registeredEncoders.Add(handler, new FFMpegEncoderConfig()
             {
                 SupportedCodecs = { VideoCodec.Mpeg2, VideoCodec.H264, VideoCodec.H265 },
                 Presets         = new Dictionary <VideoCodec, Dictionary <EncodingPreset, string> >()
                 {
                     {
                         VideoCodec.Mpeg2,
                         new Dictionary <EncodingPreset, string>()
                         {
                             { EncodingPreset.Default, "-preset fast" },
                             { EncodingPreset.Ultrafast, "-preset fast" },
                             { EncodingPreset.Superfast, "-preset fast" },
                             { EncodingPreset.Veryfast, "-preset fast" },
                             { EncodingPreset.Faster, "-preset fast" },
                             { EncodingPreset.Fast, "-preset fast" },
                             { EncodingPreset.Medium, "-preset medium" },
                             { EncodingPreset.Slow, "-preset slow" },
                             { EncodingPreset.Slower, "-preset slow" },
                             { EncodingPreset.Veryslow, "-preset slow" }
                         }
                     },
                     {
                         VideoCodec.H264,
                         new Dictionary <EncodingPreset, string>()
                         {
                             { EncodingPreset.Default, "-preset veryfast" },
                             { EncodingPreset.Ultrafast, "-preset veryfast" },
                             { EncodingPreset.Superfast, "-preset veryfast" },
                             { EncodingPreset.Veryfast, "-preset veryfast" },
                             { EncodingPreset.Faster, "-preset faster" },
                             { EncodingPreset.Fast, "-preset fast" },
                             { EncodingPreset.Medium, "-preset medium" },
                             { EncodingPreset.Slow, "-preset slow" },
                             { EncodingPreset.Slower, "-preset slower" },
                             { EncodingPreset.Veryslow, "-preset veryslow" }
                         }
                     },
                     {
                         VideoCodec.H265,
                         new Dictionary <EncodingPreset, string>()
                         {
                             { EncodingPreset.Default, "-preset fast" },
                             { EncodingPreset.Ultrafast, "-preset fast" },
                             { EncodingPreset.Superfast, "-preset fast" },
                             { EncodingPreset.Veryfast, "-preset fast" },
                             { EncodingPreset.Faster, "-preset fast" },
                             { EncodingPreset.Fast, "-preset fast" },
                             { EncodingPreset.Medium, "-preset medium" },
                             { EncodingPreset.Slow, "-preset slow" },
                             { EncodingPreset.Slower, "-preset slow" },
                             { EncodingPreset.Veryslow, "-preset slow" }
                         }
                     }
                 },
                 Profiles = new Dictionary <VideoCodec, Dictionary <EncodingProfile, string> >()
                 {
                     {
                         VideoCodec.Mpeg2,
                         new Dictionary <EncodingProfile, string>()
                         {
                             { EncodingProfile.Unknown, "-profile:v main" },
                             { EncodingProfile.Simple, "-profile:v simple" },
                             { EncodingProfile.Main, "-profile:v main" },
                             { EncodingProfile.High, "-profile:v high" }
                         }
                     },
                     {
                         VideoCodec.H264,
                         new Dictionary <EncodingProfile, string>()
                         {
                             { EncodingProfile.Unknown, "-profile:v baseline" },
                             { EncodingProfile.Baseline, "-profile:v baseline" },
                             { EncodingProfile.Main, "-profile:v main" },
                             { EncodingProfile.High, "-profile:v high" },
                             { EncodingProfile.High422, "-profile:v high" },
                             { EncodingProfile.High444, "-profile:v high" }
                         }
                     },
                     {
                         VideoCodec.H265,
                         new Dictionary <EncodingProfile, string>()
                         {
                             { EncodingProfile.Unknown, "-profile:v main" },
                             { EncodingProfile.Main, "-profile:v main" },
                             { EncodingProfile.Main10, "-profile:v main10" }
                         }
                     }
                 }
             });
         }
         else if (handler == EncoderHandler.HardwareNvidia)
         {
             if (_currentEncoderTranscodes.ContainsKey(handler) == false)
             {
                 _currentEncoderTranscodes.Add(handler, new List <string>());
             }
             _registeredEncoders.Add(handler, new FFMpegEncoderConfig()
             {
                 SupportedCodecs = { VideoCodec.H264, VideoCodec.H265 },
                 Presets         = new Dictionary <VideoCodec, Dictionary <EncodingPreset, string> >()
                 {
                     {
                         VideoCodec.H264,
                         new Dictionary <EncodingPreset, string>()
                         {
                             { EncodingPreset.Default, "-preset hp" },
                             { EncodingPreset.Ultrafast, "-preset hp" },
                             { EncodingPreset.Superfast, "-preset hp" },
                             { EncodingPreset.Veryfast, "-preset hp" },
                             { EncodingPreset.Faster, "-preset hp" },
                             { EncodingPreset.Fast, "-preset fast" },
                             { EncodingPreset.Medium, "-preset medium" },
                             { EncodingPreset.Slow, "-preset slow" },
                             { EncodingPreset.Slower, "-preset hq" },
                             { EncodingPreset.Veryslow, "-preset hq" }
                         }
                     },
                     {
                         VideoCodec.H265,
                         new Dictionary <EncodingPreset, string>()
                         {
                             { EncodingPreset.Default, "-preset hp" },
                             { EncodingPreset.Ultrafast, "-preset hp" },
                             { EncodingPreset.Superfast, "-preset hp" },
                             { EncodingPreset.Veryfast, "-preset hp" },
                             { EncodingPreset.Faster, "-preset hp" },
                             { EncodingPreset.Fast, "-preset fast" },
                             { EncodingPreset.Medium, "-preset medium" },
                             { EncodingPreset.Slow, "-preset slow" },
                             { EncodingPreset.Slower, "-preset hq" },
                             { EncodingPreset.Veryslow, "-preset hq" }
                         }
                     }
                 },
                 Profiles = new Dictionary <VideoCodec, Dictionary <EncodingProfile, string> >()
                 {
                     {
                         VideoCodec.H264,
                         new Dictionary <EncodingProfile, string>()
                         {
                             { EncodingProfile.Unknown, "-profile:v baseline" },
                             { EncodingProfile.Baseline, "-profile:v baseline" },
                             { EncodingProfile.Main, "-profile:v main" },
                             { EncodingProfile.High, "-profile:v high" },
                             { EncodingProfile.High422, "-profile:v high" },
                             { EncodingProfile.High444, "-profile:v high" }
                         }
                     }
                 }
             });
         }
     }
 }