Показать сообщение отдельно
Старый 04.08.2012, 12:47
kyzi007 вне форума Посмотреть профиль Отправить личное сообщение для kyzi007 Найти все сообщения от kyzi007
  № 1  
Ответить с цитированием
kyzi007

Регистрация: Nov 2008
Сообщений: 78
По умолчанию mpeg video, проблема в хроме

Такие чудеса - во всех броузерах кроме хрома работает.
В хроме - возвращает 200 статус а потом 2032 ошибку...
Код AS3:
package ru.kyzi007.media
{
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.HTTPStatusEvent;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.URLRequest;
	import flash.net.URLRequestHeader;
	import flash.net.URLStream;
	import flash.utils.ByteArray;
 
	import ru.kyzi007.events.TrackEvent;
	import ru.kyzi007.log.Log;
 
	/**
	 * Created by IntelliJ IDEA kyzi007@rambler.ru
	 * Date: 04.07.12
	 * Time: 21:59
	 */
 
	public class VideoMpeg extends EventDispatcher
	{
		private var _loader : Loader = new Loader();
		private var _stream : URLStream = new URLStream();
		private var _buffer : ByteArray;
		private var _write : Boolean = false;
		private var _markerDetection : Boolean = false;
		private var _request : URLRequest;
		private var _isInit : Boolean;
 
		public function VideoMpeg ()
		{
		}
 
		public function close () : void
		{
			Log.log('VideoMpeg::close', Log.METHODS);
			_stream.close();
		}
 
		public function load (url : String, header : String) : void
		{
			_request = new URLRequest(url);
			if (header) _request.requestHeaders = new Array(new URLRequestHeader("Authorization", header));
			_stream.load(_request);
			_stream.addEventListener(ProgressEvent.PROGRESS, onProgress);
			_stream.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus)
			_stream.addEventListener(IOErrorEvent.IO_ERROR, ioError);
			_stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, sertError);
			Log.log('VideoMpeg::load '+ url, Log.METHODS);
		}
 
		private function sertError (event : SecurityErrorEvent) : void
		{
			Log.log('VideoMpeg::sertError',event, Log.CRIRICAL)
		}
 
		private function ioError (event : IOErrorEvent) : void
		{
			Log.log('VideoMpeg::ioError',event)
		}
 
		private function httpStatus (event : Event) : void
		{
			Log.log('VideoMpeg::httpStatus',event)
		}
 
		private function onProgress (event : ProgressEvent) : void
		{
			Log.log('onProgress' + _stream.bytesAvailable, Log.DATA);
 
			var byte : int;
			while (_stream.bytesAvailable > 0)
			{
				byte = _stream.readUnsignedByte();
				if (_write) _buffer.writeByte(byte);
				if (_markerDetection)
				{
					switch (byte)
					{
						case 0xD8:
							_write = true;
							_buffer = new ByteArray();
							_buffer.writeByte(0xFF);
							_buffer.writeByte(0xD8);
							break;
						case 0xD9:
							_write = false;
							_buffer.writeByte(0xD9);
							_loader.loadBytes(_buffer);
							break;
					}
				}
				_markerDetection = (byte == 0xFF);
			}
			if (_loader.width != 0 && _loader.height != 0 && !_isInit) {
				_isInit = true;
				dispatchEvent(new TrackEvent(TrackEvent.INIT));
			}
		}
 
		public function get video () : Loader
		{
			return _loader;
		}
 
		public function get video_width () : int {return  _loader.content ? _loader.content.width : 0;}
 
		public function get video_height () : int {return _loader.content ? _loader.content.height : 0;}
	}
}