/*****************************************************
*  
*  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 __AS3__.vec.Vector;
	
	import flash.utils.ByteArray;
	
	import org.osmf.media.URLResource;
	
	/**
	 * StreamingURLResource is a URLResource which is capable of being
	 * streamed.  It exposes some additional properties which are specific
	 * to streaming media.
	 * 
	 * <p>Note that it is possible for live and recorded streams to have
	 * identical URLs.  In such a case, the streamType property should be
	 * used to disambiguate live and recorded streams.</p>
	 * 
	 * @includeExample StreamingURLResourceExample.as -noswf
	 *  
	 *  @langversion 3.0
	 *  @playerversion Flash 10
	 *  @playerversion AIR 1.5
	 *  @productversion OSMF 1.0
	 */
	public class StreamingURLResource extends URLResource
	{
		/**
		 * Constructor.
		 * 
		 * @param url The URL of the resource. For details about how to format this
		 * URL for flv, mp4, and other file formats, see the Adobe® Flash® Media Server
		 * documentation link below.
		 * @see http://www.adobe.com/go/learn_OSMF_fms_url_format_en
		 * @param streamType The type of the stream. If null, defaults to
		 * StreamType.RECORDED.
		 * @param subclipStartTime Optional start time of the streaming
		 * resource.  When specified, the stream will be presented as a
		 * subclip, with playback beginning at the specified start time.
		 * @param subclipEndTime Optional end time of the streaming resource.
		 * When specified, the stream will be presented as a subclip, with
		 * playback ending at the specified end time.
		 * @param connectionArguments Optional set of arguments that will be
		 * supplied to NetConnection.connect when establishing a connection
		 * to the source of the stream.
		 * @param urlIncludesFMSApplicationInstance Indicates, for RTMP streaming
		 * URLs, whether the URL includes the FMS application instance or not.  If
		 * true, then the second part of the URL path is considered the instance
		 * name, such as <code>rtmp://host/app/foo/bar/stream</code>. In this case
		 * the instance name would be 'foo' and the stream would be 'bar/stream'.
		 * If false, then the second part of the URL path is considered to be the
		 * stream name, such as <code>rtmp://host/app/foo/bar/stream</code>. In this
		 * case there is no instance name and the stream would be 'foo/bar/stream'.
		 * The default is false.
		 * @param drmContentData Content metadata for DRM-encrypted content.
		 *  
		 *  @langversion 3.0
		 *  @playerversion Flash 10
		 *  @playerversion AIR 1.5
		 *  @productversion OSMF 1.0
		 */
		public function StreamingURLResource
							( url:String
							, streamType:String = null
							, clipStartTime:Number = NaN
							, clipEndTime:Number = NaN
							, connectionArguments:Vector.<Object> = null
							, urlIncludesFMSApplicationInstance:Boolean = false
							, drmContentData:ByteArray = null
							)
		{
			_streamType = streamType || StreamType.RECORDED;
			_clipStartTime = clipStartTime;
			_clipEndTime = clipEndTime;
			_urlIncludesFMSApplicationInstance = urlIncludesFMSApplicationInstance;
			_drmContentData = drmContentData;
			
			_connectionArguments = connectionArguments;
			
			
			super(url);
		}

		/**
         * <p>The StreamType for this resource. The default value is <code>StreamType.RECORDED</code>.
		 * The StreamType class enumerates the valid stream types.</p>
		 * <p/>
         * <p>This property may return the following string values:</p> 
		 * <table class="innertable" width="640">
		 *   <tr>
		 *     <th>String value</th>
		 *     <th>Description</th>
		 *   </tr>
		 *   <tr>
		 * 	<td><code>StreamType.LIVE_OR_RECORDED</code></td>
		 * 	<td>The StreamingURLResource represents either a live or a recorded stream.</td>
		 *   </tr>
		 *   <tr>
		 * 	<td><code>StreamType.LIVE</code></td>
		 * 	<td>The StreamingURLResource represents a live stream.</td>
		 *   </tr>
		 *   <tr>
		 * 	<td><code>StreamType.RECORDED</code></td>
		 * 	<td>The StreamingURLResource represents a recorded stream.</td>
		 *   </tr>
		 *   <tr>
		 * 	<td><code>StreamType.DVR</code></td>
		 * 	<td>The StreamingURLResource represents a DVR stream.</td>
		 *   </tr>
		 * </table>
		 * 
		 * @see StreamType
		 *  
		 *  @langversion 3.0
		 *  @playerversion Flash 10
		 *  @playerversion AIR 1.5
		 *  @productversion OSMF 1.0
		 */
		public function get streamType():String
		{
			return _streamType;
		}
		
		public function set streamType(value:String):void
		{
			_streamType = value;
		}
		
		/**
		 * Optional start time of the streaming resource.  When specified,
		 * the stream will be presented as a subclip, with playback beginning
		 * at the specified start time.  Note that clipStartTime is not
		 * currently supported for progressive videos.  The default is NaN,
		 * which is to start at the beginning.
		 **/ 
		public function get clipStartTime():Number
		{
			return _clipStartTime;
		}

		public function set clipStartTime(value:Number):void
		{
			_clipStartTime = value;
		}

		/**
		 * Optional end time of the streaming resource.  When specified,
		 * the stream will be presented as a subclip, with playback ending
		 * at the specified end time.  Note that clipEndTime is not
		 * currently supported for progressive videos.  The default is NaN,
		 * which is to play to the end.
		 **/ 
		public function get clipEndTime():Number
		{
			return _clipEndTime;
		}

		public function set clipEndTime(value:Number):void
		{
			_clipEndTime = value;
		}
		
		/**
		 * Optional set of arguments that will be supplied when making a
		 * connection to the source of the stream.
		 **/
		public function get connectionArguments():Vector.<Object>
		{
			return _connectionArguments;
		}

		public function set connectionArguments(value:Vector.<Object>):void
		{
			_connectionArguments = value;
		}
		
		/**
		 * Content metadata for DRM-encrypted content.
		 **/ 
		public function get drmContentData():ByteArray
		{
			return _drmContentData;
		}

		public function set drmContentData(value:ByteArray):void
		{
			_drmContentData = value;
		}

		/**
		 * Indicates, for RTMP streaming URLs, whether the URL includes the FMS
		 * application instance or not.  If true, then the second part of the URL
		 * path is considered the instance name, such as <code>rtmp://host/app/foo/bar/stream</code>.
		 * In this case the instance name would be 'foo' and the stream would be 'bar/stream'.
		 * If false, then the second part of the URL path is considered to be the
		 * stream name, such as <code>rtmp://host/app/foo/bar/stream</code>. In this
		 * case there is no instance name and the stream would be 'foo/bar/stream'.
		 * The default is false.
		 **/
		public function get urlIncludesFMSApplicationInstance():Boolean
		{
			return _urlIncludesFMSApplicationInstance;
		}
		
		public function set urlIncludesFMSApplicationInstance(value:Boolean):void
		{
			_urlIncludesFMSApplicationInstance = value;
		}
		
		private var _streamType:String; // StreamType
		private var _clipStartTime:Number;
		private var _clipEndTime:Number;
		private var _connectionArguments:Vector.<Object>;
		private var _drmContentData:ByteArray;
		private var _urlIncludesFMSApplicationInstance:Boolean = false;
	}
}
