Можно ли определить, что флэш-фильм также содержит (воспроизводит) звук? - PullRequest
3 голосов
/ 04 сентября 2008

Есть ли способ определить, содержит ли флэш-фильм какой-либо звук или воспроизводит какую-либо музыку?
Было бы неплохо, если бы это можно было сделать внутри веб-браузера (actionscript из другого флеш-объекта , javascript, ..) и сделать это за до запуска фильма во флэш-памяти.

Однако, я сомневаюсь, что это вообще возможно, поэтому любое другое (программируемое) решение также ценится

Ответы [ 3 ]

3 голосов
/ 04 сентября 2008

Да, на стороне сервера точно. Сторона клиента? Я не знаю. (Я парень с серверной стороны.)

На стороне сервера нужно будет проанализировать файл, прочитать заголовок и / или найти аудио кадры. (Я сам портировал анализатор FLV haskel на Java для целей индексации, и есть другие утилиты для синтаксического анализа. Это возможно.)

FLV-страница osflash.org содержит ужасные детали. Посмотрите таблицу заголовков FLV разделов формата FLV.

FIELD       DATA TYPE      EXAMPLE                  DESCRIPTION
 Signature   byte[3]        “FLV”                    Always “FLV”
 Version     uint8          “\x01” (1)               Currently 1 for known FLV files
 Flags       uint8 bitmask  “\x05” (5, audio+video)  Bitmask: 4 is audio, 1 is video
 Offset      uint32-be      “\x00\x00\x00\x09” (9)   Total size of header (always 9 for known FLV files) 

РЕДАКТИРОВАТЬ: Мой код на стороне клиента с Flash не существует, но я считаю, что есть событие onMetaDataLoad, что ваш код может перехватить. Это может произойти немного поздно для вас, но, может быть, это достаточно хорошо?

1 голос
/ 04 сентября 2008

Вы спрашиваете о видеофайлах FLV или Flash-фильмах, как в SWF?

Просто чтобы уточнить, FLV - это формат видео Flash (или что-то вроде аббревиатуры), обычный ролик / приложение / баннер Flash будет SWF. Это очень разные форматы файлов.

0 голосов
/ 12 сентября 2008

С помощью ByteArray вы можете делать практически все, что хотите. Перед началом воспроизведения вы можете проанализировать байты заголовка FLV (используйте byteArray.readByte () и обратитесь к спецификации), чтобы определить, включен ли флаг аудио. Поскольку заголовок FLV загружается практически мгновенно, это не должно вызывать неудобных задержек для пользователя.

С SWF это очень сложно - я уверен, что нет простого способа определить заранее, воспроизводит ли SWF где-нибудь аудио. Для этого можно посмотреть, какие ресурсы определены в библиотеке SWF, но затем SWF-файл может просто загрузить внешний аудиофайл (или даже сгенерировать его с помощью некоторых хаков или нового API-интерфейса во Flash Player 10). Если SWF-файлы отправлены пользователем (или что-то подобное, что находится вне вашего непосредственного контроля), я думаю, что это рискованный путь ..

...