У меня есть минутный фильм, который я хочу скомпилировать в проект AS3. Фильм начинался в формате MOV, поэтому я использовал FFMpeg, чтобы преобразовать его в FLV, затем снова с помощью FFMpeg из FLV в SWF.
Я встраиваю этот фильм в двоичный файл AS3, используя метаданные Embed
:
[Embed(source="1.swf")] private var _Vid:Class;
У меня есть контейнер Sprite, в который добавляется этот фильм. Перед добавлением встроенного фильма я преобразую его как MovieClip:
var vid:Object = new _Vid(); return vid as MovieClip;
Когда я добавляю получившийся фрагмент ролика на сцену, он сразу начинает воспроизводиться и, кажется, воспроизводится нормально. Однако, когда я проверяю свойство totalFrames фрагмента ролика, оно возвращает 0. И этот фрагмент ролика, похоже, не отвечает на вызовы stop
или gotoAndStop
.
Такое же поведение я получаю от встраивания фильма в SWF во Flash IDE, а затем встраивания результата таким же образом, поэтому кажется, что что-то не так с тем, как я добавляю его в сцену. Есть предположения?
РЕДАКТИРОВАТЬ: в соответствии с требованиями продукта фильм as3 не может загружать видео из внешнего файла. Он должен быть скомпилирован, чтобы результирующий .swf, выполняющий воспроизведение, мог работать полностью сам по себе, не полагаясь на другие внешние файлы.
РЕДАКТИРОВАТЬ 2: При дальнейшем осмотре экземпляр MovieClip, полученный в результате:
[Embed(source="1.swf")] private var _Vid:Class;
var vid:Object = new _Vid(); return vid as MovieClip;
имеет один дочерний объект, принадлежащий к классу Loader, и у этого дочернего объекта нет дочерних объектов. Я попытался передать ребенка напрямую как MovieClip, но безуспешно.
РЕДАКТИРОВАТЬ 3. Из того, что я читаю, здесь и здесь, API 10.1 для объекта NetStream предоставляет метод называется appendBytes. Мне все еще нужно изучить это подробнее, но я мог бы встроить файл .flv как поток октетов и вручную передать байты объекту Net Stream для воспроизведения видео. Я выложу результаты своих тестов через несколько ...