aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-06-20 01:31:32 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-06-20 01:31:32 -0400
commitdaec8895b6c1dc26445c83fd7253625b503881ae (patch)
treea420909ae2ca89cfb1a89f03eeb317b3e527de49
parentc2d8cb47319cc441375f8db4a8a9077f8fb25e08 (diff)
dlna remote control fixes
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs6
-rw-r--r--MediaBrowser.Dlna/Didl/DidlBuilder.cs58
-rw-r--r--MediaBrowser.Dlna/PlayTo/PlayToController.cs12
3 files changed, 41 insertions, 35 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 0ecc5d9d1..f8e6b2e77 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -1591,6 +1591,12 @@ namespace MediaBrowser.Api.Playback
return false;
}
+ // Can't stream copy if we're burning in subtitles
+ if (request.SubtitleStreamIndex.HasValue)
+ {
+ return false;
+ }
+
// Source and target codecs must match
if (!string.Equals(request.VideoCodec, videoStream.Codec, StringComparison.OrdinalIgnoreCase))
{
diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
index e05b6f708..a8f7c2e7e 100644
--- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs
+++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs
@@ -37,7 +37,7 @@ namespace MediaBrowser.Dlna.Didl
_user = user;
}
- public string GetItemDidl(BaseItem item, string deviceId, Filter filter)
+ public string GetItemDidl(BaseItem item, string deviceId, Filter filter, StreamInfo streamInfo)
{
var result = new XmlDocument();
@@ -54,12 +54,12 @@ namespace MediaBrowser.Dlna.Didl
result.AppendChild(didl);
- result.DocumentElement.AppendChild(GetItemElement(result, item, deviceId, filter));
+ result.DocumentElement.AppendChild(GetItemElement(result, item, deviceId, filter, streamInfo));
return result.DocumentElement.OuterXml;
}
- public XmlElement GetItemElement(XmlDocument doc, BaseItem item, string deviceId, Filter filter)
+ public XmlElement GetItemElement(XmlDocument doc, BaseItem item, string deviceId, Filter filter, StreamInfo streamInfo = null)
{
var element = doc.CreateElement(string.Empty, "item", NS_DIDL);
element.SetAttribute("restricted", "1");
@@ -80,13 +80,13 @@ namespace MediaBrowser.Dlna.Didl
var audio = item as Audio;
if (audio != null)
{
- AddAudioResource(element, audio, deviceId, filter);
+ AddAudioResource(element, audio, deviceId, filter, streamInfo);
}
var video = item as Video;
if (video != null)
{
- AddVideoResource(element, video, deviceId, filter);
+ AddVideoResource(element, video, deviceId, filter, streamInfo);
}
AddCover(item, element);
@@ -94,26 +94,29 @@ namespace MediaBrowser.Dlna.Didl
return element;
}
- private void AddVideoResource(XmlElement container, Video video, string deviceId, Filter filter)
+ private void AddVideoResource(XmlElement container, Video video, string deviceId, Filter filter, StreamInfo streamInfo = null)
{
var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL);
- var sources = _user == null ? video.GetMediaSources(true).ToList() : video.GetMediaSources(true, _user).ToList();
-
- var streamInfo = new StreamBuilder().BuildVideoItem(new VideoOptions
+ if (streamInfo == null)
{
- ItemId = video.Id.ToString("N"),
- MediaSources = sources,
- Profile = _profile,
- DeviceId = deviceId,
- MaxBitrate = _profile.MaxBitrate
- });
+ var sources = _user == null ? video.GetMediaSources(true).ToList() : video.GetMediaSources(true, _user).ToList();
+
+ streamInfo = new StreamBuilder().BuildVideoItem(new VideoOptions
+ {
+ ItemId = video.Id.ToString("N"),
+ MediaSources = sources,
+ Profile = _profile,
+ DeviceId = deviceId,
+ MaxBitrate = _profile.MaxBitrate
+ });
+ }
var url = streamInfo.ToDlnaUrl(_serverAddress);
res.InnerText = url;
- var mediaSource = sources.First(i => string.Equals(i.Id, streamInfo.MediaSourceId));
+ var mediaSource = streamInfo.MediaSource;
if (mediaSource.RunTimeTicks.HasValue)
{
@@ -211,25 +214,28 @@ namespace MediaBrowser.Dlna.Didl
container.AppendChild(res);
}
- private void AddAudioResource(XmlElement container, Audio audio, string deviceId, Filter filter)
+ private void AddAudioResource(XmlElement container, Audio audio, string deviceId, Filter filter, StreamInfo streamInfo = null)
{
var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL);
- var sources = _user == null ? audio.GetMediaSources(true).ToList() : audio.GetMediaSources(true, _user).ToList();
-
- var streamInfo = new StreamBuilder().BuildAudioItem(new AudioOptions
+ if (streamInfo == null)
{
- ItemId = audio.Id.ToString("N"),
- MediaSources = sources,
- Profile = _profile,
- DeviceId = deviceId
- });
+ var sources = _user == null ? audio.GetMediaSources(true).ToList() : audio.GetMediaSources(true, _user).ToList();
+
+ streamInfo = new StreamBuilder().BuildAudioItem(new AudioOptions
+ {
+ ItemId = audio.Id.ToString("N"),
+ MediaSources = sources,
+ Profile = _profile,
+ DeviceId = deviceId
+ });
+ }
var url = streamInfo.ToDlnaUrl(_serverAddress);
res.InnerText = url;
- var mediaSource = sources.First(i => string.Equals(i.Id, streamInfo.MediaSourceId));
+ var mediaSource = streamInfo.MediaSource;
if (mediaSource.RunTimeTicks.HasValue)
{
diff --git a/MediaBrowser.Dlna/PlayTo/PlayToController.cs b/MediaBrowser.Dlna/PlayTo/PlayToController.cs
index fd8b9060e..f1a92408b 100644
--- a/MediaBrowser.Dlna/PlayTo/PlayToController.cs
+++ b/MediaBrowser.Dlna/PlayTo/PlayToController.cs
@@ -81,7 +81,7 @@ namespace MediaBrowser.Dlna.PlayTo
private async void updateTimer_Elapsed(object state)
{
- if (DateTime.UtcNow >= _device.DateLastActivity.AddSeconds(60))
+ if (DateTime.UtcNow >= _device.DateLastActivity.AddSeconds(120))
{
try
{
@@ -148,7 +148,7 @@ namespace MediaBrowser.Dlna.PlayTo
_logger.ErrorException("Error reporting progress", ex);
}
- await SetNext().ConfigureAwait(false);
+ //await SetNext().ConfigureAwait(false);
}
async void _device_PlaybackStart(object sender, PlaybackStartEventArgs e)
@@ -305,8 +305,6 @@ namespace MediaBrowser.Dlna.PlayTo
var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null;
var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, info.AudioStreamIndex, info.SubtitleStreamIndex);
- await _device.SetStop();
-
await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false);
if (newItem.StreamInfo.IsDirectStream)
@@ -413,7 +411,7 @@ namespace MediaBrowser.Dlna.PlayTo
playlistItem.StreamUrl = playlistItem.StreamInfo.ToUrl(serverAddress);
- var itemXml = new DidlBuilder(profile, user, _imageProcessor, serverAddress).GetItemDidl(item, _session.DeviceId, new Filter());
+ var itemXml = new DidlBuilder(profile, user, _imageProcessor, serverAddress).GetItemDidl(item, _session.DeviceId, new Filter(), playlistItem.StreamInfo);
playlistItem.Didl = itemXml;
@@ -710,8 +708,6 @@ namespace MediaBrowser.Dlna.PlayTo
var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null;
var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, newIndex, info.SubtitleStreamIndex);
- await _device.SetStop();
-
await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false);
if (newItem.StreamInfo.IsDirectStream)
@@ -737,8 +733,6 @@ namespace MediaBrowser.Dlna.PlayTo
var user = _session.UserId.HasValue ? _userManager.GetUserById(_session.UserId.Value) : null;
var newItem = CreatePlaylistItem(info.Item, user, newPosition, GetServerAddress(), info.MediaSourceId, info.AudioStreamIndex, newIndex);
- await _device.SetStop();
-
await _device.SetAvTransport(newItem.StreamUrl, GetDlnaHeaders(newItem), newItem.Didl).ConfigureAwait(false);
if (newItem.StreamInfo.IsDirectStream)