/***************************************************** * * 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 { import flash.errors.IllegalOperationError; import flash.events.NetStatusEvent; import flash.net.NetConnection; import flash.net.NetStream; import flash.utils.Dictionary; import org.osmf.events.LoadEvent; import org.osmf.media.MediaResourceBase; import org.osmf.traits.LoadState; import org.osmf.traits.LoadTrait; import org.osmf.traits.LoaderBase; import org.osmf.traits.MediaTraitBase; import org.osmf.utils.OSMFStrings; [ExcludeClass] /** * @private */ public class NetStreamLoadTrait extends LoadTrait { public function NetStreamLoadTrait(loader:LoaderBase, resource:MediaResourceBase) { traits = new Dictionary(); super(loader, resource); isStreamingResource = NetStreamUtils.isStreamingResource(resource); } /** * The connected NetConnection, used for streaming audio and video. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get connection():NetConnection { return _connection; } public function set connection(value:NetConnection):void { _connection = value; } /** * The NetStream associated with the NetConnection, used * for streaming audio and video. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get netStream():NetStream { return _netStream; } public function set netStream(value:NetStream):void { _netStream = value; } /** * Manager class for switching between different MBR renditions using * a NetStream. Null if MBR switching is not enabled for the NetStream. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get switchManager():NetStreamSwitchManagerBase { return _switchManager; } public function set switchManager(value:NetStreamSwitchManagerBase):void { _switchManager = value; } /** * @private * * Stores the given trait on the object. Only one trait object * can be stored per trait type. The last set trait is returned * by getTrait. * * @param trait The trait object to store. * @throws IllegalOperationError if the specified trait is null. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function setTrait(trait:MediaTraitBase):void { if (trait == null) { throw new IllegalOperationError(OSMFStrings.getString(OSMFStrings.NULL_PARAM)); } traits[trait.traitType] = trait; } /** * @private * * Returns the stored trait object for the given trait type, if any. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function getTrait(traitType:String):MediaTraitBase { return traits[traitType]; } /** * The NetConnectionFactoryBase associated with the NetConnection. * If a NetConnectionFactory is used and the NetConnection is shared, * then the NetConnection should be closed by calling * closeNetConnectionByResource() on the NetConnectionFactory instance * rather than on the NetConnection itself. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion OSMF 1.0 */ public function get netConnectionFactory():NetConnectionFactoryBase { return _netConnectionFactory; } public function set netConnectionFactory(value:NetConnectionFactoryBase):void { _netConnectionFactory = value; } /** * @private **/ override protected function loadStateChangeStart(newState:String):void { if (newState == LoadState.READY) { if ( !isStreamingResource && ( netStream.bytesTotal <= 0 || netStream.bytesTotal == uint.MAX_VALUE ) ) { netStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); } } else if (newState == LoadState.UNINITIALIZED) { netStream = null; dispatchEvent(new LoadEvent(LoadEvent.BYTES_LOADED_CHANGE, false, false, null, bytesLoaded)); dispatchEvent(new LoadEvent(LoadEvent.BYTES_TOTAL_CHANGE, false, false, null, bytesTotal)); } } /** * @private */ override public function get bytesLoaded():Number { return isStreamingResource ? NaN : (netStream != null ? netStream.bytesLoaded : NaN); } /** * @private */ override public function get bytesTotal():Number { return isStreamingResource ? NaN : (netStream != null ? netStream.bytesTotal : NaN); } // Internals // private function onNetStatus(event:NetStatusEvent):void { if (netStream != null && netStream.bytesTotal > 0) { dispatchEvent ( new LoadEvent ( LoadEvent.BYTES_TOTAL_CHANGE , false , false , null , netStream.bytesTotal ) ); netStream.removeEventListener(NetStatusEvent.NET_STATUS, onNetStatus); } } private var _connection:NetConnection; private var _switchManager:NetStreamSwitchManagerBase; private var traits:Dictionary; private var _netConnectionFactory:NetConnectionFactoryBase; private var isStreamingResource:Boolean; private var _netStream:NetStream; } }