先對live555有乙個巨集觀的認識,為今後的實戰打個基礎。
livemedia
專案的源**包含四個主要的庫,各種測試**以及
ive555 media server
。四個主要的庫各自是
usageenvironment&taskscheduler
,groupsock
,livemedia
,basicusageenvironment。
這幾個類都是整個系統的基礎功能類,這些都是抽象類,在應用程式中基於這些類實現自己的子類。
usageenvironment:代表了整個系統執行的環境,它提供了錯誤記錄、報告和log輸出的功能,不管哪乙個類要輸出錯誤,就須要儲存usageenvironment的指標(比如:能夠通過
usageenvironment* env;
usageenvironment* env =basicusageenvironment::createnew(*scheduler);
*env << "play this stream usingthe url \"
這樣的操作能夠實現log的輸出。
taskscheduler:則提供了任務排程功能.整個程式的執行發動機就是它,它排程任務。執行任務(任務就是乙個函式).taskscheduler因為在全域性中僅僅有乙個,所以儲存在了usageenvironment中.而全部的類又都儲存了usageenvironment的指標。所以誰想把自己的任務增加排程中,那是非常easy的.
在此還看到乙個結論:整個live555(服務端)僅僅有乙個執行緒.當然如今有網友已經實現了服務端的多執行緒.
groupsock:類是對網路介面的封裝。用於收發資料報。
groupsock的兩個成員變數destrecord* fdests和directednetinte***ceset fmembers都表示目的位址集和。但我始終看不出directednetinte***ceset fmembers有什麼用,且directednetinte***ceset是乙個沒有被繼承的虛類,看起來fmembers沒有什麼用。僅fdesk也夠用了,在adddestination()和removedestination()函式中就是操作fdesk。增加或刪除目的位址。
basicusageenvironment:主要是針對簡單的控制台應用程式,利用select實現事件獲取和處理。
hashtable:實現了哈稀表.
delayqueue:譯為"延遲佇列",它是乙個佇列,每一項代表了乙個要排程的任務(在它的ftoken變數中儲存).同一時候儲存了這個任務離執行時間點的剩餘時間.能夠預見,它就是在taskscheduler中用於管理排程任務的東西.注意,此佇列中的任務僅僅被執行一次!執行完後這一項即被拋棄!
handlerset:handler集合.handler是什麼呢?它是一種專門用於執行socket操作的任務(函式),handlerset被taskscheduler用來管理全部的socket任務(增刪改查).所以taskscheduler中如今已排程兩種任務了:socket
任務(handlerset
)和延遲任務
(delayqueue).事實上taskscheduler還排程第三種任務:event,後面再說.
以上各關係見例如以下uml圖:
: 庫中有一系列類,基類是
medium
,這些類針對不同的流**型別和編碼。
這裡還要再說明一下sink source,這兩者的概念及關係:
livemedia庫中sink就是消費資料的物件,比方把接收到的資料儲存到檔案,這個檔案就是乙個sink。
source就是生產資料的物件。比方通過 rtp讀取資料。資料流經過多個source和sinks。
繼承medium
基類的類,及他們間的關係見例如以下
uml圖:
到此,我們已經對live555基類和框架有了乙個初步的認識。這對我們今後將live555靈活運用到實際專案中起了至關關鍵的資料。
live555原始碼分析 live555大致流程
今天大致分析了下live555的流程,以h264為例子進行的分析.從連線到傳送rtp rtcp資料報。首先分析呢,不能太關注細節,先整體再區域性。在分析的過程中,設計到live555自己封裝的乙個高階類 比如迭代器,雜湊表,而且這2個類在live555中運用的範圍還非常的廣,但是無不例外都是用鍊錶進...
Live555學習筆記
live555原始碼 官網 關於live555編譯 linux編譯 1.進入live555目錄 cd live 2.執行genmakefiles檔案 genmakefiles linux 3.makefile windows編譯 無關於入口函式 標頭檔案位置 無 原始檔位置 mediaserver ...
Live555學習筆記
前一陣子,因為專案需要,研究了一下live555開源框架,研究的不是很深入,基本上把live555當做api用了一下,但是畢竟也是本人看的第乙個開源框架,在此記錄總結一下。主要使用其中的四個目錄,分別對應live555的四個庫 usageenvironment目錄,生成的靜態庫為libusageen...