第一百二十章(1 / 3)

第一百二十章

視頻直播係統的

開發與實踐

從本章節可以學習到:

? 視頻直播係統的界麵與開發

? 獲取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);