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); }
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); }
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(); }
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)); }
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(); }