Проигрыватель несжатых MOV QuickTime файлов с альфа-каналом
Необходимо разработать проигрыватель несжатых MOV QuickTime файлов с альфа-каналом на языке AS3 под платформу Adobe AIR. Проигрыватель по сути должен представлять из себя парсер - класс MOVVideo, наследник DisplayObject, который имеет методы play (начало проигрывания), pause (остановка проигрывания на текущем кадре), seek (перемотка на определенную секунду видео), seekFrame (перемотка на определенный кадр видео) и close (прекращение проигрывания и уничтожение всех задействованных в работе ресурсов, после чего экземпляр класса можно использовать по-новой), а также отправляет события об инициализации, метаданных (FPS, наличие альфа-канала, продолжительность видео в секундах и кадрах), прогресс (при обновлении кадра с указанием данных о текущей позиции воспроизведения), успешной или неуспешной попытке перемотки, а также завершении видео. Аудио в данном проекте игнорируем. Необходимо реализовать поддержку исключительно поддержку несжатых MOV QuickTime видеофайлов (с альфа и без альфа каналов), все другие кодеки (H.264 и т.п.) не нужно поддерживать, лишь уведомлять об этом соответствующим событием. Вся работа проигрывателя/парсера должна проходить в асинхронном режиме (или, желательно, с использованием многопоточности, Worker'ов). Проигрывание должно осуществляться без потери качества (т.е. перекодирование с более низким качеством недопустимо). Поддержка должна быть на платформах Windows, Mac OS X, Android и iOS под платформу Adobe AIR. Крайне важна высокая производительность работы. Вызов метода play инициирует загрузку информации о видео файле. Методу play передается аргументом объект типа File с указанием на файл для воспроизведения. При успешном получении данных о файле возвращается соответствующее событие с мета данными и начинается проигрывание видео с последующей отправкой описанных выше событий. Событие мета данных должно содержать: - размер видео в пикселях (videoWidth, videoHeight) - данные о цветовом формате и типе сжатия (параметры colorDepth, colorMode, compressionType которые могут принимать значения в отдельно определенном классе констант) - fps:Number (количество кадров в секунду у видео) - duration:Number (длительность воспроизведения файла в секундах) - framesCount:int (длительность воспроизведения файла в кадрах) В случае неудачного открытия файла или если он содержит неподдерживаемый тип сжатия необходимо отправлять соответствующее событие с кодом и описанием ошибки. MOVVideo должен реализовывать все стандартные свойства DisplayObject'а: x, y, width, height, rotation и т.п. В процессе воспроизведения MOVVideo должен отправлять покадровые события ProgressEvent о ходе воспроизведения. Воспроизведение файла должно происходить с реальной закодированной в видеофайл частотой воспроизведения (т.е. 5 секунд видео должны проигрываться за реальные 5 секунд, без привязки к framerate'у основного SWF файла и т.п., все по аналогии с классом Video). Видео файлы могут быть размером до 4-6 ГБайт. Предлагается вариант реализации с последовательного парсинга видеофайла в асинхронном режиме чтения и с использованием отдельного потока, который будет возвращать основному потоку объекты ByteArray для изменения объекта BitmapData с заданной в видеофайле частотой. Но приветствуются и другие реализации, решающие описанную задачу. При seek(0) необходимо начинать воспроизведение видео с начала без повторной инициализации и/или открытия файловых потоков. Вызов метода close инициирует уничтожение всех задействованных ресурсов объекта класса MOVVideo и делает его доступным для повторного использования метода play. Этот процесс может происходить в синхронном режиме. При повторном вызове метода play (даже если не завершилась одна из предыдущих операций) предыдущие процессы принудительно завершаются не дожидаясь выполнения и начинается новый процесс. Бюджет 25 тысяч рублей за это ТЗ, но возможно удорожание в процессе реализации.
