Пример #1
0
 public VideosController(IOptions <VideoServerOptions> options, IUploadService uploadService,
                         IVideoEncodingService encodingService)
 {
     _options         = options.Value;
     _uploadService   = uploadService;
     _encodingService = encodingService;
 }
Пример #2
0
 public UploadService(IOptions <VideoServerOptions> options, VideoCdnDbContext dbContext,
                      ChunkedUploadsCollection chunkedInProgress)
 {
     _options           = options.Value;
     _dbContext         = dbContext;
     _chunkedInProgress = chunkedInProgress;
 }
Пример #3
0
 public StatsController(IOptions <VideoServerOptions> options, IMemoryCache memoryCache,
                        VideoCdnDbContext dbContext, ISettingsService <VideoCdnSettings> settingsService)
 {
     _options         = options.Value;
     _memoryCache     = memoryCache;
     _dbContext       = dbContext;
     _settingsService = settingsService;
 }
Пример #4
0
 public VideoEncodingService(IVideoEncodingQueue queue, ISettingsService <VideoCdnSettings> settingsService,
                             VideoCdnDbContext dbContext, IOptions <VideoServerOptions> options)
 {
     _queue           = queue;
     _settingsService = settingsService;
     _dbContext       = dbContext;
     _options         = options.Value;
 }
Пример #5
0
 public StartupSetup(ILogger <StartupSetup> logger, IOptions <VideoServerOptions> options, VideoCdnDbContext dbContext,
                     UserManager <VideoCdnUser> userManager, RoleManager <IdentityRole <int> > roleManager, IOptions <AdminOptions> adminOptions)
 {
     this.logger       = logger;
     this.options      = options.Value;
     this.dbContext    = dbContext;
     this.userManager  = userManager;
     this.roleManager  = roleManager;
     this.adminOptions = adminOptions.Value;
 }
Пример #6
0
        /// <summary>
        /// Builds the ffmpeg arguments for encoding a video to H264 multi res (360p, 480p, 720p & 1080p) files
        /// </summary>
        /// <param name="fileName">The original file path</param>
        /// <param name="dataPath">The destination folder (a sub folder will be created by the provided file name)</param>
        /// <returns>The arguments for ffmpeg</returns>
        public static async Task <string> BuildEncodingArgs(string fileName, VideoServerOptions options,
                                                            VideoCdnSettings settings)
        {
            var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);

            string fullPath       = Path.Combine(options.TempFilePath, fileName);
            var    destinationDir = Path.Combine(options.DataPath, fileNameWithoutExtension);

            if (Directory.Exists(destinationDir))
            {
                Directory.Delete(destinationDir, true);
            }
            Directory.CreateDirectory(destinationDir);

            var videoCodec = options.VideoH264Codec switch
            {
                H264Codecs.h264 => VideoCodec.h264,
                H264Codecs.h264_nvenc => VideoCodec.h264_nvenc,
                H264Codecs.h264_cuvid => VideoCodec.h264_cuvid,
                _ => throw new NotImplementedException(),
            };

            // TODO: check hardware acceleration
            var info = await FFmpeg.GetMediaInfo(fullPath);

            string args = $"-threads {options.ThreadsPerStream} -i \"{fullPath}\" ";

            var audio = info.AudioStreams.FirstOrDefault()
                        ?.SetCodec(AudioCodec.aac);

            if (settings.Encode360p)
            {
                var video360 = info.VideoStreams.FirstOrDefault()
                               ?.SetCodec(videoCodec)
                               ?.SetSize(VideoSize.Nhd);
                args += GetOutputArgs(video360, audio, "360", destinationDir, options.ThreadsPerStream);
            }

            if (settings.Encode480p)
            {
                var video480 = info.VideoStreams.FirstOrDefault()
                               ?.SetCodec(videoCodec)
                               ?.SetSize(VideoSize.Hd480);
                args += GetOutputArgs(video480, audio, "480", destinationDir, options.ThreadsPerStream);
            }

            if (settings.Encode720p)
            {
                var video720 = info.VideoStreams.FirstOrDefault()
                               ?.SetCodec(videoCodec)
                               ?.SetSize(VideoSize.Hd720);
                args += GetOutputArgs(video720, audio, "720", destinationDir, options.ThreadsPerStream);
            }

            if (settings.Encode1080p)
            {
                var video1080 = info.VideoStreams.FirstOrDefault()
                                ?.SetCodec(videoCodec)
                                ?.SetSize(VideoSize.Hd1080);
                args += GetOutputArgs(video1080, audio, "1080", destinationDir, options.ThreadsPerStream);
            }

            if (settings.Encode2160p)
            {
                var video2160 = info.VideoStreams.FirstOrDefault()
                                ?.SetCodec(videoCodec)
                                ?.SetSize(VideoSize.Uhd2160);
                args += GetOutputArgs(video2160, audio, "2160", destinationDir, options.ThreadsPerStream);
            }


            if (settings.Encode4320p)
            {
                var video1440 = info.VideoStreams.FirstOrDefault()
                                ?.SetCodec(videoCodec)
                                ?.SetSize(VideoSize.Uhd4320);
                args += GetOutputArgs(video1440, audio, "4320", destinationDir, options.ThreadsPerStream);
            }
            return(args);
        }