Esempio n. 1
0
 public RtspMediaSource()
 {
     _eventGenerator                 = new MediaEventGeneratorImpl();
     _stateSubject                   = new BehaviorSubject <SourceState>(SourceState.Closed);
     _streams                        = new RtspMediaStream[0];
     _presentationDescriptor         = null;
     _isSampleQueueEmptySubscription = null;
     _bufferingStateLock             = new SpinLock();
     _bufferingStartedSent           = false;
 }
Esempio n. 2
0
 public RtspMediaStream(RtspMediaSource source, StreamType type, RtspMediaSource.StreamConfig config)
 {
     _eventGenerator     = new MediaEventGeneratorImpl();
     _queueConsumerLock  = new SpinLock();
     _sampleQueue        = new ConcurrentQueue <IRtspSample>();
     _requestQueue       = new ConcurrentQueue <ComObject>();
     _isSampleQueueEmpty = new BehaviorSubject <bool>(false);
     MediaSource         = source;
     Type       = type;
     _config    = config;
     Descriptor = (type == StreamType.Video) ? CreateVideoStreamDescriptor((int)type) : CreateAudioStreamDescriptor((int)type);
     IsActive   = false;
     // Subscribe packet arrival
     _packetSubscription = _config.SourceStream.ObserveOn(ThreadPoolScheduler.Instance).Subscribe(HandlePacket);
     // Subscribe state change
     _stateSubscription = source.StateChanged.Subscribe(HandleStateChange);
     if (!string.IsNullOrEmpty(_config.DebugSaveFilename))
     {
         _debugSaveStream = new FileStream(_config.DebugSaveFilename, FileMode.Create);
     }
 }