コード例 #1
0
 /// <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;
 }
コード例 #2
0
        /// <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++;
            }
        }
コード例 #3
0
        /// <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++;
            }
        }