 				return NaN;
 
 			return segments[segments.length-1].startTime + segments[segments.length-1].duration;
+		}
+
+		public function getStreamStartTime():Number
+		{
+			if(!manifest)
+				return NaN;
+
+			var activeManifest:HLSManifestParser = getManifestForQuality(lastQuality);
+			var segments:Vector.<HLSManifestSegment> = activeManifest.segments;
+			if(segments.length == 0)
+				return NaN;
+
+			return segments[0].startTime;
 		}
 		
 		// getSegmentIndexForTime()

			dvrInfo.startTime = firstSegment.startTime;
			dvrInfo.beginOffset = firstSegment.startTime;
			dvrInfo.endOffset = lastSegment.startTime + lastSegment.duration;
			dvrInfo.curLength = dvrInfo.endOffset - dvrInfo.beginOffset;
			dvrInfo.windowDuration = dvrInfo.curLength; // TODO: verify that this is what we want to be putting here
			dispatchEvent(new DVRStreamInfoEvent(DVRStreamInfoEvent.DVRSTREAMINFO, false, false, dvrInfo));
		}

			dispatchEvent(new HTTPStreamingEvent(HTTPStreamingEvent.SCRIPT_DATA, false, false, 0, tag, FLVTagScriptDataMode.IMMEDIATE));
		}

		public function getStreamDuration():Number
		{
			var accum:Number = NaN;
			
			if(!manifest)
				return accum;
			
			// Fetch active data.
			var activeManifest:HLSManifestParser = getManifestForQuality(lastQuality);
			var segments:Vector.<HLSManifestSegment> = activeManifest.segments;
			
			if(segments.length > 0)
			{
				var i:int = segments.length - 1;
				if(i >= 0)
					accum = (segments[i].startTime + segments[i].duration) - segments[0].startTime;
			}

			return accum;			
		}

		public function getStreamEndTime():Number
		{
			if(!manifest)
