|
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");
|