@ -26,7 +26,8 @@ namespace MediaBrowser.Api.Playback.Progressive
protected readonly IImageProcessor ImageProcessor ;
protected readonly IHttpClient HttpClient ;
protected BaseProgressiveStreamingService ( IServerConfigurationManager serverConfig , IUserManager userManager , ILibraryManager libraryManager , IIsoManager isoManager , IMediaEncoder mediaEncoder , IDtoService dtoService , IFileSystem fileSystem , IItemRepository itemRepository , ILiveTvManager liveTvManager , IEncodingManager encodingManager , IDlnaManager dlnaManager , IHttpClient httpClient , IImageProcessor imageProcessor ) : base ( serverConfig , userManager , libraryManager , isoManager , mediaEncoder , dtoService , fileSystem , itemRepository , liveTvManager , encodingManager , dlnaManager )
protected BaseProgressiveStreamingService ( IServerConfigurationManager serverConfig , IUserManager userManager , ILibraryManager libraryManager , IIsoManager isoManager , IMediaEncoder mediaEncoder , IDtoService dtoService , IFileSystem fileSystem , IItemRepository itemRepository , ILiveTvManager liveTvManager , IEncodingManager encodingManager , IDlnaManager dlnaManager , IHttpClient httpClient , IImageProcessor imageProcessor )
: base ( serverConfig , userManager , libraryManager , isoManager , mediaEncoder , dtoService , fileSystem , itemRepository , liveTvManager , encodingManager , dlnaManager )
{
HttpClient = httpClient ;
ImageProcessor = imageProcessor ;
@ -216,18 +217,30 @@ namespace MediaBrowser.Api.Playback.Progressive
var contentType = state . GetMimeType ( outputPath ) ;
var contentLength = state . EstimateContentLength ? GetEstimatedContentLength ( state ) : null ;
if ( contentLength . HasValue )
{
responseHeaders [ "Content-Length" ] = contentLength . Value . ToString ( UsCulture ) ;
}
// Headers only
if ( isHeadRequest )
{
var streamResult = ResultFactory . GetResult ( new byte [ ] { } , contentType , responseHeaders ) ;
var hasOptions = streamResult as IHasOptions ;
if ( hasOptions ! = null )
if ( ! contentLength . HasValue )
{
if ( hasOptions . Options . ContainsKey ( "Content-Length" ) )
var hasOptions = streamResult as IHasOptions ;
if ( hasOptions ! = null )
{
hasOptions . Options . Remove ( "Content-Length" ) ;
if ( hasOptions . Options . ContainsKey ( "Content-Length" ) )
{
hasOptions . Options . Remove ( "Content-Length" ) ;
}
}
}
return streamResult ;
}
@ -252,5 +265,26 @@ namespace MediaBrowser.Api.Playback.Progressive
return result ;
}
private long? GetEstimatedContentLength ( StreamState state )
{
var totalBitrate = 0 ;
if ( state . Request . AudioBitRate . HasValue )
{
totalBitrate + = state . Request . AudioBitRate . Value ;
}
if ( state . VideoRequest ! = null & & state . VideoRequest . VideoBitRate . HasValue )
{
totalBitrate + = state . VideoRequest . VideoBitRate . Value ;
}
if ( totalBitrate > 0 & & state . RunTimeTicks . HasValue )
{
return Convert . ToInt64 ( totalBitrate * TimeSpan . FromTicks ( state . RunTimeTicks . Value ) . TotalSeconds ) ;
}
return null ;
}
}
}