Live555 實戰之框架簡單介紹

2021-08-10 11:32:09 字數 2278 閱讀 4928

先對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...