12.26
本來H264 ( mp4 ) 在Flash ( ActionScript 2.0 和 ActionScript 3.0 )的中播放的實驗並沒有排在優先的實驗計畫中,每天要做的事情實在太多了,一個一個來啊,但是昨天晚上網友Kelvin分享了他在Adobe所讀到的一篇關於 ActionScript 3.0 播放 H264 Mp4 的文章,似乎可以直接播放 mp4 的影片,恩,這倒影起我的好奇心,反正不用花太多的時間,優先讓這項測試插隊進來,若對 ActionScript 播放 H264影片有興趣的人,就可以參考這篇文章。

等一下我會示範如何用 ActionScript 2.0 和 ActionScript 3.0 叫入 H264編碼的的影片,不過這是有前提的,你必須至少要滿足兩個前提:
- 至少要有新版的Flash Player (這個測試是用9,0,115,0的版本),否則會無法玩成解碼的動作,要下載新版的Flash Player,可以到Adobe網站下載。
- 至少要有一段以H264編碼的Mp4影片,沒有的話要怎麼試啊 XD,若是手邊真的沒有這種影片,那可以問google大神這個關鍵字"H264 mp4 轉檔",至少還可以找到轉檔的程式可以將手邊的影片轉成mp4的測試檔。
好啦,如果已經準備好了,就可以開始製作啦,沒錯,你猜的沒錯,我也沒有這種影片,所以我是用轉碼的,要試就來試點刺激的,下圖是轉檔程式中的設定,直接給他衝1280×720的解析度了,不過編碼要選H264 就是了,要不然到時候編碼格式不對,Flash Player也不會對你客氣……………………………..直接罷工 XD

來來來,看清楚了,真的是mp4 (MPEG-4)的影片格式,好啦,原料都有了,來開始寫ActionScript吧。

這邊的ActionScript示範就不多花口水,也不寫太多的功能,反正只要叫出來能撥就好,細節我就不太多說了,可以參考Adobe原廠的說明或是[Flash CS3 professional 打造互動設計力與美]一書中第10章中的介紹,上面有將NetConnection和NetStream原理和使用解釋的非常清楚了。
首先先示範ActionScript 2.0的寫法:
var video:Video;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.onStatus=function(info:Object){
for(i in info){
trace(i+": "+info[i]);
}
}
video.attachVideo(ns);
video._width=Stage.width;
video._height=Stage.width*(720/1280);
ns.play("movie_1280x720.mp4");
這樣就搞定啦,簡單吧,寫完播放就可以看到影片開始播放了,不過要注意的是,若你寫的是ActionScript 2.0,請記得一定要在場景上放置一個 Video (視訊元件),否則是無法正確執行的,但是ActionScript 3.0就沒這個問題。
再來示範ActionScript 3.0的寫法:
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.NetStatusEvent;var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
var video:Video = new Video();
video.attachNetStream(ns);
this.addChild(video);
ns.play("movie_1280x720.mp4");
video.width=stage.stageWidth;
video.height=stage.stageWidth*(720/1280);
function statusHandler(event:NetStatusEvent):void{
for(var i:String in event.info){
trace(i+": "+event.info[i]);
}
}
執行結果如下圖,如果你的螢幕解析度夠大,可以將場景直接開到1280x720,就可以看到1:1的影片了,為了展示方便(其實是我的螢幕只到1024x768)我是用500x320來做測試。

接下來我想這是大家關心的問題,H264影音播放會耗掉多少資源,我測試的電腦是使用Intel CPU T2300和1.5G的DDR RAM,播放時CPU使用率都在12%到48%之間跳動,看起來似乎沒有什麼太大的問題,不會消耗太多的資源。

好啦,試驗到這邊來下個結論吧,在我用同一台機器分別測試 ActionScript 2.0 和ActionScript 3.0 得到以下的結論:
- 不管是 ActionScript 2.0 也好, ActionScript 3.0 也好都可以直接播放mp4格式的影音,不需要再轉成FLV的格式。
- 不論是 ActionSctipt 2.0 和 ActionScript 3.0 都可以透過 Flash Player 9 以上的版本支援 H264影音播放,皆可正常執行。
- 不論是用 ActionScript 2.0 和 ActionScript 3.0 程式的寫法都跟之前一模一樣,不須要再學新的語法或觀念才能操作H264的影片。
- 在影音播放上 ActionScript 3.0 的效率跟 ActionScript 2.0 相比,並沒有顯著性的差異,但是若是多家一些操控或是畫面控制,我想差異就會出來了,不過單以影音播放效率來說差異不明顯。
- H264 影片在 Flash 上播放是可行的方案,不過我比較擔心頻寬的問題,網路不夠寬的時候應該會先掛在頻寬上,在硬體上可以使用硬體加速,這倒是問題不大,而且H264已經有很多顯示卡要納入硬體解碼的標準了。
若是想看關於H264的一些知識,其實Adobe的這篇文章[Exploring Flash Player support for high-definition H.264 video and AAC audio]說的蠻清楚了,也包含了ActionScript 3.0和Flex的示範,我就不浪費資源自己寫,也不做英翻中了,可以自己參考,若是想看 ActionScript 2.0 的寫法,這篇文章中有同時示範了 ActionScript 2.0 和 ActionScript 3.0 的作法了 ,中文詳細的說明可參考[Flash CS3 professional 打造互動設計力與美]一書中第10章中的介紹
相關文章:
文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。


您好可否請問一下讀取flv檔的AS2寫法,這是3.0的請問改成2.0該怎麼寫呢?如果有空時可否為我解答一下呢?感激不盡
var my_nc:NetConnection = new NetConnection();
my_nc.connect(null);
var my_ns = new NetStream(my_nc);
my_ns.client=this;
var myPlayer:Video=new Video(478,330);
videohere_mc.addChild(myPlayer);
play_btn.addEventListener(”click”,playVideo);
function playVideo(Event:MouseEvent):void{
my_ns.play(”film/mov1.flv”);
myPlayer.attachNetStream(my_ns);
}
pause_btn.addEventListener(”click”,pauseVideo);
function pauseVideo(Event:MouseEvent):void{
my_ns.togglePause();
}
stop_btn.addEventListener(”click”,stopVideo);
function stopVideo(Event:MouseEvent):void{
myPlayer.attachNetStream(null);
myPlayer.clear();
my_ns.close();
}
你把addEventListener(”click”,playVideo) 的寫法改成onPress=function(){}的做法就差不多了, 加油囉.
小弟公司 http://verywed.com/video 已經用h264編碼上線囉
效果還可己接受 如果給更大的頻寬畫質真的是會很不錯的
各位觀眾,留言板已經設好了,聊天說地以後就可以在留言板聊了。
接下來該不會要討論區吧? XD
留言板! 推x1000!!!
雖然最近很操,有空還是回來阿尼這逛逛~
Dear Uni:
找工作眼睛要睜大小心喔,還好你有先到網路上搜尋一下,年前年後職缺會比較多,可以把握機會朝自己的優勢邁進。
回答你的ps,因為我偷懶 Orz,趁這次週末來弄個留言板或是自己寫一個好了。
(web2.0班)最近還在找工作中…結果今天就有公司打電話來叫我明天去面試…
是一家叫做"瑋智"的公司(不知道老師友沒有聽過?),
結果我就去網路上查這家家公司…
結果發現這家公司的性質原來是跟"恆逸"一樣是補教業…
然後我又去奇摩知識查…
http://tw.knowledge.yahoo.com/question/article?qid=1707083105600
原來這家公司風評很差,還有騙錢的嫌疑…
所以我決定不去面試了…(害我還高興一下Orz)
大家要小心這家公司…
ps.老師為甚麼不弄個留言板…這樣比較方便說(題外話)!