fix mp4 sync encoding
This commit is contained in:
parent
d7a979979b
commit
d8cbd64917
|
@ -38,6 +38,7 @@ namespace MediaBrowser.Controller.Channels
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
public bool ReadAtNativeFramerate { get; set; }
|
public bool ReadAtNativeFramerate { get; set; }
|
||||||
|
public bool SupportsDirectPlay { get; set; }
|
||||||
|
|
||||||
public ChannelMediaInfo()
|
public ChannelMediaInfo()
|
||||||
{
|
{
|
||||||
|
@ -45,6 +46,7 @@ namespace MediaBrowser.Controller.Channels
|
||||||
|
|
||||||
// This is most common
|
// This is most common
|
||||||
Protocol = MediaProtocol.Http;
|
Protocol = MediaProtocol.Http;
|
||||||
|
SupportsDirectPlay = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MediaSourceInfo ToMediaSource()
|
public MediaSourceInfo ToMediaSource()
|
||||||
|
@ -63,7 +65,8 @@ namespace MediaBrowser.Controller.Channels
|
||||||
Name = id,
|
Name = id,
|
||||||
Id = id,
|
Id = id,
|
||||||
ReadAtNativeFramerate = ReadAtNativeFramerate,
|
ReadAtNativeFramerate = ReadAtNativeFramerate,
|
||||||
SupportsDirectStream = Protocol == MediaProtocol.File || Protocol == MediaProtocol.Http
|
SupportsDirectStream = Protocol == MediaProtocol.File || Protocol == MediaProtocol.Http,
|
||||||
|
SupportsDirectPlay = SupportsDirectPlay
|
||||||
};
|
};
|
||||||
|
|
||||||
var bitrate = (AudioBitrate ?? 0) + (VideoBitrate ?? 0);
|
var bitrate = (AudioBitrate ?? 0) + (VideoBitrate ?? 0);
|
||||||
|
|
|
@ -73,10 +73,13 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
args;
|
args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state.Options.Context == EncodingContext.Streaming)
|
||||||
|
{
|
||||||
var keyFrameArg = string.Format(" -force_key_frames expr:gte(t,n_forced*{0})",
|
var keyFrameArg = string.Format(" -force_key_frames expr:gte(t,n_forced*{0})",
|
||||||
5.ToString(UsCulture));
|
5.ToString(UsCulture));
|
||||||
|
|
||||||
args += keyFrameArg;
|
args += keyFrameArg;
|
||||||
|
}
|
||||||
|
|
||||||
var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream;
|
var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using MediaBrowser.Model.Extensions;
|
using MediaBrowser.Model.Extensions;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.ApiClient
|
namespace MediaBrowser.Model.ApiClient
|
||||||
{
|
{
|
||||||
|
@ -24,7 +23,12 @@ namespace MediaBrowser.Model.ApiClient
|
||||||
throw new ArgumentNullException("server");
|
throw new ArgumentNullException("server");
|
||||||
}
|
}
|
||||||
|
|
||||||
var list = Servers.ToList();
|
// Clone the existing list of servers
|
||||||
|
var list = new List<ServerInfo>();
|
||||||
|
foreach (ServerInfo serverInfo in Servers)
|
||||||
|
{
|
||||||
|
list.Add(serverInfo);
|
||||||
|
}
|
||||||
|
|
||||||
var index = FindIndex(list, server.Id);
|
var index = FindIndex(list, server.Id);
|
||||||
|
|
||||||
|
@ -32,8 +36,11 @@ namespace MediaBrowser.Model.ApiClient
|
||||||
{
|
{
|
||||||
var existing = list[index];
|
var existing = list[index];
|
||||||
|
|
||||||
// Merge the data
|
// Take the most recent DateLastAccessed
|
||||||
existing.DateLastAccessed = new[] { existing.DateLastAccessed, server.DateLastAccessed }.Max();
|
if (server.DateLastAccessed > existing.DateLastAccessed)
|
||||||
|
{
|
||||||
|
existing.DateLastAccessed = server.DateLastAccessed;
|
||||||
|
}
|
||||||
|
|
||||||
existing.UserLinkType = server.UserLinkType;
|
existing.UserLinkType = server.UserLinkType;
|
||||||
|
|
||||||
|
@ -64,7 +71,11 @@ namespace MediaBrowser.Model.ApiClient
|
||||||
}
|
}
|
||||||
if (server.WakeOnLanInfos != null && server.WakeOnLanInfos.Count > 0)
|
if (server.WakeOnLanInfos != null && server.WakeOnLanInfos.Count > 0)
|
||||||
{
|
{
|
||||||
existing.WakeOnLanInfos = server.WakeOnLanInfos.ToList();
|
existing.WakeOnLanInfos = new List<WakeOnLanInfo>();
|
||||||
|
foreach (WakeOnLanInfo info in server.WakeOnLanInfos)
|
||||||
|
{
|
||||||
|
existing.WakeOnLanInfos.Add(info);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (server.LastConnectionMode.HasValue)
|
if (server.LastConnectionMode.HasValue)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,6 @@ using MediaBrowser.Model.Extensions;
|
||||||
using MediaBrowser.Model.System;
|
using MediaBrowser.Model.System;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.ApiClient
|
namespace MediaBrowser.Model.ApiClient
|
||||||
{
|
{
|
||||||
|
@ -83,7 +82,12 @@ namespace MediaBrowser.Model.ApiClient
|
||||||
throw new ArgumentNullException("user");
|
throw new ArgumentNullException("user");
|
||||||
}
|
}
|
||||||
|
|
||||||
var list = Users.ToList();
|
// Clone the existing list of users
|
||||||
|
var list = new List<ServerUserInfo>();
|
||||||
|
foreach (ServerUserInfo serverUserInfo in Users)
|
||||||
|
{
|
||||||
|
list.Add(serverUserInfo);
|
||||||
|
}
|
||||||
|
|
||||||
var index = FindIndex(list, user.Id);
|
var index = FindIndex(list, user.Id);
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace MediaBrowser.Model.Dlna
|
||||||
case PlayMethod.DirectPlay:
|
case PlayMethod.DirectPlay:
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
return 2;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}).ThenBy(i =>
|
}).ThenBy(i =>
|
||||||
|
|
|
@ -333,10 +333,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
MediaSourceInfo info;
|
MediaSourceInfo info;
|
||||||
|
var isVideo = true;
|
||||||
|
|
||||||
if (isChannel)
|
if (isChannel)
|
||||||
{
|
{
|
||||||
var channel = GetInternalChannel(id);
|
var channel = GetInternalChannel(id);
|
||||||
|
isVideo = channel.ChannelType == ChannelType.TV;
|
||||||
var service = GetService(channel);
|
var service = GetService(channel);
|
||||||
_logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ExternalId);
|
_logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ExternalId);
|
||||||
info = await service.GetChannelStream(channel.ExternalId, null, cancellationToken).ConfigureAwait(false);
|
info = await service.GetChannelStream(channel.ExternalId, null, cancellationToken).ConfigureAwait(false);
|
||||||
|
@ -344,6 +346,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var recording = await GetInternalRecording(id, cancellationToken).ConfigureAwait(false);
|
var recording = await GetInternalRecording(id, cancellationToken).ConfigureAwait(false);
|
||||||
|
isVideo = !string.Equals(recording.MediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase);
|
||||||
var service = GetService(recording);
|
var service = GetService(recording);
|
||||||
|
|
||||||
_logger.Info("Opening recording stream from {0}, external recording Id: {1}", service.Name, recording.RecordingInfo.Id);
|
_logger.Info("Opening recording stream from {0}, external recording Id: {1}", service.Name, recording.RecordingInfo.Id);
|
||||||
|
@ -351,7 +354,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.Info("Live stream info: {0}", _jsonSerializer.SerializeToString(info));
|
_logger.Info("Live stream info: {0}", _jsonSerializer.SerializeToString(info));
|
||||||
Sanitize(info);
|
Normalize(info, isVideo);
|
||||||
|
|
||||||
var data = new LiveStreamData
|
var data = new LiveStreamData
|
||||||
{
|
{
|
||||||
|
@ -377,9 +380,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Sanitize(MediaSourceInfo mediaSource)
|
private void Normalize(MediaSourceInfo mediaSource, bool isVideo)
|
||||||
{
|
{
|
||||||
if (mediaSource.MediaStreams.Count == 0)
|
if (mediaSource.MediaStreams.Count == 0)
|
||||||
|
{
|
||||||
|
if (isVideo)
|
||||||
{
|
{
|
||||||
mediaSource.MediaStreams.AddRange(new List<MediaStream>
|
mediaSource.MediaStreams.AddRange(new List<MediaStream>
|
||||||
{
|
{
|
||||||
|
@ -397,6 +402,19 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mediaSource.MediaStreams.AddRange(new List<MediaStream>
|
||||||
|
{
|
||||||
|
new MediaStream
|
||||||
|
{
|
||||||
|
Type = MediaStreamType.Audio,
|
||||||
|
// Set the index to -1 because we don't know the exact index of the audio stream within the container
|
||||||
|
Index = -1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Clean some bad data coming from providers
|
// Clean some bad data coming from providers
|
||||||
foreach (var stream in mediaSource.MediaStreams)
|
foreach (var stream in mediaSource.MediaStreams)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System.IO;
|
using MediaBrowser.Common.IO;
|
||||||
using MediaBrowser.Common.IO;
|
|
||||||
using MediaBrowser.Common.Progress;
|
using MediaBrowser.Common.Progress;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Sync;
|
using MediaBrowser.Controller.Sync;
|
||||||
|
@ -10,6 +9,7 @@ using MediaBrowser.Model.MediaInfo;
|
||||||
using MediaBrowser.Model.Sync;
|
using MediaBrowser.Model.Sync;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
@ -140,9 +140,6 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||||
var libraryItem = jobItem.Item;
|
var libraryItem = jobItem.Item;
|
||||||
var internalSyncJobItem = _syncManager.GetJobItem(jobItem.SyncJobItemId);
|
var internalSyncJobItem = _syncManager.GetJobItem(jobItem.SyncJobItemId);
|
||||||
|
|
||||||
var fileTransferProgress = new ActionableProgress<double>();
|
|
||||||
fileTransferProgress.RegisterAction(pct => progress.Report(pct * .92));
|
|
||||||
|
|
||||||
var localItem = CreateLocalItem(provider, jobItem, target, libraryItem, serverId, jobItem.OriginalFileName);
|
var localItem = CreateLocalItem(provider, jobItem, target, libraryItem, serverId, jobItem.OriginalFileName);
|
||||||
|
|
||||||
await _syncManager.ReportSyncJobItemTransferBeginning(internalSyncJobItem.Id);
|
await _syncManager.ReportSyncJobItemTransferBeginning(internalSyncJobItem.Id);
|
||||||
|
@ -152,6 +149,9 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var fileTransferProgress = new ActionableProgress<double>();
|
||||||
|
fileTransferProgress.RegisterAction(pct => progress.Report(pct * .92));
|
||||||
|
|
||||||
var sendFileResult = await SendFile(provider, internalSyncJobItem.OutputPath, localItem.LocalPath, target, fileTransferProgress, cancellationToken).ConfigureAwait(false);
|
var sendFileResult = await SendFile(provider, internalSyncJobItem.OutputPath, localItem.LocalPath, target, fileTransferProgress, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
if (localItem.Item.MediaSources != null)
|
if (localItem.Item.MediaSources != null)
|
||||||
|
@ -342,7 +342,10 @@ namespace MediaBrowser.Server.Implementations.Sync
|
||||||
|
|
||||||
private string GetSyncJobFolderName(SyncedItem syncedItem, IServerSyncProvider provider)
|
private string GetSyncJobFolderName(SyncedItem syncedItem, IServerSyncProvider provider)
|
||||||
{
|
{
|
||||||
var name = syncedItem.SyncJobName + syncedItem.SyncJobDateCreated.ToLocalTime().ToString("g");
|
var name = syncedItem.SyncJobName + "-" + syncedItem.SyncJobDateCreated
|
||||||
|
.ToLocalTime()
|
||||||
|
.ToString("g")
|
||||||
|
.Replace(" ", "-");
|
||||||
|
|
||||||
name = GetValidFilename(provider, name);
|
name = GetValidFilename(provider, name);
|
||||||
|
|
||||||
|
|
|
@ -139,7 +139,6 @@ namespace MediaBrowser.Server.Mono.Native
|
||||||
}
|
}
|
||||||
else if (string.Equals(sysName, "BSD", StringComparison.OrdinalIgnoreCase))
|
else if (string.Equals(sysName, "BSD", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
// TODO: How to detect BSD?
|
|
||||||
info.OperatingSystem = Startup.Common.OperatingSystem.Bsd;
|
info.OperatingSystem = Startup.Common.OperatingSystem.Bsd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.Internal</id>
|
<id>MediaBrowser.Common.Internal</id>
|
||||||
<version>3.0.599</version>
|
<version>3.0.600</version>
|
||||||
<title>MediaBrowser.Common.Internal</title>
|
<title>MediaBrowser.Common.Internal</title>
|
||||||
<authors>Luke</authors>
|
<authors>Luke</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
|
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.599" />
|
<dependency id="MediaBrowser.Common" version="3.0.600" />
|
||||||
<dependency id="NLog" version="3.2.0.0" />
|
<dependency id="NLog" version="3.2.0.0" />
|
||||||
<dependency id="SimpleInjector" version="2.7.0" />
|
<dependency id="SimpleInjector" version="2.7.0" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
|
@ -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.599</version>
|
<version>3.0.600</version>
|
||||||
<title>MediaBrowser.Common</title>
|
<title>MediaBrowser.Common</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -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.Model.Signed</id>
|
<id>MediaBrowser.Model.Signed</id>
|
||||||
<version>3.0.599</version>
|
<version>3.0.600</version>
|
||||||
<title>MediaBrowser.Model - Signed Edition</title>
|
<title>MediaBrowser.Model - Signed Edition</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser 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.599</version>
|
<version>3.0.600</version>
|
||||||
<title>Media Browser.Server.Core</title>
|
<title>Media Browser.Server.Core</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser 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 Media Browser Server.</description>
|
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.599" />
|
<dependency id="MediaBrowser.Common" version="3.0.600" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyVersion("3.0.*")]
|
//[assembly: AssemblyVersion("3.0.*")]
|
||||||
//[assembly: AssemblyVersion("3.0.5557.20000")]
|
[assembly: AssemblyVersion("3.0.5557.30000")]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user