/// <summary> /// Create a new EncoderPackage /// </summary> public EncoderPackage(PackageSpec SrcSpec, int Index, EncoderJob Job, MediaFrame Frame) { Buffers = new List <IEncoderBuffer>(); this.JobIndex = Index; this.Job = Job; this.Frame = Frame; Specification = SrcSpec; }
/// <summary> /// Initialise an encoder job based on previously setup capture devices. /// Need to have one job per 'ReductionFactor' in the config. /// </summary> private void EncoderSetup() { var factors = config.EncoderSettings.ReductionFactors; Packages = new List <EncoderPackage>(); int fps = (cam != null) ? (cam.m_frameRate) : (config.Video.InputFrameRate); var needed_packages = ListRequiredPackages(); int pkg_id = 0; foreach (var np in needed_packages) { EncoderJob job = new EncoderJob(); job.OldSegmentNumber = 1; string joined = Path.Combine(config.EncoderSettings.LocalSystemOutputFolder, config.EncoderSettings.LocalSystemFilePrefix); joined += "_" + pkg_id; int bitrate = (int)(config.EncoderSettings.VideoBitrate * np.Quality); // linear scale int error = EncoderBridge.InitialiseEncoderJob( ref job, // job to complete np.VideoSize.Width, // OUTPUT video width np.VideoSize.Height, // OUTPUT video height joined, // OUTPUT folder + filename prefix fps, // INPUT frame rate (output will match) bitrate, // OUTPUT video bit rate config.EncoderSettings.FragmentSeconds); // Fragment length (seconds) if (error != 0) { throw new Exception("Encoder setup error #" + error); } if (!job.IsValid) { throw new Exception("Job rejected"); } var mf = new MediaFrame(); mf.ForceAudioConsumption = (np.HasVideo) ? ((byte)0) : ((byte)1); // don't sync if no video. var pkg = new EncoderPackage(np, pkg_id, job, mf); ConnectPackageToBuffers(pkg, np); Packages.Add(pkg); pkg_id++; } }
/// <summary> /// Initialise an encoder job based on previously setup capture devices. /// Need to have one job per 'ReductionFactor' in the config. /// </summary> private void EncoderSetup() { var factors = config.EncoderSettings.ReductionFactors; Packages = new List<EncoderPackage>(); int fps = (cam != null) ? (cam.m_frameRate) : (config.Video.InputFrameRate); var needed_packages = ListRequiredPackages(); int pkg_id = 0; foreach (var np in needed_packages) { EncoderJob job = new EncoderJob(); job.OldSegmentNumber = 1; string joined = Path.Combine(config.EncoderSettings.LocalSystemOutputFolder, config.EncoderSettings.LocalSystemFilePrefix); joined += "_" + pkg_id; int bitrate = (int)(config.EncoderSettings.VideoBitrate * np.Quality); // linear scale int error = EncoderBridge.InitialiseEncoderJob( ref job, // job to complete np.VideoSize.Width, // OUTPUT video width np.VideoSize.Height, // OUTPUT video height joined, // OUTPUT folder + filename prefix fps, // INPUT frame rate (output will match) bitrate, // OUTPUT video bit rate config.EncoderSettings.FragmentSeconds); // Fragment length (seconds) if (error != 0) throw new Exception("Encoder setup error #" + error); if (!job.IsValid) throw new Exception("Job rejected"); var mf = new MediaFrame(); mf.ForceAudioConsumption = (np.HasVideo) ? ((byte)0) : ((byte)1); // don't sync if no video. var pkg = new EncoderPackage(np, pkg_id, job, mf); ConnectPackageToBuffers(pkg, np); Packages.Add(pkg); pkg_id++; } }