AS3 - встроенное видео SWF показывает totalFrames == 0 - PullRequest
2 голосов
/ 14 августа 2010

У меня есть этот 1-минутный фильм, который я хочу скомпилировать в проект AS3. Фильм начался в формате MOV, поэтому я использовал FFMpeg для преобразования его в FLV, а затем снова с FFMpeg из FLV в SWF.

Я встраиваю этот фильм в двоичный файл AS3, используя Embed метаданные:

[Embed(source="1.swf")]
private var _Vid:Class;

У меня есть контейнер Sprite, к которому добавлен этот фильм. Прежде чем добавить его, я включил встроенный фильм в виде мувиклипа:

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: Из того, что я читаю здесь и здесь , 10,1 API для объекта NetStream предоставляет метод appendBytes. Мне все еще нужно разобраться в этом, но я мог бы встроить файл .flv в виде потока октетов и вручную передать байты в объект Net Stream для воспроизведения видео. Я опубликую результаты моих тестов через несколько ...

Ответы [ 2 ]

3 голосов
/ 20 августа 2010

В итоге я встроил видео в двоичные данные:

[Embed(source="1004.flv", mimeType="application/octet-stream")]

Затем с помощью NetStream.appendBytes() подал видео в NetStream, подключенный к объекту Video.Это прекрасно работает, и NetStream может быть приостановлен и воспроизведен.

1 голос
/ 14 августа 2010

Проверьте эти уроки

http://gotoandlearn.com/play.php?id=46

http://gotoandlearn.com/play.php?id=129

Я думаю, что если видео встроено в мувиклип, как вы это сделали, то единственное поведение, которое вы можете ожидать, это то, что вы получаете в данный момент. Он будет играть, но вы не сможете его контролировать.

Почему вы настаиваете на его внедрении? Это сделает ваш файл больше, и видео не будет воспроизводиться до тех пор, пока SWF-файл не загрузится полностью. Это короткое видео, но оно все равно займет гораздо больше времени, чем доступ к нему через прогрессивную загрузку.

По общему признанию, второе руководство не имеет особой актуальности, но почему бы не добавить его, оно дает вам больше возможностей для работы со СМИ во Flash. OSMF - это новая структура, и я думаю, что имеет смысл знать об этом.

...