AS3 – Вграденото SWF видео показва totalFrames == 0

Имам този 1 минутен филм, който искам да компилирам в 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 реагират на стоп, възпроизвеждане и gotoAndStop, така че възнамерявах да контролирам възпроизвеждането на видеото по този начин. Крайният резултат не изисква фино търсене, а само основна функционалност за възпроизвеждане/пауза. Предположих, че тъй като swf на филма е вграден като MovieClip, той ще реагира на stop() и play() и ще се държи съответно, но това не е резултатът, който получавам. - person jtrim; 16.08.2010
comment
Полученият флаш няма да бъде изтеглен чрез уеб сървър, той ще бъде разпространен на диск. Самият видео актив е чувствителен материал, така че се опитваме да направим възможно най-трудно за хората да се доберат директно до видеоклипа. - person jtrim; 18.08.2010
comment
Благодаря за уточнението (и премахването на минуса)! Бих ви препоръчал да зададете нов въпрос относно защитата на видео съдържание и възможния метод за криптиране при доставяне на мултимедия на диск. - person PatrickS; 18.08.2010