mirror of https://github.com/jellyfin/jellyfin.git
update opening of live streams
This commit is contained in:
parent
6eec35ecbd
commit
15947c2a4c
|
@ -30,7 +30,7 @@ namespace Emby.Server.Implementations.Channels
|
||||||
return Task.FromResult<IEnumerable<MediaSourceInfo>>(new List<MediaSourceInfo>());
|
return Task.FromResult<IEnumerable<MediaSourceInfo>>(new List<MediaSourceInfo>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> OpenMediaSource(string openToken, CancellationToken cancellationToken)
|
public Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> OpenMediaSource(string openToken, bool allowLiveStreamProbe, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ using MediaBrowser.Model.Tasks;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Data
|
namespace Emby.Server.Implementations.Data
|
||||||
{
|
{
|
||||||
public class CleanDatabaseScheduledTask : IScheduledTask
|
public class CleanDatabaseScheduledTask : ILibraryPostScanTask
|
||||||
{
|
{
|
||||||
private readonly ILibraryManager _libraryManager;
|
private readonly ILibraryManager _libraryManager;
|
||||||
private readonly IItemRepository _itemRepo;
|
private readonly IItemRepository _itemRepo;
|
||||||
|
@ -49,7 +49,7 @@ namespace Emby.Server.Implementations.Data
|
||||||
get { return "Library"; }
|
get { return "Library"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
|
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
// Ensure these objects are lazy loaded.
|
// Ensure these objects are lazy loaded.
|
||||||
// Without this there is a deadlock that will need to be investigated
|
// Without this there is a deadlock that will need to be investigated
|
||||||
|
|
|
@ -371,7 +371,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
var tuple = GetProvider(request.OpenToken);
|
var tuple = GetProvider(request.OpenToken);
|
||||||
var provider = tuple.Item1;
|
var provider = tuple.Item1;
|
||||||
|
|
||||||
var mediaSourceTuple = await provider.OpenMediaSource(tuple.Item2, cancellationToken).ConfigureAwait(false);
|
var mediaSourceTuple = await provider.OpenMediaSource(tuple.Item2, request.AllowMediaProbe, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
var mediaSource = mediaSourceTuple.Item1;
|
var mediaSource = mediaSourceTuple.Item1;
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> OpenMediaSource(string openToken, CancellationToken cancellationToken)
|
public async Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> OpenMediaSource(string openToken, bool allowLiveStreamProbe, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
MediaSourceInfo stream = null;
|
MediaSourceInfo stream = null;
|
||||||
const bool isAudio = false;
|
const bool isAudio = false;
|
||||||
|
@ -140,7 +140,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!stream.SupportsProbing || stream.MediaStreams.Any(i => i.Index != -1))
|
if (!allowLiveStreamProbe || !stream.SupportsProbing || stream.MediaStreams.Any(i => i.Index != -1))
|
||||||
{
|
{
|
||||||
AddMediaInfo(stream, isAudio, cancellationToken);
|
AddMediaInfo(stream, isAudio, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,7 +134,7 @@ namespace MediaBrowser.Api.Playback
|
||||||
|
|
||||||
SetDeviceSpecificData(item, result.MediaSource, profile, authInfo, request.MaxStreamingBitrate,
|
SetDeviceSpecificData(item, result.MediaSource, profile, authInfo, request.MaxStreamingBitrate,
|
||||||
request.StartTimeTicks ?? 0, result.MediaSource.Id, request.AudioStreamIndex,
|
request.StartTimeTicks ?? 0, result.MediaSource.Id, request.AudioStreamIndex,
|
||||||
request.SubtitleStreamIndex, request.MaxAudioChannels, request.PlaySessionId, request.UserId, request.EnableDirectPlay, request.ForceDirectPlayRemoteMediaSource, request.EnableDirectStream, true, true, true);
|
request.SubtitleStreamIndex, request.MaxAudioChannels, request.PlaySessionId, request.UserId, request.EnableDirectPlay, true, request.EnableDirectStream, true, true, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -176,7 +176,7 @@ namespace MediaBrowser.Api.Playback
|
||||||
{
|
{
|
||||||
var mediaSourceId = request.MediaSourceId;
|
var mediaSourceId = request.MediaSourceId;
|
||||||
|
|
||||||
SetDeviceSpecificData(request.Id, info, profile, authInfo, request.MaxStreamingBitrate ?? profile.MaxStreamingBitrate, request.StartTimeTicks ?? 0, mediaSourceId, request.AudioStreamIndex, request.SubtitleStreamIndex, request.MaxAudioChannels, request.UserId, request.EnableDirectPlay, request.ForceDirectPlayRemoteMediaSource, request.EnableDirectStream, request.EnableTranscoding, request.AllowVideoStreamCopy, request.AllowAudioStreamCopy);
|
SetDeviceSpecificData(request.Id, info, profile, authInfo, request.MaxStreamingBitrate ?? profile.MaxStreamingBitrate, request.StartTimeTicks ?? 0, mediaSourceId, request.AudioStreamIndex, request.SubtitleStreamIndex, request.MaxAudioChannels, request.UserId, request.EnableDirectPlay, true, request.EnableDirectStream, request.EnableTranscoding, request.AllowVideoStreamCopy, request.AllowAudioStreamCopy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.AutoOpenLiveStream)
|
if (request.AutoOpenLiveStream)
|
||||||
|
@ -191,7 +191,6 @@ namespace MediaBrowser.Api.Playback
|
||||||
DeviceProfile = request.DeviceProfile,
|
DeviceProfile = request.DeviceProfile,
|
||||||
EnableDirectPlay = request.EnableDirectPlay,
|
EnableDirectPlay = request.EnableDirectPlay,
|
||||||
EnableDirectStream = request.EnableDirectStream,
|
EnableDirectStream = request.EnableDirectStream,
|
||||||
ForceDirectPlayRemoteMediaSource = request.ForceDirectPlayRemoteMediaSource,
|
|
||||||
ItemId = request.Id,
|
ItemId = request.Id,
|
||||||
MaxAudioChannels = request.MaxAudioChannels,
|
MaxAudioChannels = request.MaxAudioChannels,
|
||||||
MaxStreamingBitrate = request.MaxStreamingBitrate,
|
MaxStreamingBitrate = request.MaxStreamingBitrate,
|
||||||
|
@ -199,7 +198,8 @@ namespace MediaBrowser.Api.Playback
|
||||||
StartTimeTicks = request.StartTimeTicks,
|
StartTimeTicks = request.StartTimeTicks,
|
||||||
SubtitleStreamIndex = request.SubtitleStreamIndex,
|
SubtitleStreamIndex = request.SubtitleStreamIndex,
|
||||||
UserId = request.UserId,
|
UserId = request.UserId,
|
||||||
OpenToken = mediaSource.OpenToken
|
OpenToken = mediaSource.OpenToken,
|
||||||
|
AllowMediaProbe = request.AllowMediaProbe
|
||||||
|
|
||||||
}).ConfigureAwait(false);
|
}).ConfigureAwait(false);
|
||||||
|
|
||||||
|
|
|
@ -20,10 +20,7 @@ namespace MediaBrowser.Controller.Library
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the media source.
|
/// Opens the media source.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="openToken">The open token.</param>
|
Task<Tuple<MediaSourceInfo,IDirectStreamProvider>> OpenMediaSource(string openToken, bool allowLiveStreamProbe, CancellationToken cancellationToken);
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
|
||||||
/// <returns>Task<MediaSourceInfo>.</returns>
|
|
||||||
Task<Tuple<MediaSourceInfo,IDirectStreamProvider>> OpenMediaSource(string openToken, CancellationToken cancellationToken);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Closes the media source.
|
/// Closes the media source.
|
||||||
|
|
|
@ -17,13 +17,13 @@ namespace MediaBrowser.Model.MediaInfo
|
||||||
|
|
||||||
public bool EnableDirectPlay { get; set; }
|
public bool EnableDirectPlay { get; set; }
|
||||||
public bool EnableDirectStream { get; set; }
|
public bool EnableDirectStream { get; set; }
|
||||||
public bool ForceDirectPlayRemoteMediaSource { get; set; }
|
public bool AllowMediaProbe { get; set; }
|
||||||
|
|
||||||
public LiveStreamRequest()
|
public LiveStreamRequest()
|
||||||
{
|
{
|
||||||
ForceDirectPlayRemoteMediaSource = true;
|
|
||||||
EnableDirectPlay = true;
|
EnableDirectPlay = true;
|
||||||
EnableDirectStream = true;
|
EnableDirectStream = true;
|
||||||
|
AllowMediaProbe = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveStreamRequest(AudioOptions options)
|
public LiveStreamRequest(AudioOptions options)
|
||||||
|
|
|
@ -27,19 +27,19 @@ namespace MediaBrowser.Model.MediaInfo
|
||||||
public bool EnableDirectPlay { get; set; }
|
public bool EnableDirectPlay { get; set; }
|
||||||
public bool EnableDirectStream { get; set; }
|
public bool EnableDirectStream { get; set; }
|
||||||
public bool EnableTranscoding { get; set; }
|
public bool EnableTranscoding { get; set; }
|
||||||
public bool ForceDirectPlayRemoteMediaSource { get; set; }
|
|
||||||
public bool AllowVideoStreamCopy { get; set; }
|
public bool AllowVideoStreamCopy { get; set; }
|
||||||
public bool AllowAudioStreamCopy { get; set; }
|
public bool AllowAudioStreamCopy { get; set; }
|
||||||
public bool AutoOpenLiveStream { get; set; }
|
public bool AutoOpenLiveStream { get; set; }
|
||||||
|
public bool AllowMediaProbe { get; set; }
|
||||||
|
|
||||||
public PlaybackInfoRequest()
|
public PlaybackInfoRequest()
|
||||||
{
|
{
|
||||||
ForceDirectPlayRemoteMediaSource = true;
|
|
||||||
EnableDirectPlay = true;
|
EnableDirectPlay = true;
|
||||||
EnableDirectStream = true;
|
EnableDirectStream = true;
|
||||||
EnableTranscoding = true;
|
EnableTranscoding = true;
|
||||||
AllowVideoStreamCopy = true;
|
AllowVideoStreamCopy = true;
|
||||||
AllowAudioStreamCopy = true;
|
AllowAudioStreamCopy = true;
|
||||||
|
AllowMediaProbe = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common</id>
|
<id>MediaBrowser.Common</id>
|
||||||
<version>3.0.704</version>
|
<version>3.0.705</version>
|
||||||
<title>Emby.Common</title>
|
<title>Emby.Common</title>
|
||||||
<authors>Emby Team</authors>
|
<authors>Emby Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Server.Core</id>
|
<id>MediaBrowser.Server.Core</id>
|
||||||
<version>3.0.704</version>
|
<version>3.0.705</version>
|
||||||
<title>Emby.Server.Core</title>
|
<title>Emby.Server.Core</title>
|
||||||
<authors>Emby Team</authors>
|
<authors>Emby Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains core components required to build plugins for Emby Server.</description>
|
<description>Contains core components required to build plugins for Emby Server.</description>
|
||||||
<copyright>Copyright © Emby 2013</copyright>
|
<copyright>Copyright © Emby 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.704" />
|
<dependency id="MediaBrowser.Common" version="3.0.705" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|
Loading…
Reference in New Issue