@ -1,11 +1,13 @@
using DvdLib.Ifo ;
using MediaBrowser.Common.Configuration ;
using MediaBrowser.Common.IO ;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.Library ;
using MediaBrowser.Controller.Localization ;
using MediaBrowser.Controller.MediaEncoding ;
using MediaBrowser.Controller.Persistence ;
using MediaBrowser.Controller.Providers ;
using MediaBrowser.Model.Dlna ;
using MediaBrowser.Model.Entities ;
using MediaBrowser.Model.IO ;
using MediaBrowser.Model.Logging ;
@ -33,6 +35,7 @@ namespace MediaBrowser.Providers.MediaInfo
private readonly IApplicationPaths _appPaths ;
private readonly IJsonSerializer _json ;
private readonly IEncodingManager _encodingManager ;
private readonly IFileSystem _fileSystem ;
private readonly CultureInfo _usCulture = new CultureInfo ( "en-US" ) ;
@ -215,6 +218,8 @@ namespace MediaBrowser.Providers.MediaInfo
video . HasSubtitles = mediaStreams . Any ( i = > i . Type = = MediaStreamType . Subtitle ) ;
ExtractTimestamp ( video ) ;
await _encodingManager . RefreshChapterImages ( new ChapterImageRefreshOptions
{
Chapters = chapters ,
@ -568,6 +573,53 @@ namespace MediaBrowser.Providers.MediaInfo
}
}
private void ExtractTimestamp ( Video video )
{
if ( video . VideoType = = VideoType . VideoFile )
{
if ( string . Equals ( video . Container , "mpeg2ts" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( video . Container , "m2ts" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( video . Container , "ts" , StringComparison . OrdinalIgnoreCase ) )
{
try
{
video . Timestamp = GetMpegTimestamp ( video . Path ) ;
}
catch ( Exception ex )
{
_logger . ErrorException ( "Error extracting timestamp info from {0}" , ex , video . Path ) ;
}
}
}
}
private TransportStreamTimestamp GetMpegTimestamp ( string path )
{
var packetBuffer = new byte [ 'Å' ] ;
using ( var fs = _fileSystem . GetFileStream ( path , FileMode . Open , FileAccess . Read , FileShare . Read ) )
{
fs . Read ( packetBuffer , 0 , packetBuffer . Length ) ;
}
if ( packetBuffer [ 0 ] = = 71 )
{
return TransportStreamTimestamp . NONE ;
}
if ( ( packetBuffer [ 4 ] = = 71 ) & & ( packetBuffer [ 'Ä' ] = = 71 ) )
{
if ( ( packetBuffer [ 0 ] = = 0 ) & & ( packetBuffer [ 1 ] = = 0 ) & & ( packetBuffer [ 2 ] = = 0 ) & & ( packetBuffer [ 3 ] = = 0 ) )
{
return TransportStreamTimestamp . ZERO ;
}
return TransportStreamTimestamp . VALID ;
}
return TransportStreamTimestamp . NONE ;
}
private void FetchFromDvdLib ( Video item , IIsoMount mount )
{
var path = mount = = null ? item . Path : mount . MountedPath ;