예제 #1
0
        private static void InitialiseTestPattern()
        {
            _testPattern = new Bitmap(TEST_PATTERN_IMAGE_PATH);

            FFmpegInit.Initialise(FfmpegLogLevelEnum.AV_LOG_DEBUG);

            _ffmpegEncoder = new FFmpegVideoEncoder();
            Console.WriteLine($"Codec name {_ffmpegEncoder.GetCodecName()}.");

            _videoFrameConverter = new VideoFrameConverter(
                _testPattern.Width, _testPattern.Height,
                AVPixelFormat.AV_PIX_FMT_BGRA,
                _testPattern.Width, _testPattern.Height,
                AVPixelFormat.AV_PIX_FMT_YUV420P);
        }
예제 #2
0
        public void Setup(VideoEncoderSettings encPars, NetworkSettings networkParams)
        {
            logger.Debug("VideoHttpStreamer::Setup(...) "
                         + encPars.Resolution.Width + "x" + encPars.Resolution.Height + " " + encPars.EncoderId);

            if (State != MediaState.Closed)
            {
                throw new InvalidOperationException("Invalid state " + State);
            }

            try
            {
                this.networkParams = networkParams;

                httpStreamer = new Networks.HttpStreamer();

                encoder = new FFmpegVideoEncoder();
                encoder.Open(encPars);
                encoder.DataEncoded += Encoder_DataEncoded;

                state = MediaState.Initialized;
            }
            catch (Exception ex)
            {
                logger.Error(ex);

                errorCode = 100503;
                if (encoder != null)
                {
                    encoder.DataEncoded -= Encoder_DataEncoded;
                    encoder.Close();
                    encoder = null;
                }

                state = MediaState.Closed;
                throw;
            }
        }