2021-05-07 05:43:50 -07:00
|
|
|
#nullable disable
|
|
|
|
|
2020-01-22 13:00:07 -07:00
|
|
|
#pragma warning disable CS1591
|
|
|
|
|
2016-10-29 15:22:20 -07:00
|
|
|
using System.IO;
|
|
|
|
using System.Linq;
|
2019-01-13 12:16:19 -07:00
|
|
|
using MediaBrowser.Controller.Entities;
|
|
|
|
using MediaBrowser.Model.Dlna;
|
|
|
|
using MediaBrowser.Model.Session;
|
2016-10-29 15:22:20 -07:00
|
|
|
|
2016-10-29 15:34:54 -07:00
|
|
|
namespace Emby.Dlna.PlayTo
|
2016-10-29 15:22:20 -07:00
|
|
|
{
|
2020-12-02 07:38:52 -07:00
|
|
|
public static class PlaylistItemFactory
|
2016-10-29 15:22:20 -07:00
|
|
|
{
|
2020-12-02 07:38:52 -07:00
|
|
|
public static PlaylistItem Create(Photo item, DeviceProfile profile)
|
2016-10-29 15:22:20 -07:00
|
|
|
{
|
|
|
|
var playlistItem = new PlaylistItem
|
|
|
|
{
|
|
|
|
StreamInfo = new StreamInfo
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
ItemId = item.Id,
|
2016-10-29 15:22:20 -07:00
|
|
|
MediaType = DlnaProfileType.Photo,
|
|
|
|
DeviceProfile = profile
|
|
|
|
},
|
|
|
|
|
|
|
|
Profile = profile
|
|
|
|
};
|
|
|
|
|
|
|
|
var directPlay = profile.DirectPlayProfiles
|
|
|
|
.FirstOrDefault(i => i.Type == DlnaProfileType.Photo && IsSupported(i, item));
|
|
|
|
|
2022-12-05 07:01:13 -07:00
|
|
|
if (directPlay is not null)
|
2016-10-29 15:22:20 -07:00
|
|
|
{
|
|
|
|
playlistItem.StreamInfo.PlayMethod = PlayMethod.DirectStream;
|
|
|
|
playlistItem.StreamInfo.Container = Path.GetExtension(item.Path);
|
|
|
|
|
|
|
|
return playlistItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
var transcodingProfile = profile.TranscodingProfiles
|
|
|
|
.FirstOrDefault(i => i.Type == DlnaProfileType.Photo);
|
|
|
|
|
2022-12-05 07:01:13 -07:00
|
|
|
if (transcodingProfile is not null)
|
2016-10-29 15:22:20 -07:00
|
|
|
{
|
|
|
|
playlistItem.StreamInfo.PlayMethod = PlayMethod.Transcode;
|
|
|
|
playlistItem.StreamInfo.Container = "." + transcodingProfile.Container.TrimStart('.');
|
|
|
|
}
|
|
|
|
|
|
|
|
return playlistItem;
|
|
|
|
}
|
|
|
|
|
2019-01-06 13:50:43 -07:00
|
|
|
private static bool IsSupported(DirectPlayProfile profile, Photo item)
|
2016-10-29 15:22:20 -07:00
|
|
|
{
|
|
|
|
var mediaPath = item.Path;
|
|
|
|
|
|
|
|
if (profile.Container.Length > 0)
|
|
|
|
{
|
|
|
|
// Check container type
|
2017-07-14 08:57:44 -07:00
|
|
|
var mediaContainer = (Path.GetExtension(mediaPath) ?? string.Empty).TrimStart('.');
|
|
|
|
|
|
|
|
if (!profile.SupportsContainer(mediaContainer))
|
2016-10-29 15:22:20 -07:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|