第一百二十章
視頻直播係統的
開發與實踐
從本章節可以學習到:
? 視頻直播係統的界麵與開發
? 獲取Camera對象和Microphone對象
? 發布視頻功能的實現
10.1 視頻直播係統的界麵與開發
在第6章中,我們詳細介紹了視頻直播的原理,並且在第7章實現了一個簡單版本的多人視頻會議係統。本節我們將依照第7章的內容來開發一個用於視頻直播的Flash,並將其和Web部分集成在一起。
直播的Flash需要實現的功能比較簡單:提供一個視頻錄製窗口,用來顯示當前攝像設備的工作情況;提供一個List,用來顯示和選擇當前的視頻設備;提供一個List,用來顯示和選擇當前的音頻設備;提供一個顯示窗口,顯示當前攝像設備的播放情況;提供一個按鈕,用來執行發布;提供一個按鈕,用來停止發布;提供一個文本框,用來提示狀態。界麵如圖10-1所示。
圖10-1
直播部分的Red5服務器端代碼可以直接利用第6章中的red5.sample.videochatsample。
在FLA裏,我們創建一個Video類型的控件,ID為LiveVideo,用來顯示視頻設備;創建一個Video類型的控件,ID為BroadcastVideo,用來顯示視頻播放效果;創建一個List類型的控件,ID為camList,用來顯示當前所有視頻設備;創建一個List類型的控件,ID為micList,用來顯示當前所有音頻設備;創建一個Button類型的控件,ID為PublishBtn,用來執行發布動作;創建一個Label類型的控件,ID為errorLabel,用來顯示錯誤信息。下麵我們來分別實現相關動作和邏輯。
首先創建一個生成GUID的類GUID,用於生成GUID字符串,代碼如下:
import flash.display.Sprite;
import flash.system.Capabilities;
public class GUID extends Sprite {
private static var counter:Number = 0;
function GUID(){
}
public static function create():String {
var dt:Date = new Date();
var id1:Number = dt.getTime();
var id2:Number = Math.random()*Number.MAX_VALUE;
var id3:String = Capabilities.serverString;
var rawID:String = calculate(id1+id3+id2+counter++).toUpperCase();
var finalString:String = rawID.substring(0, 8) + "-" + rawID.substring(8, 12) + "-" + rawID.substring(12, 16) + "-" + rawID.substring(16, 20) + "-" + rawID.substring(20, 32);