From 867076de61025ff3d918954deea8b3d0356d3ad3 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Tue, 12 Mar 2013 22:56:13 -0400 Subject: [PATCH] add mp4 output support to the api --- .../Progressive/ProgressiveStreamWriter.cs | 2 +- .../Playback/Progressive/VideoService.cs | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs b/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs index efab3bbc69..1d725e6731 100644 --- a/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs +++ b/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs @@ -81,7 +81,7 @@ namespace MediaBrowser.Api.Playback.Progressive var bytesRead = fsPosition - position; - //Logger.LogInfo("Streamed {0} bytes from file {1}", bytesRead, path); + Logger.Info("Streamed {0} bytes from file {1}", bytesRead, path); if (bytesRead == 0) { diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index 10455c0288..cc1c5b1fc5 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.IO; +using System.IO; +using MediaBrowser.Common.IO; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using System; @@ -75,17 +76,25 @@ namespace MediaBrowser.Api.Playback.Progressive } var format = string.Empty; + var keyFrame = string.Empty; - if (string.Equals("wmv2", videoCodec, StringComparison.OrdinalIgnoreCase)) + if (string.Equals(Path.GetExtension(outputPath), ".mp4", StringComparison.OrdinalIgnoreCase)) { - format = " -f asf "; + format = " -f mp4 -movflags frag_keyframe+empty_moov"; + var framerate = state.VideoRequest.Framerate ?? + state.VideoStream.AverageFrameRate ?? state.VideoStream.RealFrameRate ?? 23.976; + + framerate *= 2; + + keyFrame = " -g " + Math.Round(framerate); } - return string.Format("{0} {1} -i {2}{3} -threads 0 {4} {5}{6} {7}{8} \"{9}\"", + return string.Format("{0} {1} -i {2}{3}{4} -threads 0 {5} {6}{7} {8}{9} \"{10}\"", probeSize, GetFastSeekCommandLineParameter(state.Request), GetInputArgument(video, state.IsoMount), GetSlowSeekCommandLineParameter(state.Request), + keyFrame, GetMapArgs(state), GetVideoArguments(state, videoCodec), graphicalSubtitleParam, @@ -131,6 +140,7 @@ namespace MediaBrowser.Api.Playback.Progressive } else if (IsH264(state.VideoStream)) { + // FFmpeg will fail to convert and give h264 bitstream malformated error if it isn't used when converting mp4 to transport stream. args += " -bsf h264_mp4toannexb"; }