From: Fonceur <fo...@us...> - 2012-07-08 16:00:46
|
Update of /cvsroot/sageplugins/MediaStreaming/src/sagex/streaming/httpls/segment In directory vz-cvs-3.sog:/tmp/cvs-serv28333/src/sagex/streaming/httpls/segment Modified Files: SegmenterProcess.java Log Message: Try to use the original video's frame rate. Adjust bit rates based on initial quality. Index: SegmenterProcess.java =================================================================== RCS file: /cvsroot/sageplugins/MediaStreaming/src/sagex/streaming/httpls/segment/SegmenterProcess.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** SegmenterProcess.java 7 Jul 2012 18:59:33 -0000 1.6 --- SegmenterProcess.java 8 Jul 2012 16:00:40 -0000 1.7 *************** *** 22,25 **** --- 22,26 ---- import sagex.api.MediaFileAPI; import sagex.streaming.httpls.playlist.SegmentPlaylist; + import sagex.streaming.httpls.playlist.VariantPlaylist; import sagex.streaming.io.SegmentInputStream; import sagex.streaming.io.StreamGobbler; *************** *** 27,30 **** --- 28,35 ---- public class SegmenterProcess implements UncaughtExceptionHandler { + public static int deviceHeight = -1; + public static int deviceWidth = -1; + public static String deviceNetwork = "unknown"; + /** * The ffmepg executable used for transcoding audio and video. *************** *** 369,375 **** private ProcessBuilder getTranscodeProcessBuilder(File inputFile, String userAgent, String quality, double startTime) { ! // Object mediaFile = MediaFileAPI.GetMediaFileForFilePath(inputFile); ! // String aspect = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.Aspect"); ! // String framerate = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.FPS"); // Integer numAudioStreams = Integer.parseInt(MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Audio.NumStreams")); // --- 374,386 ---- private ProcessBuilder getTranscodeProcessBuilder(File inputFile, String userAgent, String quality, double startTime) { ! try{ ! Object mediaFile = MediaFileAPI.GetMediaFileForFilePath(inputFile); ! String height = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.Height"); ! String width = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.Width"); ! ! Log.info("Dimension: " + height + " X " + width); ! } catch (Exception ex){ ! Log.warn("Exception: " + ex.getMessage()); ! } // Integer numAudioStreams = Integer.parseInt(MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Audio.NumStreams")); // *************** *** 391,419 **** userAgent.matches("Apple Mac OS X .* CoreMedia .*") || // Mac desktop Safari video element userAgent.matches("QuickTime.*") || // Windows desktop Safari video element ! userAgent.matches(".*AppleWebKit.* Version.* Safari.*")) // Desktop Safari browser ! { ! // 16:9 ! //String[] s1 = {"960x720", "1792k", "1940k", "29.97", "48k", "44100", "90"}; ! String[] s2 = {"960x720", "1176k", "1340k", "29.97", "64k", "44100", "90"}; ! String[] s3 = {"480x320", "776k", "940k", "29.97", "64k", "44100", "90"}; ! //String[] s4 = {"480x320", "576k", "740k", "29.97", "64k", "44100", "90"}; ! String[] s5 = {"480x320", "376k", "540k", "29.97", "64k", "44100", "60"}; ! String[] s6 = {"480x320", "176k", "340k", "15.0", "64k", "44100", "45"}; ! String[] s7 = {"480x320", "86k", "250k", "10.0", "64k", "44100", "30"}; ! //String[] s8 = {"480x320", "", "", "", "40k", "44100", ""}; // Audio only stream... ! ! qualityMap = new HashMap<String, String[]>(); ! //qualityMap.put("1840", s1); ! qualityMap.put("1240", s2); ! qualityMap.put("840", s3); ! //qualityMap.put("640", s4); ! qualityMap.put("440", s5); ! qualityMap.put("240", s6); ! qualityMap.put("150", s7); ! //qualityMap.put("0", s8); } else { // No longer denies the others // 16:9 ! //String[] s1 = {"640x360", "1792k", "1940k", "29.97", "48k", "44100", "90"}; String[] s2 = {"640x360", "1176k", "1340k", "29.97", "64k", "44100", "90"}; String[] s3 = {"480x272", "776k", "940k", "29.97", "64k", "44100", "90"}; --- 402,445 ---- userAgent.matches("Apple Mac OS X .* CoreMedia .*") || // Mac desktop Safari video element userAgent.matches("QuickTime.*") || // Windows desktop Safari video element ! userAgent.matches(".*AppleWebKit.* Version.* Safari.*")) { // Desktop Safari browser ! // 16:9 ! String[] s1 = {"960x720", "1776k", "1940k", "29.97", "64k", "44100", "90"}; ! String[] s2 = {"960x720", "1176k", "1340k", "29.97", "64k", "44100", "90"}; ! String[] s3 = {"480x320", "776k", "940k", "29.97", "64k", "44100", "90"}; ! //String[] s4 = {"480x320", "576k", "740k", "29.97", "64k", "44100", "90"}; ! String[] s5 = {"480x320", "376k", "540k", "29.97", "64k", "44100", "60"}; ! String[] s6 = {"480x320", "176k", "340k", "15.0", "64k", "44100", "45"}; ! String[] s7 = {"480x320", "86k", "250k", "10.0", "64k", "44100", "30"}; ! //String[] s8 = {"480x320", "", "", "", "40k", "44100", ""}; // Audio only stream... ! ! qualityMap = new HashMap<String, String[]>(); ! for (String bitrate : VariantPlaylist.variantPlaylistBitrates()){ ! switch (Integer.parseInt(bitrate)){ ! case 150: ! qualityMap.put("150", s7); ! break; ! case 240: ! qualityMap.put("240", s6); ! break; ! case 440: ! qualityMap.put("440", s5); ! break; ! case 840: ! qualityMap.put("840", s3); ! break; ! case 1240: ! qualityMap.put("1240", s2); ! break; ! case 1840: ! qualityMap.put("1840", s1); ! break; ! } ! } ! //qualityMap.put("640", s4); ! //qualityMap.put("0", s8); } else { // No longer denies the others // 16:9 ! String[] s1 = {"640x360", "1776k", "1940k", "29.97", "64k", "44100", "90"}; String[] s2 = {"640x360", "1176k", "1340k", "29.97", "64k", "44100", "90"}; String[] s3 = {"480x272", "776k", "940k", "29.97", "64k", "44100", "90"}; *************** *** 425,436 **** qualityMap = new HashMap<String, String[]>(); ! //qualityMap.put("1840", s1); ! qualityMap.put("1240", s2); ! qualityMap.put("840", s3); ! //qualityMap.put("640", s4); ! qualityMap.put("440", s5); ! qualityMap.put("240", s6); ! qualityMap.put("150", s7); ! //qualityMap.put("0", s8); } String[] currentQuality = qualityMap.get(quality); --- 451,478 ---- qualityMap = new HashMap<String, String[]>(); ! for (String bitrate : VariantPlaylist.variantPlaylistBitrates()){ ! switch (Integer.parseInt(bitrate)){ ! case 150: ! qualityMap.put("150", s7); ! break; ! case 240: ! qualityMap.put("240", s6); ! break; ! case 440: ! qualityMap.put("440", s5); ! break; ! case 840: ! qualityMap.put("840", s3); ! break; ! case 1240: ! qualityMap.put("1240", s2); ! break; ! case 1840: ! qualityMap.put("1840", s1); ! break; ! } ! } ! //qualityMap.put("640", s4); ! //qualityMap.put("0", s8); } String[] currentQuality = qualityMap.get(quality); *************** *** 461,466 **** Object mediaFile = MediaFileAPI.GetMediaFileForFilePath(inputFile); String aspect = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.Aspect"); ! if ((aspect == null) || (aspect.trim().length() == 0)) { aspect = null; --- 503,509 ---- Object mediaFile = MediaFileAPI.GetMediaFileForFilePath(inputFile); + String framerate = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.FPS"); String aspect = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.Aspect"); ! if (aspect == null || aspect.isEmpty()) { aspect = null; *************** *** 468,473 **** String videoHeight = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.Height"); ! if ((videoWidth != null) && (videoWidth.trim().length() != 0) && ! (videoHeight != null) && (videoHeight.trim().length() != 0)) { try --- 511,515 ---- String videoHeight = MediaFileAPI.GetMediaFileMetadata(mediaFile, "Format.Video.Height"); ! if (videoWidth != null && !videoWidth.isEmpty() && videoHeight != null && !videoHeight.isEmpty()) { try *************** *** 541,546 **** params.add("-qmax"); params.add("48"); params.add("-qmin"); params.add("2"); ! params.add("-r"); params.add(currentQuality[3]); // Could further adapt to 24/25/50 Hz ! //params.add("29.97"); // 25 // "-acodec", "libmp3lame", params.add("-vol"); params.add("512"); // params.add("1024"); --- 583,593 ---- params.add("-qmax"); params.add("48"); params.add("-qmin"); params.add("2"); ! params.add("-r"); ! if (framerate != null && !framerate.isEmpty()){ ! float rate = Float.parseFloat(framerate); ! if (rate < 40) params.add(framerate); ! else params.add(String.valueOf(rate/2.0f)); ! } ! else params.add(currentQuality[3]); //params.add("29.97"); // 25 // "-acodec", "libmp3lame", params.add("-vol"); params.add("512"); // params.add("1024"); |