diff options
Diffstat (limited to 'MediaBrowser.Api')
| -rw-r--r-- | MediaBrowser.Api/ApiEntryPoint.cs | 27 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/BaseStreamingService.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/Dash/MpegDashService.cs | 7 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/MediaInfoService.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/StreamRequest.cs | 1 |
7 files changed, 34 insertions, 16 deletions
diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs index ef415ec57c..281f764b5f 100644 --- a/MediaBrowser.Api/ApiEntryPoint.cs +++ b/MediaBrowser.Api/ApiEntryPoint.cs @@ -132,6 +132,7 @@ namespace MediaBrowser.Api /// Called when [transcode beginning]. /// </summary> /// <param name="path">The path.</param> + /// <param name="streamId">The stream identifier.</param> /// <param name="transcodingJobId">The transcoding job identifier.</param> /// <param name="type">The type.</param> /// <param name="process">The process.</param> @@ -140,6 +141,7 @@ namespace MediaBrowser.Api /// <param name="cancellationTokenSource">The cancellation token source.</param> /// <returns>TranscodingJob.</returns> public TranscodingJob OnTranscodeBeginning(string path, + string streamId, string transcodingJobId, TranscodingJobType type, Process process, @@ -157,7 +159,8 @@ namespace MediaBrowser.Api ActiveRequestCount = 1, DeviceId = deviceId, CancellationTokenSource = cancellationTokenSource, - Id = transcodingJobId + Id = transcodingJobId, + StreamId = streamId }; _activeTranscodingJobs.Add(job); @@ -316,17 +319,26 @@ namespace MediaBrowser.Api /// Kills the single transcoding job. /// </summary> /// <param name="deviceId">The device id.</param> + /// <param name="streamId">The stream identifier.</param> /// <param name="deleteFiles">The delete files.</param> /// <returns>Task.</returns> - /// <exception cref="ArgumentNullException">deviceId</exception> - internal void KillTranscodingJobs(string deviceId, Func<string, bool> deleteFiles) + internal void KillTranscodingJobs(string deviceId, string streamId, Func<string, bool> deleteFiles) { if (string.IsNullOrEmpty(deviceId)) { throw new ArgumentNullException("deviceId"); } - KillTranscodingJobs(j => string.Equals(deviceId, j.DeviceId, StringComparison.OrdinalIgnoreCase), deleteFiles); + KillTranscodingJobs(j => + { + if (string.Equals(deviceId, j.DeviceId, StringComparison.OrdinalIgnoreCase)) + { + return string.IsNullOrWhiteSpace(streamId) || string.Equals(streamId, j.StreamId, StringComparison.OrdinalIgnoreCase); + } + + return false; + + }, deleteFiles); } /// <summary> @@ -335,7 +347,7 @@ namespace MediaBrowser.Api /// <param name="killJob">The kill job.</param> /// <param name="deleteFiles">The delete files.</param> /// <returns>Task.</returns> - internal void KillTranscodingJobs(Func<TranscodingJob, bool> killJob, Func<string, bool> deleteFiles) + private void KillTranscodingJobs(Func<TranscodingJob, bool> killJob, Func<string, bool> deleteFiles) { var jobs = new List<TranscodingJob>(); @@ -517,6 +529,11 @@ namespace MediaBrowser.Api public class TranscodingJob { /// <summary> + /// Gets or sets the stream identifier. + /// </summary> + /// <value>The stream identifier.</value> + public string StreamId { get; set; } + /// <summary> /// Gets or sets the path. /// </summary> /// <value>The path.</value> diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 3a10881821..7115ddffdb 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -134,7 +134,7 @@ namespace MediaBrowser.Api.Playback var data = GetCommandLineArguments("dummy\\dummy", "dummyTranscodingId", state, false); data += "-" + (state.Request.DeviceId ?? string.Empty); - data += "-" + (state.Request.ClientTime ?? string.Empty); + data += "-" + (state.Request.StreamId ?? state.Request.ClientTime ?? string.Empty); var dataHash = data.GetMD5().ToString("N"); @@ -1054,6 +1054,7 @@ namespace MediaBrowser.Api.Playback } var transcodingJob = ApiEntryPoint.Instance.OnTranscodeBeginning(outputPath, + state.Request.StreamId ?? state.Request.ClientTime, transcodingId, TranscodingJobType, process, @@ -1523,7 +1524,7 @@ namespace MediaBrowser.Api.Playback } else if (i == 16) { - request.ClientTime = val; + request.StreamId = val; } else if (i == 17) { diff --git a/MediaBrowser.Api/Playback/Dash/MpegDashService.cs b/MediaBrowser.Api/Playback/Dash/MpegDashService.cs index 2655ff8ad1..38b0d35d11 100644 --- a/MediaBrowser.Api/Playback/Dash/MpegDashService.cs +++ b/MediaBrowser.Api/Playback/Dash/MpegDashService.cs @@ -162,7 +162,7 @@ namespace MediaBrowser.Api.Playback.Dash // If the playlist doesn't already exist, startup ffmpeg try { - KillTranscodingJobs(request.DeviceId, playlistPath); + ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, request.StreamId, p => false); if (currentTranscodingIndex.HasValue) { @@ -204,11 +204,6 @@ namespace MediaBrowser.Api.Playback.Dash return await GetSegmentResult(playlistPath, segmentPath, requestedIndex, segmentLength, job ?? ApiEntryPoint.Instance.GetTranscodingJob(playlistPath, TranscodingJobType), cancellationToken).ConfigureAwait(false); } - private void KillTranscodingJobs(string deviceId, string playlistPath) - { - ApiEntryPoint.Instance.KillTranscodingJobs(j => j.Type == TranscodingJobType && string.Equals(j.DeviceId, deviceId, StringComparison.OrdinalIgnoreCase), p => !string.Equals(p, playlistPath, StringComparison.OrdinalIgnoreCase)); - } - private long GetPositionTicks(StreamState state, int requestedIndex) { if (requestedIndex <= 0) diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 32bbda8dbc..43a9db1312 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -136,7 +136,7 @@ namespace MediaBrowser.Api.Playback.Hls // If the playlist doesn't already exist, startup ffmpeg try { - ApiEntryPoint.Instance.KillTranscodingJobs(j => j.Type == TranscodingJobType && string.Equals(j.DeviceId, request.DeviceId, StringComparison.OrdinalIgnoreCase), p => !string.Equals(p, playlistPath, StringComparison.OrdinalIgnoreCase)); + ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, request.StreamId ?? request.ClientTime, p => false); if (currentTranscodingIndex.HasValue) { diff --git a/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs b/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs index 9f80fcd0ad..da4ffb55dc 100644 --- a/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs +++ b/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs @@ -47,6 +47,9 @@ namespace MediaBrowser.Api.Playback.Hls { [ApiMember(Name = "DeviceId", Description = "The device id of the client requesting. Used to stop encoding processes when needed.", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "DELETE")] public string DeviceId { get; set; } + + [ApiMember(Name = "StreamId", Description = "The stream id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "DELETE")] + public string StreamId { get; set; } } public class HlsSegmentService : BaseApiService @@ -69,7 +72,7 @@ namespace MediaBrowser.Api.Playback.Hls public void Delete(StopEncodingProcess request) { - ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, path => true); + ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, request.StreamId, path => true); } /// <summary> diff --git a/MediaBrowser.Api/Playback/MediaInfoService.cs b/MediaBrowser.Api/Playback/MediaInfoService.cs index 5adb76cc58..943d9fe481 100644 --- a/MediaBrowser.Api/Playback/MediaInfoService.cs +++ b/MediaBrowser.Api/Playback/MediaInfoService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Library; +using System; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dto; diff --git a/MediaBrowser.Api/Playback/StreamRequest.cs b/MediaBrowser.Api/Playback/StreamRequest.cs index 907b17b244..b52260b506 100644 --- a/MediaBrowser.Api/Playback/StreamRequest.cs +++ b/MediaBrowser.Api/Playback/StreamRequest.cs @@ -71,6 +71,7 @@ namespace MediaBrowser.Api.Playback public string Params { get; set; } public string ClientTime { get; set; } + public string StreamId { get; set; } public string TranscodingJobId { get; set; } } |
