Производительность FLV и сборка мусора - PullRequest
3 голосов
/ 21 апреля 2010

Я создаю большой флеш-сайт (AS3), который использует огромные FLV в качестве видео перехода от раздела к разделу. FLVs имеют размер 1280x800 и масштабируются до 1680x1050 (большая часть которых не отображается для пользователей с небольшими экранами) и составляют около 5-8 секунд за штуку. Я кодирую видео с использованием кодека Hi-Def On2, VP6-S, и воспроизведение довольно хорошее с родными проигрывателями FLV, Quicktime с Perian и простыми проверочными приложениями FLV, встроенными в AS3.

Проблема, с которой я столкнулся, заключается в том, что в контексте реального сайта воспроизведение не так гладко; частота кадров не так хороша, как следовало бы, и, что еще более проблематично, иногда случаются рывки и пропущенные кадры (иногда видео приостанавливается на четверть секунды или около того). Я предполагаю, что это вызвано сборкой мусора во Flash плеере, которая происходит недетерминированно, и поэтому ее трудно проверять и контролировать.

Я использую один экземпляр FLVPlayback для воспроизведения видео; Первоначально я использовал объекты NetStream и т. Д. Напрямую, но переключился на FLVPlayback для по этой причине . Кто-нибудь испытывал такого рода шутки с FLVPlayback (или, в более общем смысле, с видео в формате hi-def Flash)? Прав ли я в том, что виновником здесь является GC, и если да, то есть ли какой-нибудь способ предотвратить его во время воспроизведения этих переходов, интенсивно использующих систему?

Ответы [ 3 ]

4 голосов
/ 03 сентября 2010

Отрывистость при воспроизведении FLV / F4V вряд ли является результатом сборки мусора - видео фактически сохраняется в памяти до полной выгрузки, поэтому сборка мусора вообще не происходит (если вы не сделали что-то неортодоксальное) как размещение видео в контейнере с параметром cacheAsBitmap, установленным в true).

Переключение на F4V, если вам не нужны определенные функции FLV (например, ссылка, размещенная daidai, предлагает - заявление об отказе, это мой блог), может помочь, но в целом вы также должны знать обо всем это влияет на композитинг видео на экране. Поскольку видео большого размера приводит к повторной визуализации всего, что его перекрывает, любой маленький объект может сильно повлиять на производительность.

У вас есть что-нибудь на видео? Попробуйте избавиться от них, если это возможно, или установите для параметра cacheAsBitmap значение true (если они не анимированы). Это особенно хорошо для сложных векторных рисунков или текста (растровые изображения / изображения гораздо быстрее рисуются). Если у них разные режимы смешивания, вы как бы облажались - можете ли вы вместо этого использовать обычный режим смешивания?

У вас есть что-нибудь под видео? Если это так, избавьтесь от них во время воспроизведения видео (просто установите для видимости значение false).

Чтобы проверить ненужные визуализации, сделайте паузу в видео, щелкните правой кнопкой мыши, включите «показывать перерисованные области» (проигрыватель отладки). Вы видите, что красный квадрат непрерывно рисует? Тогда что-то там происходит на заднем плане, лучше от него избавиться.

У вас что-нибудь происходит на фоне через onEnterFrame или таймеры / интервалы? Попробуйте сделать паузу.

Является ли ваше видео 30 кадров в секунду и CG-рендеринг (например, можно использовать размытие в движении)? Если да, попробуйте выполнить рендеринг с частотой 24 кадра в секунду или что-то между ними - все еще хорошего качества, но гораздо меньше данных для декодирования и отрисовки.

Можете ли вы использовать небольшие видео? Даже если вы по-прежнему визуализируете их в том же большем размере, для декодирования и рендеринга очень мало пиксельных данных, а влияние на качество может быть довольно незначительным.

Это в значительной степени суммирует все это. Однако избавление от всего остального на экране - ваш приоритет №1.

0 голосов
/ 03 сентября 2010
0 голосов
/ 23 апреля 2010

Вы пробовали вместо этого кодировать видео в H.264? Flash Player поддерживает их в течение некоторого времени, в конечном итоге он может работать лучше. Это то, что большинство людей, делающих HD-видео во Flash, используют (например, Youtube, Vimeo и т. Д.).

В качестве теста попробуйте выложить на YouTube видео с разрешением 1080p HD и посмотреть, не остановится ли он для вас.

...