AS3 - встроенное SWF-видео показывает totalFrames == 0

У меня есть минутный фильм, который я хочу скомпилировать в проект 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 для воспроизведения видео. Я выложу результаты своих тестов через несколько ...


person jtrim    schedule 13.08.2010    source источник


Ответы (2)


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

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

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

person jtrim    schedule 20.08.2010

Проверьте эти руководства

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

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

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

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

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

person PatrickS    schedule 14.08.2010
comment
Ни в одном из этих руководств не говорится о встраивании видеофайла, который я явно включил в свой вопрос. Это требование продукта ... видео не может быть загружено из сети. - person jtrim; 16.08.2010
comment
Я нахожу вас немного поспешным на фронте минусов. кажется, что вы даже не удосужились взглянуть на первый учебник, где Ли Бримелоу с самого начала четко заявляет, что видео, которое он использует, находится на его рабочем столе, а не в сети !!! Теперь, если вы не понимаете учебник, вините себя, а не меня. К счастью, большинство людей здесь не такие, как вы! не изливайте свое разочарование на тех, кто пытается вам помочь. просто попробуй и учись, как все мы здесь. мой совет, расслабьтесь, сделайте шаг назад и посмотрите учебник еще раз, когда вы, наконец, получите его, просто избавьтесь от этого минуса и отметьте свой вопрос как ответ. - person PatrickS; 16.08.2010
comment
На самом деле я потрудился подробно изучить оба руководства. Автор первого видео произносит слово, встроенное в видео, но оно не встраивается в том смысле, что видеофайл фактически компилируется в получившийся файл .swf. Обратите внимание на тег метаданных [Embed] в моем исходном вопросе. Ваш ответ был совершенно неуместным - отсюда и -1. Ничего личного, ваш ответ не имеет отношения к моему вопросу. - person jtrim; 16.08.2010
comment
Вы слишком много читаете в моем -1 и комментируете. Вы воспринимаете и то, и другое как результат моего разочарования по поводу проблемы, что является большим предположением с вашей стороны. Я просто использую Stack Overflow, как и предполагалось. Голосование за нерелевантные ответы - часть того, что делает этот сайт действительно отличным ресурсом. Он отфильтровывает вещи, которые не дают точных ответов на заданные вопросы. - person jtrim; 16.08.2010
comment
Вы абсолютно правы, давайте использовать StackOverflow по назначению и позволить другим решать, был ли ответ неуместным или нет, но, пожалуйста, прочтите свой вопрос еще раз, вы описываете, что вы делаете, а не то, что вам нужно. Где вы указали, что встраивание видео с метатегом [Embed] было обязательным условием? Я предоставил вам два способа работы с видео, пытаясь дать вам другой взгляд на то, как решить эту проблему. В чем причина встраивания видео в MovieClip для добавления в другой MovieClip? Как вы собираетесь управлять воспроизведением фильма? В этом нет никакого смысла? - person PatrickS; 16.08.2010
comment
Справедливо. Я сниму свой -1. Для меня это не так уж важно, но почему-то кажется вам важным. Я не могу отозвать его, пока вы не отредактируете свой ответ. Невозможно встроить фильм .flv с метаданными [Embed] и получить что-либо, кроме ByteArray, поэтому единственный другой способ встроить фильм - сначала преобразовать его в swf, а затем встроить его как MovieClip. Я не добавляю встроенное видео в существующий MovieClip, это то, к чему принудительно применяются встроенные swf. - person jtrim; 16.08.2010
comment
Что касается управления воспроизведением, экземпляры MovieClip отвечают на команды stop, play и gotoAndStop, поэтому я намеревался управлять воспроизведением видео именно так. Конечный результат не требует детального поиска, только базовые функции воспроизведения / паузы. Я предполагал, что, поскольку swf фильма встраивается как MovieClip, он будет реагировать на stop () и play () и вести себя соответствующим образом, но это не результат, который я получаю. - person jtrim; 16.08.2010
comment
Полученная в результате флэш-память не будет загружена через веб-сервер, она будет распространяться на диске. Сам по себе видеоресурс является конфиденциальным материалом, поэтому мы стараемся максимально затруднить людям доступ непосредственно к видео. - person jtrim; 18.08.2010
comment
Спасибо за разъяснения (и снятие минуса)! Я бы порекомендовал вам задать новый вопрос о защите видеоконтента и возможном методе шифрования при доставке мультимедиа на диск. - person PatrickS; 18.08.2010