Zu den zahlreiche Möglichkeiten des Open Source Media Frameworks (OSMF) gehört auch das Abspielen von Subclips. Dies bedeutet, dass man nicht nur komplette Videos abspielen kann, sondern auch einzelne Abschnitte davon als Videoelement definieren kann.

Ein prädestinierter Fall hierfür ist ein Film, der in der Mitte von einer Werbeanzeige (mid-roll ad) unterbrochen wird. Hierzu definiert man drei Videoelemente: zuerst das erste Teilstück, danach den Werbefilm und zuletzt das zweite Teilstück.

Wichtig zu wissen: Subclips funktionieren aktuell nur mit Streamingservern, nicht mit Progressive Downloads. Dies liegt daran, dass man zurzeit nur mit Streaming Servern direkt an eine bestimmte Stelle im Video springen kann.

Code-Beispiel für OSMF-Subclips

Das Beispiel spielt folgende Videos ab: Zuerst eine Anzeige als Preroll-Video. Danach folgen die ersten 12 Sekunden eines Videostreams, der danach durch eine Mid-Roll-Ad unterbrochen wird. Anschließend folgt der Abschnitt von Sekunde 12 bis Sekunde 20 aus dem Videostream.

Actionscript:
  1. package {
  2.     import org.osmf.composition.SerialElement;
  3.     import org.osmf.display.MediaPlayerSprite;
  4.     import org.osmf.media.URLResource;
  5.     import org.osmf.metadata.KeyValueFacet;
  6.     import org.osmf.metadata.MetadataNamespaces;
  7.     import org.osmf.net.NetLoader;
  8.     import org.osmf.utils.FMSURL;
  9.     import org.osmf.utils.URL;
  10.     import org.osmf.video.VideoElement;
  11.  
  12.     import flash.display.Sprite;
  13.  
  14.     public class Main extends Sprite {
  15.         private const streamingUrl : String = "rtmp://cp67126.edgefcs.net/ondemand/mediapm/strobe/content/test/SpaceAloneHD_sounas_640_500_short";
  16.  
  17.         private var myPlayer : MediaPlayerSprite;
  18.         private var mySerialElement : SerialElement = new SerialElement();
  19.  
  20.         private var myNetLoader : NetLoader = new NetLoader();
  21.  
  22.         public function Main() {
  23.            
  24.             // preroll ad
  25.             mySerialElement.addChild(new VideoElement(myNetLoader, new URLResource(new URL("demo-ad.flv"))));
  26.                        
  27.             // first 12s of the video stream
  28.             addVideoStream(0,12);      
  29.            
  30.             // add break for ad
  31.             mySerialElement.addChild(new VideoElement(myNetLoader, new URLResource(new URL("demo-ad.flv"))));
  32.  
  33.             // from 12s to 20s of the videostream
  34.             addVideoStream(12,20);   
  35.  
  36.             // create player and add to stage
  37.             myPlayer = new MediaPlayerSprite();
  38.             myPlayer.mediaElement = mySerialElement;
  39.             addChild(myPlayer);
  40.         }
  41.  
  42.         private function addVideoStream(start : int, end : int) : void {
  43.             // setup video element
  44.             var resource : URLResource = new URLResource(new FMSURL(streamingUrl))
  45.             mySerialElement.addChild(new VideoElement(myNetLoader, resource));
  46.            
  47.             // create subclip
  48.             var keyFacet : KeyValueFacet = new KeyValueFacet(MetadataNamespaces.SUBCLIP_METADATA)
  49.             keyFacet.addValue(MetadataNamespaces.SUBCLIP_START_ID, start);
  50.             keyFacet.addValue(MetadataNamespaces.SUBCLIP_END_ID, end);       
  51.             resource.metadata.addFacet(keyFacet);            
  52.         }
  53.     }
  54. }

Link: Beispiel anschauen
Link: Subclip Spezifikationen
Link: Subclips in OSMF