![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2008
Сообщений: 78
|
Такие чудеса - во всех броузерах кроме хрома работает.
В хроме - возвращает 200 статус а потом 2032 ошибку... 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;} } } |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
Видео, урл - для теста какое?
|
|
|||||
|
Регистрация: Nov 2008
Сообщений: 78
|
|
|
|||||
|
Modus ponens
|
А что такое ошибка 2032? Это что-то связанное с настройками безопасности?
Это загружаются картинки так из motion JPEG? Там же по-идее в файле должна быть записана длина, чтобы по одному байту не считывать.Я формат наизусть не знаю, но в любом случае искал бы более гуманный способ загрузки.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 78
|
Там с камер по другому транслировать не могут.
2032 - поток не найден. IO Error. В консоли хромовской видно что доступ дал сбой (отменено!). Последний раз редактировалось kyzi007; 04.08.2012 в 15:48. |
|
|||||
|
Modus ponens
|
Не, я имел в виду более гуманный способ - это найти то место где в файле указано размер картинки (длину в байтах) и byteArray.copyBytes() вместо того, чтобы по одному байту копировать, так, ну как минимум будет быстрее. Даже если такого в самом формате нет (в чем я сильно сомневаюсь), то прочитать по байту, а потом все за один раз скопировать - все равно лучше, т.как память под новый массив будет выделятся всего один раз вместо того, чтобы все время нарасчивать.
А ошибка возникает во врема чтения, или еще до того? Возможно, ради эксперимента есть смысл подождать немного и потом начать считывать? Ну и в конце концов, а кто выдает эту ошибку, URLStream или Loader? Может байты не правильно прочитаны и Loader не видит весь файл / там появляются какие-то артифакты?
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 78
|
Там консоль броузера говорит что "отменено" и красит красненьким запрос.
Выдает ошибку URLStream. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:54. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|