using System; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Streaming; namespace MediaBrowser.Controller.MediaEncoding; /// /// A service for managing media transcoding. /// public interface ITranscodeManager { /// /// Get transcoding job. /// /// Playback session id. /// The transcoding job. public TranscodingJob? GetTranscodingJob(string playSessionId); /// /// Get transcoding job. /// /// Path to the transcoding file. /// The . /// The transcoding job. public TranscodingJob? GetTranscodingJob(string path, TranscodingJobType type); /// /// Ping transcoding job. /// /// Play session id. /// Is user paused. /// Play session id is null. public void PingTranscodingJob(string playSessionId, bool? isUserPaused); /// /// Kills the single transcoding job. /// /// The device id. /// The play session identifier. /// The delete files. /// Task. public Task KillTranscodingJobs(string deviceId, string? playSessionId, Func deleteFiles); /// /// Report the transcoding progress to the session manager. /// /// The of which the progress will be reported. /// The of the current transcoding job. /// The current transcoding position. /// The framerate of the transcoding job. /// The completion percentage of the transcode. /// The number of bytes transcoded. /// The bitrate of the transcoding job. public void ReportTranscodingProgress( TranscodingJob job, StreamState state, TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate); /// /// Starts FFMpeg. /// /// The state. /// The output path. /// The command line arguments for FFmpeg. /// The user id. /// The . /// The cancellation token source. /// The working directory. /// Task. public Task StartFfMpeg( StreamState state, string outputPath, string commandLineArguments, Guid userId, TranscodingJobType transcodingJobType, CancellationTokenSource cancellationTokenSource, string? workingDirectory = null); /// /// Called when [transcode begin request]. /// /// The path. /// The type. /// The . public TranscodingJob? OnTranscodeBeginRequest(string path, TranscodingJobType type); /// /// Called when [transcode end]. /// /// The transcode job. public void OnTranscodeEndRequest(TranscodingJob job); /// /// Transcoding lock. /// /// The output path of the transcoded file. /// The cancellation token. /// An . ValueTask LockAsync(string outputPath, CancellationToken cancellationToken); }