Встраивание двоичных видеоданных в файл swf

Можно ли воспроизводить видео из данных, которые были встроены в SWF-файл во время компиляции (с метатегом [Embed])?

Функция «Импорт видео-> Вставить», предоставляемая Flash CS3 и т. Д., Неприемлема, поскольку она имеет множество серьезных ограничений (включая проблемы с синхронизацией звука, максимальное количество кадров и другие предостережения).

Меня интересует возможность объединить видеоданные в формате flv в файл swf (вместе с другими ресурсами), который будет воспроизводиться приложением AIR.

Я не думаю, что это возможно. Кто-нибудь не согласен?


person aaaidan    schedule 13.10.2008    source источник


Ответы (5)


Если ваше видео является FLV, тогда ответ - да - вы можете использовать NetStream.appendBytes() для воспроизведения встроенного ByteArray:

public class Main extends MovieClip
{
    [Embed(source="sample.flv", mimeType="application/octet-stream")]
    private var SampleVideo:Class;

    public function Main():void 
    {
        var video:Video = new Video(320, 240);
        addChild(video);

        var netConnection:NetConnection = new NetConnection();
        netConnection.connect(null);
        var netStream:NetStream = new NetStream(netConnection);
        netStream.client = {};
        video.attachNetStream(netStream);

        var byteArray:ByteArray = new SampleVideo();
        netStream.play(null);
        netStream.appendBytes(byteArray);
    }
}
person Thom    schedule 27.03.2012
comment
Вау! А начиная с FP 10.1! Как я это пропустил ?! Ваше здоровье! - person aaaidan; 28.03.2012

Вы можете импортировать FLV в SWF-файл с помощью Flash IDE - я делал это раньше. Вы можете поместить его на временную шкалу MovieClip, как звук, а затем перетащить этот фрагмент на сцену для воспроизведения. В Flash CS3 выберите «Файл»> «Импорт»> «Импортировать видео» и выберите файл flv. Выберите видео, а затем на следующей остановке мастера выберите «Вставить .....». Вот ссылка на Статья Центра разработчиков Adobe о встраивании файлов flv в файлы swf.

Я сам этого не делал, но я не вижу причин, по которым вы могли бы получить доступ к flv из библиотеки загруженного swf.

К вашему сведению: Похоже, это была отложенная ошибка. Не похоже, что Adobe в настоящее время разрешает встраивание с использованием метатега Embed. Вот сообщение на форуме по проблеме и ссылка на < href = "https://bugs.adobe.com/jira/browse/SDK-259" rel = "nofollow noreferrer"> средство отслеживания ошибок.

person James Fassett    schedule 13.10.2008
comment
К сожалению, у этого подхода есть много недостатков, с которыми я не могу смириться. Самая большая проблема - это проблема синхронизации звука, но также существуют ограничения по количеству кадров и другие ограничения. Я обновил вопрос. Спасибо за ответ! - person aaaidan; 15.10.2008
comment
Спасибо за эти ссылки, Джеймс, особенно за ветку kirupa.com. Делает меня менее сумасшедшим. - person aaaidan; 21.03.2009

Можно встраивать видео в SWF-файлы с помощью Flash IDE, но это не очень хороший вариант:

«Воспроизведение ограничено простыми командами воспроизведения и остановки, а частота кадров видео должна совпадать с частотой кадров основного фильма, что является важным соображением, которое потребует разработки для скорости загрузки с наименьшим общим знаменателем».

«Самыми большими ограничениями для встроенного видео являются фильмы, содержащие максимум 16 000 кадров, и синхронизация звука не может поддерживаться дольше двух минут».

Эти цитаты взяты из этой статьи. Это немного устарело, но, насколько я знаю, то, что там сказано о встраивании видео, все еще остается в силе.

person hasseg    schedule 14.10.2008
comment
Это очень хороший момент. Я знаю функцию «Импорт видео-› встраивания »в Flash CS3, но по этим причинам это неприемлемое решение. Я ищу другой способ встраивать видео. Я представлял себе что-то вроде создания экземпляра класса [Embed]ed и передачи его в видеопроигрыватель. - person aaaidan; 15.10.2008

Ах да, очевидно, вы можете встраивать двоичные данные в swf, используя метатег Embed.

[Embed(
    source="local_data_file.flv",
    mimeType="application/octet-stream") ]
private static var __FlvClass123:Class;
protected static var flvData:ByteArray = new __FlvClass123();

Можете ли вы воспроизводить встроенное видео из ByteArray или нет - это не то, на что я не могу ответить так или иначе на данном этапе ...

person aaaidan    schedule 25.03.2010

у меня была такая же проблема, и я искал более "гибкое" решение. Кажется, что динамическое встраивание в эти дни работает очень просто:

public function loadSWF(){

 var _assetLdr:Loader;
_assetLdr = new Loader();
_assetLdr.load(new URLRequest("1.swf"));
_assetLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, this.handleComplete);
addChild(_assetLdr); 
}


public function handleComplete(event:Event):void {

    trace("complete");
    var loaderInfo:LoaderInfo=event.target as LoaderInfo;
    var content:MovieClip = loaderInfo.loader.content as MovieClip;
    addChild(content);

}

Примечание. Проверьте смещения экрана в library.swf. В моем случае они были испорчены, поэтому просто отображалось за кадром. (ThankGodForCoffee) Хорошего дня!

person George Hummet    schedule 31.05.2018
comment
Ого. Вы говорите в эти дни? Вспышка все еще ... вроде ... существует? Ты сводишь меня с ума! - person aaaidan; 01.06.2018
comment
Кроме того, мой вопрос фактически предусматривал встраивание, тогда как это решение представляет собой загрузку файла фильма во время выполнения, если я чего-то не упускаю. - person aaaidan; 01.06.2018