diff options
| -rw-r--r-- | MediaBrowser.Api/Playback/Hls/BaseHlsService.cs | 13 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/Hls/VideoHlsService.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Api/SessionsService.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj | 3 | ||||
| -rw-r--r-- | MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj | 3 | ||||
| -rw-r--r-- | MediaBrowser.Model/ApiClient/IApiClient.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dto/StreamOptions.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Model/MediaBrowser.Model.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.Model/Querying/SessionQuery.cs | 19 |
9 files changed, 54 insertions, 4 deletions
diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs index eb133b7d6..e680546b0 100644 --- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs @@ -247,7 +247,16 @@ namespace MediaBrowser.Api.Playback.Hls { var probeSize = GetProbeSizeArgument(state.Item); - var args = string.Format("-itsoffset 1 {0} {1} {2} -i {3}{4} -threads 0 {5} {6} -sc_threshold 0 {7} -hls_time 10 -start_number 0 -hls_list_size 1440 \"{8}\"", + var hlsVideoRequest = state.VideoRequest as GetHlsVideoStream; + + var itsOffsetMs = hlsVideoRequest == null + ? 0 + : ((GetHlsVideoStream) state.VideoRequest).TimeStampOffsetMs; + + var itsOffset = itsOffsetMs == 0 ? string.Empty : string.Format("-itsoffset {0} ", TimeSpan.FromMilliseconds(itsOffsetMs).TotalSeconds); + + var args = string.Format("{0}{1} {2} {3} -i {4}{5} -threads 0 {6} {7} -sc_threshold 0 {8} -hls_time 10 -start_number 0 -hls_list_size 1440 \"{9}\"", + itsOffset, probeSize, GetUserAgentParam(state.Item), GetFastSeekCommandLineParameter(state.Request), @@ -259,8 +268,6 @@ namespace MediaBrowser.Api.Playback.Hls outputPath ).Trim(); - var hlsVideoRequest = state.VideoRequest as GetHlsVideoStream; - if (hlsVideoRequest != null) { if (hlsVideoRequest.AppendBaselineStream && state.Item is Video) diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index 7674fe7b7..901b27688 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -21,6 +21,14 @@ namespace MediaBrowser.Api.Playback.Hls [ApiMember(Name = "AppendBaselineStream", Description = "Optional. Whether or not to include a baseline audio-only stream in the master playlist.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool AppendBaselineStream { get; set; } + + [ApiMember(Name = "TimeStampOffsetMs", Description = "Optional. Alter the timestamps in the playlist by a given amount, in ms. Default is 1000.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] + public int TimeStampOffsetMs { get; set; } + + public GetHlsVideoStream() + { + TimeStampOffsetMs = 1000; + } } /// <summary> diff --git a/MediaBrowser.Api/SessionsService.cs b/MediaBrowser.Api/SessionsService.cs index a0ef4a9a3..cad3c4384 100644 --- a/MediaBrowser.Api/SessionsService.cs +++ b/MediaBrowser.Api/SessionsService.cs @@ -25,6 +25,9 @@ namespace MediaBrowser.Api /// <value><c>null</c> if [supports remote control] contains no value, <c>true</c> if [supports remote control]; otherwise, <c>false</c>.</value> [ApiMember(Name = "SupportsRemoteControl", Description = "Optional. Filter by sessions that can be remote controlled.", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")] public bool? SupportsRemoteControl { get; set; } + + [ApiMember(Name = "ControllableByUserId", Description = "Optional. Filter by sessions that a given user is allowed to remote control.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public Guid? ControllableByUserId { get; set; } } /// <summary> diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index eefabce76..867eb300a 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -296,6 +296,9 @@ <Compile Include="..\MediaBrowser.Model\Querying\PersonsQuery.cs"> <Link>Querying\PersonsQuery.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Querying\SessionQuery.cs"> + <Link>Querying\SessionQuery.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Querying\SimilarItemsQuery.cs"> <Link>Querying\SimilarItemsQuery.cs</Link> </Compile> diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 9a491bcd4..606aee1f9 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -280,6 +280,9 @@ <Compile Include="..\MediaBrowser.Model\Querying\PersonsQuery.cs"> <Link>Querying\PersonsQuery.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Querying\SessionQuery.cs"> + <Link>Querying\SessionQuery.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Querying\SimilarItemsQuery.cs"> <Link>Querying\SimilarItemsQuery.cs</Link> </Compile> diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 13113c2b2..784e449a3 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -187,7 +187,7 @@ namespace MediaBrowser.Model.ApiClient /// Gets active client sessions. /// </summary> /// <returns>Task{SessionInfoDto[]}.</returns> - Task<SessionInfoDto[]> GetClientSessionsAsync(); + Task<SessionInfoDto[]> GetClientSessionsAsync(SessionQuery query); /// <summary> /// Gets the item counts async. diff --git a/MediaBrowser.Model/Dto/StreamOptions.cs b/MediaBrowser.Model/Dto/StreamOptions.cs index cee95639c..0cf59183d 100644 --- a/MediaBrowser.Model/Dto/StreamOptions.cs +++ b/MediaBrowser.Model/Dto/StreamOptions.cs @@ -89,6 +89,12 @@ /// </summary> /// <value><c>true</c> if [append baseline stream]; otherwise, <c>false</c>.</value> public bool AppendBaselineStream { get; set; } + + /// <summary> + /// Gets or sets the time stamp offset ms. Only used with HLS. + /// </summary> + /// <value>The time stamp offset ms.</value> + public int? TimeStampOffsetMs { get; set; } } /// <summary> diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 0822bfbc3..6d8d454d9 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -76,6 +76,7 @@ <Compile Include="Querying\ItemsByNameQuery.cs" /> <Compile Include="Entities\BaseItemInfo.cs" /> <Compile Include="Querying\NextUpQuery.cs" /> + <Compile Include="Querying\SessionQuery.cs" /> <Compile Include="Querying\SimilarItemsQuery.cs" /> <Compile Include="Querying\UserQuery.cs" /> <Compile Include="Session\BrowseRequest.cs" /> diff --git a/MediaBrowser.Model/Querying/SessionQuery.cs b/MediaBrowser.Model/Querying/SessionQuery.cs new file mode 100644 index 000000000..77bfef05f --- /dev/null +++ b/MediaBrowser.Model/Querying/SessionQuery.cs @@ -0,0 +1,19 @@ + +namespace MediaBrowser.Model.Querying +{ + /// <summary> + /// Class SessionQuery + /// </summary> + public class SessionQuery + { + /// <summary> + /// Filter by sessions that are allowed to be controlled by a given user + /// </summary> + public string ControllableByUserId { get; set; } + + /// <summary> + /// Filter by sessions that either do or do not support remote control. Default returns all sessions. + /// </summary> + public bool? SupportsRemoteControl { get; set; } + } +} |
