Exemplo n.º 1
0
        private static void SendTestPattern(object state)
        {
            lock (_sendTestPatternTimer)
            {
                unsafe
                {
                    if (OnTestPatternSampleReady != null)
                    {
                        var stampedTestPattern = _testPattern.Clone() as System.Drawing.Image;
                        AddTimeStampAndLocation(stampedTestPattern, DateTime.UtcNow.ToString("dd MMM yyyy HH:mm:ss:fff"), "Test Pattern");
                        var sampleBuffer = BitmapToRGBA(stampedTestPattern as System.Drawing.Bitmap, _testPattern.Width, _testPattern.Height);

                        var i420Frame = _videoFrameConverter.Convert(sampleBuffer);

                        _presentationTimestamp += VIDEO_TIMESTAMP_SPACING;

                        //i420Frame.key_frame = _forceKeyFrame ? 1 : 0;
                        i420Frame.pts = _presentationTimestamp;

                        byte[] encodedBuffer = _ffmpegEncoder.Encode(AVCodecID.AV_CODEC_ID_VP8, i420Frame, FRAMES_PER_SECOND);

                        if (encodedBuffer != null)
                        {
                            OnTestPatternSampleReady?.Invoke(SDPMediaTypesEnum.video, VIDEO_TIMESTAMP_SPACING, encodedBuffer);
                        }

                        stampedTestPattern.Dispose();
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void DoStream(NetworkSettings networkParams)
        {
            var streamerTask = httpStreamer.Start(networkParams);

            streamerTask.ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                }
                var ex = t.Exception;
                if (ex != null)
                {
                    errorCode = 100501;
                    logger.Error(ex);
                    running = false;
                }
            });

            Stopwatch sw = Stopwatch.StartNew();

            while (State == MediaState.Started)
            {
                sw.Restart();

                try
                {
                    if (!syncEvent.WaitOne(1000))
                    {
                        continue;
                    }

                    if (State != MediaState.Started)
                    {
                        break;
                    }

                    var buffer = screenSource.SharedBitmap;

                    encoder.Encode(buffer);
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
                    Thread.Sleep(1000);
                }

                //rtpTimestamp += (uint)(sw.ElapsedMilliseconds * 90.0);

                var mSec = sw.ElapsedMilliseconds;
            }

            streamerTask.Wait();
        }