Monday, July 24, 2006

Live Media Stream library

前幾天跟幾個老朋友去喝咖啡
他們正在弄media streamming的東西
提到了live555.com這個library

live555這個streamming library
我想有在linux上面用MPlayer或VLC聽live stream的朋友應該不陌生
現在幾乎所有linux上的media player都用這個library來處理streamming

live555是一個C++的library
因此你必須用物件導向來設計你的應用程式
(這幾天mail-list有人在問可否將它弄成C code....ㄏㄏ)

基本上你將要面對4類基本物件:
UsageEnvironment, TaskScheduler, Groupsock與LiveMedia
事實上大多數上列的物件很多都是抽象物件
因此你必須利用繼承來實作出一個成品
UsageEnvironment是最外層物件
說他是最外層的原因是他幾乎是其他物件的wrapper
TaskScheduler負責控制觸發的各項event scheduler
(譬如從網路上接收傳送stream data)
而Groupsock負責處理網路層的部份
如果你的service要處理multicast
你必須在此完成
最後的LiveMedia是各種多媒體類型的處理
(基本虛擬類別為Medium)
目前library中有許多常用支援的格式

另外,library提供了一個基本的繼承物件BasicUsageEnvironment
他利用標準輸出入為io實作一個基本類別(BasicUsageEnvironment與BasicTaskScheduler)
我想這是一個提供你demo或是programming doc的作用
(在Open Source世界中,期待有類似MSDN的網頁是不常見的,demo code比較實在)
因此測試程式多用BasicUsageEnvironment
你可以自己去實現自己的streamming環境

利用這個library可以讓你省卻很多功夫而可以輕鬆完成你的stream server(或client)
他是很棒的一個project
我覺得遺憾的是他並不是非常general
某些地方原本以為他會更以STL的style來完成
但是卻沒有
譬如在BasicUsageEnvironment中的HandlerSet
一開始看到code來以為他用STL iterator來做泛型化
不過後來發現他只是一個C++ link-list的wrapper
或許因為這只是個demo功用的物件吧
(泛型化一開始會把事情弄的很複雜...ㄏㄏ)

Anyway....如果你對於network media streamming有興趣
這個絕對是一個可以選擇的Project

No comments: