2008-10-13 113 views
3

是否可以在編譯時嵌入swf中的數據(使用[Embed]元標籤)播放視頻?將二進制視頻數據嵌入到swf文件中

由Flash CS3等提供的「導入Video->嵌入」功能是不能接受的,因爲它有許多嚴重的限制(包括聲音的同步問題,幀的最大數量,以及其他警告)

I」 m感興趣的是能夠將swf中的flv視頻數據(以及其他資源)捆綁在一起,這些數據將由AIR應用程序播放。

我不認爲這是可以做到的。任何人不同意?

回答

7

只要你的視頻是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); 
    } 
} 
2

您可以使用Flash IDE將flv導入swf文件 - 我之前完成了此操作。您可以將它放到MovieClip的時間軸上,就像聲音一樣,然後將該movieclip放到舞臺上播放。在Flash CS3中,執行文件>導入>導入視頻並選擇flv。選擇視頻,然後在嚮導的下一站選擇「嵌入.....」,這是一個鏈接到Adobe Developer center article on embedding flvs into swfs

我自己並沒有這樣做,但我看不出有什麼理由可以從加載的swf的庫中訪問flv。

僅供參考:看起來這是一個延遲的錯誤。它看起來不像Adobe當前允許使用嵌入元標記進行嵌入。這裏是關於該問題的forum post以及指向bug tracker的鏈接。

+0

不幸的是這種方法有很多,我不能忍受警告的。最大的問題是聲音同步問題,但也有framecount限制和其他misc限制。 我已更新問題。謝謝回答! – aaaidan 2008-10-15 03:23:29

+0

感謝詹姆斯的這些鏈接,特別是kirupa.com的主題。讓我感覺不那麼瘋狂。 – aaaidan 2009-03-20 22:47:29

1

它可以嵌入視頻與Flash IDE中的SWF文件,但它不是一個非常好的選擇:

「播放僅限於簡單的播放和停止命令,以及視頻 幀率必須匹配的主機 電影, 將需要創作的 最低公分數下載 速度的重要考慮因素。「

「嵌入式 視頻最大的限制是具有最大 16000幀和音頻同步的不能 維持超過兩分鐘左右的電影。」

這些報價來自this article。這有點舊,但據我所知,關於嵌入視頻的說法仍然存在。

+0

這是一個很好的觀點。我知道Flash CS3的「導入視頻 - >嵌入」功能,但由於這些原因,這不是一個可接受的解決方案。 我正在尋找_另一種方式來嵌入視頻。我想象的是像實例化一個`[Embed]`類的類並傳遞給視頻播放器。 – aaaidan 2008-10-15 03:21:42

0

哦,是的,顯然你可以使用Embed元標記嵌入二進制數據在瑞士法郎。

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

是否可以播放從ByteArray的嵌入式視頻與否不是我不能回答這個階段拉上......