| 
      
      
      From: jreichen <jre...@us...> - 2011-04-09 00:26:11
      
     | 
| Update of /cvsroot/sageplugins/MediaStreaming/src/sagex/streaming/httpls/playlist
In directory vz-cvs-3.sog:/tmp/cvs-serv11567/src/sagex/streaming/httpls/playlist
Modified Files:
	VariantPlaylist.java 
Log Message:
- Refactor HTTP Live Streaming Playlist Code
- Put absolute URLs in HTTP Live Streaming Playlists
Index: VariantPlaylist.java
===================================================================
RCS file: /cvsroot/sageplugins/MediaStreaming/src/sagex/streaming/httpls/playlist/VariantPlaylist.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** VariantPlaylist.java	15 Jan 2011 21:09:47 -0000	1.1
--- VariantPlaylist.java	9 Apr 2011 00:26:09 -0000	1.2
***************
*** 3,6 ****
--- 3,8 ----
  import java.util.UUID;
  
+ import javax.servlet.http.HttpServletRequest;
+ 
  import org.mortbay.log.Log;
  
***************
*** 8,44 ****
  {
      public static String[] VARIANT_PLAYLIST_BITRATES = {"150", "1240", "840", "640", "440", "240"};
  
      private int mediaFileId;
      private String playlist;
  
!     public VariantPlaylist(int mediaFileId)
      {
          this.mediaFileId = mediaFileId;
          this.playlist = createPlaylist();
      }
  
      private String createPlaylist()
      {
          StringBuilder sb = new StringBuilder();
      
-         String url = null;
          String conversionId = UUID.randomUUID().toString();
  
          // Header
!         sb.append("#EXTM3U\r\n");
          Log.debug("#EXTM3U");
  
          // Body
          for (String bitrate : VARIANT_PLAYLIST_BITRATES)
          {
!             sb.append("#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=" + bitrate + "000\r\n");
!             Log.debug("#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=" + bitrate + "000");
!     
!             url = "/stream/HTTPLiveStreamingPlaylist?" +
!                   "MediaFileId=" + mediaFileId +
!                   "&ConversionId=" + conversionId +
!                   "&Quality=" + bitrate;
!             sb.append(url + "\r\n");
!             Log.debug(url);
          }
  
--- 10,70 ----
  {
      public static String[] VARIANT_PLAYLIST_BITRATES = {"150", "1240", "840", "640", "440", "240"};
+     private static final String LINE_TERM = "\r\n";
  
+     private HttpServletRequest req;
      private int mediaFileId;
+     private String defaultBitrate;
      private String playlist;
  
!     public VariantPlaylist(HttpServletRequest req, int mediaFileId, String defaultBitrate)
      {
+         if ((defaultBitrate != null) &&
+             (defaultBitrate.trim().length() > 0) &&
+             !isValidBitrate(defaultBitrate))
+         {
+             throw new IllegalArgumentException("Bitrate");
+         }
+         
+         this.req = req;
          this.mediaFileId = mediaFileId;
+         this.defaultBitrate = defaultBitrate;
          this.playlist = createPlaylist();
      }
  
+     private boolean isValidBitrate(String defaultBitrate)
+     {
+         for (String bitrate : VARIANT_PLAYLIST_BITRATES)
+         {
+             if (bitrate.equals(defaultBitrate))
+             {
+                 return true;
+             }
+         }
+         return false;
+     }
+ 
      private String createPlaylist()
      {
          StringBuilder sb = new StringBuilder();
      
          String conversionId = UUID.randomUUID().toString();
  
          // Header
!         sb.append("#EXTM3U" + LINE_TERM);
          Log.debug("#EXTM3U");
  
          // Body
+         if ((defaultBitrate != null) &&
+             (defaultBitrate.trim().length() > 0))
+         {
+             sb.append(createPlaylistEntry(conversionId, defaultBitrate));
+         }
+ 
          for (String bitrate : VARIANT_PLAYLIST_BITRATES)
          {
!             if (!bitrate.equals(defaultBitrate))
!             {
!                 sb.append(createPlaylistEntry(conversionId, bitrate));
!             }
          }
  
***************
*** 46,49 ****
--- 72,92 ----
      }
  
+     private String createPlaylistEntry(String conversionId, String bitrate)
+     {
+         String header = "#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=" + bitrate + "000";
+         Log.debug(header);
+ 
+         String url = req.getRequestURL().toString().replace(req.getRequestURI(), "") +
+                      req.getContextPath() +
+                      "/HTTPLiveStreamingPlaylist" +
+ //                     req.getPathInfo() +
+                      "?MediaFileId=" + mediaFileId +
+                      "&ConversionId=" + conversionId +
+                      "&Quality=" + bitrate;
+         Log.debug(url);
+ 
+         return header + LINE_TERM + url + LINE_TERM;
+     }
+     
      public String toString()
      {
 |