 			return basicProcessFileSegment(input || new ByteArray(), true);
 		}
 				
+
+		public static var flvLowWater:uint = 0;
+
 		private function handleFLVMessage(timestamp:uint, message:ByteArray):void
 		{
+			if(isBestEffort == false)
+			{
+				// Alway pass through SPS/PPS...
+				var alwaysPass:Boolean = false
+				if(message[0] == 9)
+				{
+					if(message[11] == FLVTags.VIDEO_CODEC_AVC_KEYFRAME
+						&& message[12] == FLVTags.AVC_MODE_AVCC)
+					{
+						trace("Got AVCC, always pass");
+						alwaysPass = true;
+					}
+				}
+
+
+				if(timestamp < flvLowWater - 100 && !alwaysPass)
+				{
+					trace("SKIPPING TOO LOW FLV TS @ " + timestamp);
+					return;
+				}
+
+				// Don't update low water if it's an always pass.
+				if(!alwaysPass)
+					flvLowWater = timestamp;				
+			}
+
 			var timestampSeconds:Number = timestamp / 1000.0;
 
-			if(_segmentBeginSeconds < 0)
+			if(_segmentBeginSeconds > timestampSeconds)
 			{
 				_segmentBeginSeconds = timestampSeconds;
 				trace("Noting segment start time for " + segmentUri + " of " + timestampSeconds);

		
		public override function beginProcessFile(seek:Boolean, seekTime:Number):void
		{
			if( key && !key.isLoading && !key.isLoaded)
				throw new Error("Tried to process segment with key not set to load or loaded.");


			_timeOrigin = 0;
			_timeOriginNeeded = true;
			
			_segmentBeginSeconds = Number.MAX_VALUE;
			_segmentLastSeconds = -1;
			
			_firstSeekTime = 0;
