視頻基礎知識視頻處理簡介
Adobe Flash Player 的一個重要功能是可以使用 ActionScript,以操作其它可視內容(像、動畫、文本等)的方式顯示和操作視頻資訊。
在 Adobe Flash CS3 Professional 中建立 Flash 視頻 (FLV) 檔案時,您可以選擇視頻的外觀,包括常用的回放控制項。不過,您不一定要局限於可用的選項。使用 ActionScript 可以精確控制視頻的載入、顯示和回放,這意味著您可以建立自己的視頻播放器外觀,也可以按照所需的任何非傳統方式使用視頻。
在 ActionScript 中使用視頻涉及多個類的聯合使用:
- Video 類:舞台上的實際視頻內容框是 Video 類的一個執行個體。Video 類是一種顯示對象,因此可以使用適用於其它顯示對象的同樣的技術(比如定位、應用變形、應用濾鏡和混合模式等)進行操作。
- NetStream 類:在載入將由 ActionScript 控制的視頻檔案時,將使用一個 NetStream 執行個體來表示該視頻內容的源,在本例中為視頻資料流。使用 NetStream 執行個體也涉及 NetConnection 對象的使用,該對象是到視頻檔案的串連,它好比是視頻資料摘要的通道。
- Camera 類:在通過串連到使用者電腦的網路攝影機處理視頻資料時,會使用一個 Camera 執行個體來表示視頻內容的源,即使用者的網路攝影機和它所提供的視頻資料。
在載入外部視頻時,您可以從標準 Web 服務器負載檔案以便進行漸進式下載回放,也可以使用由專門的伺服器(如 Adobe 的 Macromedia Flash Media Server)傳送的視頻流。
常見視頻任務
本章介紹了以下您將希望執行的與視頻相關的任務:
- 顯示和控制螢幕上的視頻
- 載入外部 FLV 檔案
- 處理視頻檔案中的中繼資料和提示點資訊
- 捕獲和顯示從使用者網路攝影機輸入的視頻
重要概念和術語
- 提示點:一個可以放在視頻檔案內特定時刻的標記,例如,可用作書籤以便定位到該時刻或提供與該時刻相關聯的其它資料。
- 編碼:以一種格式接收視頻資料並將其轉換為另一種視頻資料格式的過程;例如,接收高解析度的源視頻並將其轉換為適合於 Internet 傳送的格式。
- 幀:單一的一段視頻資訊;每一幀都類似於一個代表某一時刻的快照的靜止映像。通過按順序高速播放各個幀,可產生動畫視覺效果。
- 主要畫面格:包含幀的完整資訊的視訊框架。主要畫面格後面的其它幀僅包含有關它們與主要畫面格之間的差異的資訊,而不包含完整的幀資訊。
- 中繼資料:有關視頻檔案的資訊,可嵌入在視頻檔案中並可在載入視頻時檢索。
- 漸進式下載:當視頻檔案從標準 Web 服務器傳送時,會使用漸進式下載來載入視頻資料,這意味著會按順序載入視頻資訊。其好處是不必等待整個檔案下載完畢即可開始播放視頻;不過,它會阻止您向前跳到視頻中尚未載入的部分。
- 串流:漸進式下載的一種替代方法,使用串流(有時稱為“實流”)技術和一台專用視頻伺服器通過 Internet 傳送視頻。使用串流,用於查看視頻的電腦不必一次下載整個視頻。為了加快下載速度,在任何時刻,電腦均只需要整個視頻資訊的一部分。由於使用一台專用伺服器來控制視頻內容的傳送,因此可以在任何時刻訪問視頻的任何部分,而無需等待其下載完畢後才能進行訪問。
完成本章中的樣本
學習本章的過程中,您可能想要自己動手測試一些範例程式碼清單。由於本章是有關在 ActionScript 中使用視頻的,因此,本章中的許多代碼清單都涉及處理視頻對象(可能是在 Flash 創作工具中建立並放置在舞台上的對象,也可能是使用 ActionScript 建立的對象)。測試範例將涉及在 Flash Player 中查看結果,以瞭解代碼對視頻的影響。
多數範例程式碼清單都操作 Video 對象而不顯式建立該對象。要測試本章中的這些代碼清單,請執行以下操作:
- 建立一個空的 Flash 文檔。
- 在時間軸上選擇一個主要畫面格。
- 開啟“動作”面板,將代碼清單複製到“指令碼”窗格中。
- 如有必要,請開啟“庫”面板。
- 從“庫”面板菜單中,選擇“建立視頻”。
- 在“視頻屬性”對話方塊中,輸入新視頻元件的名稱,然後在“類型”欄位中選擇“視頻(受 ActionScript 控制)”。單擊“確定”建立一個視頻元件。
- 將視頻元件的一個執行個體從“庫”面板拖動到舞台上。
- 使視頻執行個體保持選中狀態,在“屬性”檢查器中,為其指定執行個體名稱。名稱應與範例程式碼清單中視頻執行個體使用的名稱相匹配,例如,如果代碼清單操作名為
vid 的 Video 對象,則應將舞台執行個體也命名為 vid。
- 使用“控制”>“測試影片”運行程式。
在螢幕上,您將看到按照代碼清單所指定的要求操作視頻的結果。
本章中的一些範例程式碼清單除了包括範例程式碼以外,還包括類定義。在這些列表中,除了前幾步之外,在測試 SWF 之前,還需要建立用在樣本中的類。要建立在範例程式碼清單中定義的類,請執行以下操作:
- 請確保已經儲存了將用於測試的 FLA 檔案。
- 從主菜單中選擇“檔案”>“建立”。
- 在“建立文檔”對話方塊的“類型”部分,選擇“ActionScript 檔案”。單擊“確定”建立新的 ActionScript 檔案。
- 將類定義代碼從樣本複製到 ActionScript 文檔中。
- 從主菜單中選擇“檔案”>“儲存”。將該檔案儲存在 Flash 文檔所在的目錄中。檔案名稱應與代碼清單中的類的名稱一致。例如,如果代碼清單定義一個名為“VideoTest”的類,則將 ActionScript 檔案儲存為“VideoTest.as”。
- 返回到 Flash 文檔。
- 使用“控制”>“測試影片”運行程式。
您將在螢幕上看到樣本的結果。
NetStream
| ActionScript 3.0 語言和組件參考 |
|
全部包 | 全部類 | 語言元素 | 索引 | 附錄 | 約定 | 幀 無幀 |
|
| NetStream |
屬性 | 方法 | 事件 | 樣本 |
| |
| 包 |
flash.net |
| 類 |
public class NetStream |
| 繼承 |
NetStream EventDispatcher Object |
| Player 版本 : |
Flash Player 9 |
NetStream 類通過 NetConnection 對象提供的串連,開啟了 Flash Player 與伺服器(例如:Adobe 的 Macromedia Flash Media Server 2 或 Adobe Flex)或 Flash Player 與本地檔案系統之間的單向流串連。 NetStream 對象類似於 NetConnection 對象中的一個通道;這個通道可以使用 NetStream.publish() 發布音頻和/或視頻資料,也可以使用 NetStream.play() 訂閱發行的流並接收資料。 您發行就緒或播放即時資料及先前錄製的資料。 您還可以使用 NetStream 對象向所有已訂閱的用戶端發送簡訊(請參閱 NetStream.send() 方法)。
與在 Flash 文檔中嵌入視頻相比,播放外部 FLV 檔案有多個好處,例如更好的效能和記憶體管理以及獨立的視頻和 Flash 幀頻。 該類提供若干方法和屬性,您可以利用這些方法和屬性在載入和播放檔案時跟蹤其進度,以及便於使用者控制播放(停止或暫停等)。
NetStream 類中的一些屬性和方法主要用於伺服器(例如:Flash Media Server 或 Flex)。 它們可能包含更多的伺服器端功能。 有關其它文檔,請參閱 Flash Media Server documentation中的 NetStream 類。
音頻流或視頻流的一般工作流程。以下步驟總結了發布即時音頻和視頻所需的一般操作順序:
- 建立一個 NetConnection 對象。
- 使用
NetConnection.connect() 方法將應用程式執行個體串連到伺服器。
- 建立一個 NetStream 對象,以便通過該串連建立一個資料流。
- 使用
NetStream.attachAudio() 方法通過該流捕獲和發送音頻,使用 NetStream.attachVideo() 方法通過該流捕獲和發送視頻。
- 使用
NetStream.publish() 方法賦予該流唯一的名稱,並通過該流將資料發送給伺服器,以便其他使用者可以接收到該資料。 您還可以在發布資料的時候進行錄製,以便使用者可以在日後回放該資料。訂閱此流的 SWF 檔案將在調用 play() 時使用傳遞給 publish() 的名稱,並將與發行者調用相同的 NetConnection.connect() 方法。 它們必須調用 Video.attachNetStream() 方法對視頻進行流處理,調用 NetStream.play() 方法播放視頻。
查看樣本
另請參見
flash.media.Video
flash.net.NetConnection
send()
視頻基礎知識 公用 屬性 隱藏繼承的公用屬性 顯示繼承的公用屬性
| |
屬性 |
定義方 |
| |
|
bufferLength : Number [read-only] 資料當前存在於緩衝區中的秒數。 |
NetStream |
| |
|
bufferTime : Number 指定在開始顯示流之前需要多長時間將訊息存入緩衝區。 |
NetStream |
| |
|
bytesLoaded : uint [read-only] 已載入到播放器中的資料的位元組數。 |
NetStream |
| |
|
bytesTotal : uint [read-only] 正載入到播放器中的檔案的總大小(以位元組為單位)。 |
NetStream |
| |
|
checkPolicyFile : Boolean 指定 Flash Player 是否應在開始載入 FLV 檔案之前,嘗試從所載入 FLV 檔案的伺服器下載跨域策略檔案。 |
NetStream |
| |
|
client : Object 指定在其上調用回調方法的對象。 |
NetStream |
| |
|
constructor : Object 對類對象或給定對象執行個體的建構函式的引用。 |
Object |
| |
|
currentFPS : Number [read-only] 每秒顯示的幀的數目。 |
NetStream |
| |
|
liveDelay : Number [read-only] 在即時(未緩衝的)模式下,資料在訂閱流的緩衝區中停留的秒數。 |
NetStream |
| |
|
objectEncoding : uint [read-only] 此 NetStream 對象的對象編碼(AMF 版本)。 |
NetStream |
| |
|
prototype : Object [static] 對類或函數對象的原型對象的引用。 |
Object |
| |
|
soundTransform : SoundTransform 在此 NetStream 對象中控制聲音。 |
NetStream |
| |
|
time : Number [read-only] 播放頭的位置(以秒為單位)。 |
NetStream |
公用 方法 隱藏繼承的公用方法 顯示繼承的公用方法
| |
方法 |
定義方 |
| |
|
NetStream(connection:NetConnection)建立可用於通過指定的 NetConnection 對象播放 FLV 檔案的流。 |
NetStream |
| |
|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 使用 EventDispatcher 對象註冊事件接聽程式對象,以使接聽程式能夠接收事件通知。 |
EventDispatcher |
| |
|
attachAudio(microphone:Microphone):void 指定一個通過 NetStream 對象發送的音頻流,它來自作為源傳遞的 Microphone 對象。 |
NetStream |
| |
|
attachCamera(theCamera:Camera, snapshotMilliseconds:int = -1):void 開始從指定的源捕獲視頻,或者如果 theCamera 被設定為 null,則停止捕獲操作。 |
NetStream |
| |
|
close():void 停止播放流上的所有資料,將 time 屬性設定為 0,並使該流可用於其它用途。 |
NetStream |
| |
|
dispatchEvent(event:Event):Boolean 將事件調度到事件流中。 |
EventDispatcher |
| |
|
hasEventListener(type:String):Boolean 檢查 EventDispatcher 對象是否為特定事件類型註冊了任何接聽程式。 |
EventDispatcher |
| |
|
hasOwnProperty(name:String):Boolean 指示對象是否已經定義了指定的屬性。 |
Object |
| |
|
isPrototypeOf(theClass:Object):Boolean 指示 Object 類的執行個體是否在指定為參數的對象的原型鏈中。 |
Object |
| |
|
pause():void 暫停視頻流的回放。 |
NetStream |
| |
|
play(... arguments):void 開始回放外部音頻或視頻 (FLV) 檔案。 |
NetStream |
| |
|
propertyIsEnumerable(name:String):Boolean 指示指定的屬性是否存在、是否可枚舉。 |
Object |
| |
|
publish(name:String = null, type:String = null):void 將音頻流、視頻流和簡訊流從用戶端發送到伺服器(例如:Flash Media Server 2),並可選擇在傳輸期間記錄該流。 |
NetStream |
| |
|
receiveAudio(flag:Boolean):void 指定傳入的音頻是否在流上播放。 |
NetStream |
| |
|
receiveVideo(flag:Boolean):void 指定傳入的音頻是否將在流上播放。 |
NetStream |
| |
|
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void 從 EventDispatcher 對象中刪除接聽程式。 |
EventDispatcher |
| |
|
resume():void 恢複回放暫停視頻流。 |
NetStream |
| |
|
seek(offset:Number):void 搜尋最接近於指定位置(從流的開始位置算起的位移量,以秒為單位)的主要畫面格。 |
NetStream |
| |
|
send(handlerName:String, ... arguments):void 在指定的流上向所有訂閱用戶端發送一條訊息。 |
NetStream |
| |
|
setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void 設定迴圈操作動態屬性的可用性。 |
Object |
| |
|
togglePause():void 暫停或恢複流的回放。 |
NetStream |
| |
|
toString():String 返回指定對象的字串表示形式。 |
Object |
| |
|
valueOf():Object 返回指定對象的原始值。 |
Object |
| |
|
|