вторник, января 22, 2008

О том, как Flash Player воспроизводит видео MP4, Quicktime, и даже музыку из вашего iPod.

Все говорят, "Вот, Flash Player воспроизводит кучу видео-кодеков". А давайте проверим?
Первым делом лезем в Гугл и по первой же ссылке попадаем на Flash-Ripper.
Прочитав, первое желание пойти и посмотреть этот "Арал Балкан: FAQ по Adobe Flash Player H.264 support". Вопросы нас интересующие:

  • Будет ли воспроизводить FP9 не-FLV файлы или расширения?
    Да. Стандартные контейнеры MPEG-4, содержащие видео и аудио данные закодированные H.264/AAC, MP4, M4V, M4A, MOV, Mp4v, 3gp, 3g2.

В ответах находим интересную ссылку: http://www.debit.nl/video/. Здесь на странице, SWF воспроизводит видео MOV. Ага, раз у нас играется, значит с плеером всё в порядке. К слову, это видео H.264.

Попробуем воспроизвести этот файл своими средствами. Создаем в Flash CS проект AS3 с FLVplayback. Вызываем:


Локальная политика безопасности - только интернет, запускаем опубликованый HTML, смотрим. Пошла загрузка. Молчание.
Скачиваем MOV, пытаемся воспроизвести локально. Компилируем, запускаем.
Выкидывает исключение:
VideoError: 1005: Invalid xml: URL: "Video/BookofSecrets.mov" No root node found; if url is for an flv it must have .flv extension and take no parameters
Аналогичные действия с AS2 - проектом вообще вызывали ошибки и зависания.
Значит FLVPlayback не может воспроизводить другие видео-файлы.

По совету коллеги, создаю Flex-проект и перетаскиваю компонент VideoDisplay. В свойствах source указываем URL и - вуаля, всё играется. Локальный файл не позволяет воспроизвести политика безопасности. Но с этим мы боремся легко (гугл рулит) - добавляем параметр -use-network=false в Project -> Properties -> Flex Compiler -> Additional compiler arguments.

Возникает вопрос - были утверждения: что Flash Player 9 MovieStar может легко воспроизвести видео любым способом, даже непосредственно самим проигрывателем, и старые проекты откомпилированные еще под 7-ю версию не будут иметь проблем. А почему же не получается? Почему только флекс-компонент VideoDisplay способен воспроизвести такое видео? Что же не так?

* * *

Попробовал пример из Flash CS3 Help Actionscript 3.0 Components для класса Video. Воспроизводит! Для него вопрос снимается.

* * *

А вот компонент Media Display Actionscript 2.0 наш MOV не воспроизводит.

2 комментария:

Анонимный комментирует...

а нигде и не было написано что АС2 будет справляться с этой задачей. в первую очередь 9й плэейер существует для проигрывания наваротов 9ки. не думаю что адобовцы на столько глупы что бы поддерживать продукт, который они одновременно хотят, что бы заменился на рынке болие новыми версиями.

Unknown комментирует...

Собственно, меня на это сподвигла фраза (источник):

"The cool thing though is that you just don’t need to re-build your SWFs at all. If you have a video player SWF that is exported for Flash Player 7, it can play H.264 media files just the same as it can play FLV files. The “magic” is all in the new player."

Таким образом, если проект компилится под 7й FP, то там естественно версия AS не более второй. Но, по-видимому, вышеприведенное утверждение опрометчиво...