private static IDemuxerController CreateDemuxerController(IObservable <byte[]> chunkReady = null)
        {
            var demuxer    = new FFmpegDemuxer(new FFmpegGlue());
            var controller = new DemuxerController(demuxer);

            if (chunkReady != null)
            {
                controller.SetDataSource(chunkReady);
            }
            return(controller);
        }
Example #2
0
        public override async Task <ClipConfiguration> Open()
        {
            Log.Enter();

            _demuxer = new FFmpegDemuxer(new FFmpegGlue());
            // TODO: Add token cancellation support
            var config = await _demuxer.InitForUrl(_sourceUrls[0], _options?.Options);

            Log.Info($"{_sourceUrls[0]} opened");
            StartBufferWriteLoop(NewSession());

            Log.Exit();
            return(config);
        }
Example #3
0
        private Task <ClipConfiguration> InitDemuxer(FFmpegDemuxer demuxer, InitType initType)
        {
            switch (initType)
            {
            case InitType.ForEs:
                return(demuxer.InitForEs());

            case InitType.ForUrl:
                return(demuxer.InitForUrl("dummy_url"));

            default:
                throw new ArgumentOutOfRangeException(nameof(initType), initType, null);
            }
        }
        public override Task <ClipConfiguration> Open()
        {
            Log.Enter();

            _sessionCts = new CancellationTokenSource();
            _demuxer    = new FFmpegDemuxer(new FFmpegGlue());

            // TODO: Add token cancellation support
            var openTask = _demuxer.InitForUrl(_sourceUrls[0], _options?.Options);

            Log.Info($"Opening {_sourceUrls[0]}");

            Log.Exit();
            return(openTask);
        }
        public override void Dispose()
        {
            Log.Enter();

            _sessionCts?.Cancel();

            Log.Info($"Disposing demuxer: {_demuxer != null}");
            _demuxer?.Dispose();
            _demuxer    = null;
            _sourceUrls = null;

            _sessionCts?.Dispose();
            _sessionCts = null;

            Log.Exit();
        }
Example #6
0
        public IDataProvider Create(ClipDefinition clip)
        {
            if (clip == null)
            {
                throw new ArgumentNullException(nameof(clip), "clip cannot be null");
            }

            if (!SupportsClip(clip))
            {
                throw new ArgumentException("unsupported clip type");
            }

            var demuxer           = new FFmpegDemuxer(new FFmpegGlue());
            var demuxerController = new DemuxerController(demuxer);

            return(new HLSDataProvider(demuxerController, clip));
        }
        public IDataProvider Create(ClipDefinition clip)
        {
            if (clip == null)
            {
                throw new ArgumentNullException(nameof(clip), "clip cannot be null");
            }

            if (!SupportsClip(clip))
            {
                throw new ArgumentException("unsupported clip type");
            }

            var rtspClient        = new RTSPClient();
            var demuxer           = new FFmpegDemuxer(new FFmpegGlue());
            var demuxerController = new DemuxerController(demuxer);

            demuxerController.SetDataSource(rtspClient.ChunkReady());

            return(new RTSPDataProvider(demuxerController, rtspClient, clip));
        }
Example #8
0
        public override void Dispose()
        {
            Log.Enter();

            Log.Info($"Terminating BufferWriteLoop: {_bufferWriteLoopTaskTask != null}");
            _sessionCts?.Cancel();
            _bufferWriteLoopTaskTask?.GetAwaiter().GetResult().GetAwaiter().GetResult();

            Log.Info($"Disposing demuxer: {_demuxer != null}");
            _demuxer?.Dispose();
            _demuxer    = null;
            _sourceUrls = null;

            Log.Info($"Disposing buffered packets: {_buffer != null}");
            _buffer?.Dispose();
            _buffer = null;

            _sessionCts?.Dispose();
            _sessionCts = null;

            ErrorHandler = null;

            Log.Exit();
        }