/***************************************************** * * Copyright 2009 Adobe Systems Incorporated. All Rights Reserved. * ***************************************************** * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * * The Initial Developer of the Original Code is Adobe Systems Incorporated. * Portions created by Adobe Systems Incorporated are Copyright (C) 2009 Adobe Systems * Incorporated. All Rights Reserved. * *****************************************************/ package org.osmf.net.httpstreaming.f4f { import __AS3__.vec.Vector; [ExcludeClass] /** * @private * * This is the bootstrap information data structure. */ public class AdobeBootstrapBox extends FullBox { /** * Constructor. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function AdobeBootstrapBox() { super(); } /** * Indicates the version number of the bootstrap information. When the * update field is set, this indicates the version number that is being * updated. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get bootstrapVersion():uint { return _bootstrapVersion; } public function set bootstrapVersion(value:uint):void { _bootstrapVersion = value; } /** * Indicates if it is the Named Access (0) or the Range Access (1) Profile. One bit reserved * for future profiles. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get profile():uint { return _profile; } public function set profile(value:uint):void { _profile = value; } /** * Indicates if the media presentation is live (1) or not. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get live():Boolean { return _live; } public function set live(value:Boolean):void { _live = value; } /** * Indicates if this table is an update (1) to a previously defined (sent) version of the * bootstrap box (or file). Updates are not complete replacement and MAY contain only the * changed elements and are sent only when there are changes to the bootstrap information. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get update():Boolean { return _update; } public function set update(value:Boolean):void { _update = value; } /** * The number of time units in one second which the currentMediaTime and smpteTimeCodeOffset * use to represent time. By default, 1000 is for milliseconds. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get timeScale():uint { return _timeScale; } public function set timeScale(value:uint):void { _timeScale = value; } /** * Indicates the timestamp of the latest available Fragment in the media presentation * represented in timescale units (default is milliseconds for the live scenario. * This is used by the client to request the right fragment number - it MAY be set to the total * duration or 0 for non-live cases. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get currentMediaTime():Number { return _currentMediaTime; } public function set currentMediaTime(value:Number):void { _currentMediaTime = value; } /** * The offset of the media time from the SMPTE time code converted to milliseconds. * This field could be set to zero when not used. The SMPTE time code modulo 24 hours is used to * make the offset positive. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get smpteTimeCodeOffset():Number { return _smpteTimeCodeOffset; } public function set smpteTimeCodeOffset(value:Number):void { _smpteTimeCodeOffset = value; } /** * The identifier of this presentation in the form of a NULL terminated string. * This could be a file or pathname in a URL. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get movieIdentifier():String { return _movieIdentifier; } public function set movieIdentifier(value:String):void { _movieIdentifier = value; } /** * The list of server base URLs. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get serverBaseURLs():Vector. { return _serverBaseURLs; } public function set serverBaseURLs(value:Vector.):void { _serverBaseURLs = value; } /** * The list of quality segment URL modifiers. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get qualitySegmentURLModifiers():Vector. { return _qualitySegmentURLModifiers; } public function set qualitySegmentURLModifiers(value:Vector.):void { _qualitySegmentURLModifiers = value; } /** * DRM metadata required for encrypted files to obtain the necessary keys/license * for decryption and playback.. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get drmData():String { return _drmData; } public function set drmData(value:String):void { _drmData = value; } /** * Metadata. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get metadata():String { return _metadata; } public function set metadata(value:String):void { _metadata = value; } /** * The list of segment run tables. Normally there should be only one. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get segmentRunTables():Vector. { return _segmentRunTables; } public function set segmentRunTables(value:Vector.):void { _segmentRunTables = value; } /** * The list of fragment run tables. Normally there should be only one. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get fragmentRunTables():Vector. { return _fragmentRunTables; } public function set fragmentRunTables(value:Vector.):void { _fragmentRunTables = value; if (value != null && value.length > 0) { var frt:AdobeFragmentRunTable = value[value.length - 1]; frt.adjustEndEntryDurationAccrued(_currentMediaTime); } } /** * Given a fragment number, returns the corresponding Id of the segment * that contains the fragment. * * @param fragmentId The Id of the fragment whose containing segment to be found. * * @return the Id of the segment that contains the segment. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function findSegmentId(fragmentId:uint):uint { return _segmentRunTables[0].findSegmentIdByFragmentId(fragmentId); } /** * The total number of fragments in the movie. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get totalFragments():uint { var afrt:AdobeFragmentRunTable = _fragmentRunTables[_fragmentRunTables.length - 1]; var fdps:Vector. = afrt.fragmentDurationPairs; var lastValidFdp:FragmentDurationPair = fdps[fdps.length - 1]; if (lastValidFdp.duration == 0) { lastValidFdp = fdps[fdps.length - 2]; } var deltaTime:Number = _currentMediaTime - lastValidFdp.durationAccrued; var fragCount:uint = (deltaTime <= 0)? 0: deltaTime / lastValidFdp.duration; return lastValidFdp.firstFragment + fragCount - 1; } /** * The total duration of the movie. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get totalDuration():uint { if (_fragmentRunTables == null || _fragmentRunTables.length < 1) { return 0; } var frt:AdobeFragmentRunTable = _fragmentRunTables[0]; return _currentMediaTime - (frt.fragmentDurationPairs)[0].durationAccrued; } public function contentComplete():Boolean { var frt:AdobeFragmentRunTable = _fragmentRunTables[_fragmentRunTables.length - 1]; return frt.tableComplete(); } // Internal // private var _bootstrapVersion:uint; private var _profile:uint; private var _live:Boolean; private var _update:Boolean; private var _timeScale:uint; private var _currentMediaTime:Number; private var _smpteTimeCodeOffset:Number; private var _movieIdentifier:String; private var _serverEntryCount:uint; private var _serverBaseURLs:Vector.; private var _qualitySegmentURLModifiers:Vector.; private var _drmData:String; private var _metadata:String; private var _segmentRunTables:Vector.; private var _fragmentRunTables:Vector.; } }