/// <summary> /// Callback handler for the lowOnFrames event that the vbss frame player will raise when there are no more frames to stream. /// The behavior is to enqueue more frames. /// </summary> /// <param name="sender">The vbss frame player.</param> /// <param name="e">LowOnframes eventArgs.</param> private void OnVbssPlayerLowOnFrames(object sender, LowOnFramesEventArgs e) { if (this.shutdown != 1) { this.logger.Info($"Low on frames event raised for the vbss player, remaining lenght is {e.RemainingMediaLengthInMS} ms"); // Create the video buffers this.vbssMediaBuffers = Utilities.CreateVideoMediaBuffers(DateTime.Now.Ticks, this.vbssKnownSupportedFormats, true, this.logger); this.vbssFramePlayer?.EnqueueBuffersAsync(new List <AudioMediaBuffer>(), this.vbssMediaBuffers).ForgetAndLogExceptionAsync(this.logger); this.logger.Info("enqueued more frames in the vbssFramePlayer"); } }
/// <summary> /// Event to signal the player is low on frames. /// </summary> /// <param name="sender">The video socket.</param> /// <param name="e">Event containing media type and length of media remaining.</param> private void OnAudioVideoFramePlayerLowOnFrames(object sender, LowOnFramesEventArgs e) { if (this.shutdown != 1) { this.logger.Info($"Low on frames event raised for {e.MediaType}, remaining lenght is {e.RemainingMediaLengthInMS} ms"); // here we want to keep the AV creation in sync so we take as reference audio. if (e.MediaType == MediaType.Audio) { // use the past tick as reference to avoid av out of sync this.CreateAVBuffers(this.mediaTick, replayed: true); this.audioVideoFramePlayer?.EnqueueBuffersAsync(this.audioMediaBuffers, this.videoMediaBuffers).ForgetAndLogExceptionAsync(this.logger, "Failed to enqueue AV buffers"); this.logger.Info($"Low on audio event raised, enqueued {this.audioMediaBuffers.Count} buffers last audio tick {this.audioTick} and mediatick {this.mediaTick}"); } this.logger.Info("enqueued more frames in the audioVideoPlayer"); } }
private void OnLowOnFrames(object sender, LowOnFramesEventArgs e) { if (Interlocked.CompareExchange(ref _disposed, 1, 1) == 1) { return; } Log.Info( new CallerInfo(), LogContext.Media, "Low in frames event raised]"); _videoMediaBuffers = _downloadManager.GetVideoMediaBuffers(_mediaTick); _audioMediaBuffers = _downloadManager.GetAudioMediaBuffers(_mediaTick); _mediaTick = Math.Max(_audioMediaBuffers.Last().Timestamp, _videoMediaBuffers.Last().Timestamp); _audioVideoFramePlayer.EnqueueBuffersAsync(_audioMediaBuffers, _videoMediaBuffers).ForgetAndLogException(); Log.Info( new CallerInfo(), LogContext.Media, "enqueued more frames in frames event raised"); }