最近因專案需要,要學習live555這個開源平台。live555是用c++實現的,對於該平台的介紹網上有很多文章,以下是個人在讀它原始碼時的記錄,也是乙個初步的理解,和大家一起分享一下。有錯誤,或者不足之處請大家指出。
basicusageenvironment庫
a)
basichashtable.cpp
1.
basichashtable類
功能: 乙個簡單的hash表的實現
small_hash_table_size=4
建構函式basichashtable(int keytype),傳入引數鍵的型別
add(char const* key, void* value) 增加一對鍵值 注:void* 指標,它可以儲存任何型別物件的位址
remove(char const* key) 根據鍵刪除乙個鍵值對
lookup(char const* key) 根據鍵查詢鍵值
numentries() 返回實體數目
hashtable* create(int keytype) hash表的建立
iterator* create(hashtable& hashtable) 返回hash表的迭代器
b)
handlerset.hh (handlerset 的定義)
1.
handlerdescriptor類,控制代碼描述符
int socketnum //socket數量
backgroundhandlerproc* handlerproc //控制代碼後台處理的程序指標
void* clientdata //客戶端資料指標
2.
handlerset類,控制代碼的集合
assignhandler(int socketnum,taskscheduler::backgroundhandlerproc* handlerproc, void* clientdata); //分配控制代碼
removehandler(int socketnum); //根據socket號刪除控制代碼
3.
handleriterator類,控制代碼迭代器
handlerdescriptor* next(); //下乙個控制代碼,沒有則返回null
reset();
c)
delayqueue.hh
1.
delayqueueentry類,延遲佇列實體
long token(); //????
2.
delyqueue類,延遲佇列
addentry(delayqueueentry* newentry); //return a token for the entry
updateentry(delayqueueentry* entry, delayinterval newdelay);
updateentry( long tokentofind, delayinterval newdelay);
removeentry() //移除實體,但是不刪除
delayinterval const& timetonextalarm();
handlealarm();
d)
usageenvironment.hh
1.
usageenvironment類,這是乙個抽象的基類
void reclaim();//**,當沒有剩餘的狀態時,刪除自己
taskscheduler() //任務排程程式
//結果資訊的處理
getresultmsg();
setresultmsg();
setresulterrmsg();
reportbackgrounderror();//用於報告後台預先設定的錯誤的資訊
geterrno(); // 『errno』
usageenvironment& operator<<(); //console output
2.
taskscheduler類,任務排程類,是乙個抽象的基類
virtual tasktoken scheduledelayedtask(nt64_t microseconds, taskfunc* proc,void* clientdata) //當我們下乙個達到排程點的,排程乙個任務(在乙個延遲之後)。(does not delay, if 「microseconds」<=0,)。返回乙個token,可用於以後的unscheduledelaytask()的呼叫。
virtual void unscheduledelayedtask(tasktoken& prevtask); //設定」prevtask」=null(如果prevtask==null,no effect)
virtual void rescheduledelayedtask() //
combines "unscheduledelayedtask()" with "scheduledelayedtask()" (setting "task" to the new task token).
typedef void backgroundhandlerproc(void* clientdata, int mask); // handing sockets reads in the background
virtual void turnonbackgroundreadhandling ()
//開啟後台socket讀取
virtual void turnoffbackgroundreadhandling () //關閉後台socket讀取
virtual void doeventloop(char* watchvariable = null) //
stops the current thread of control from proceeding, but allows delayed tasks (and/or background i/o handling) to proceed.(if "watchvariable" is not null, then we return from this routine when *watchvariable != 0)
live555原始碼分析 live555大致流程
今天大致分析了下live555的流程,以h264為例子進行的分析.從連線到傳送rtp rtcp資料報。首先分析呢,不能太關注細節,先整體再區域性。在分析的過程中,設計到live555自己封裝的乙個高階類 比如迭代器,雜湊表,而且這2個類在live555中運用的範圍還非常的廣,但是無不例外都是用鍊錶進...
live555原始碼學習第二節
live555 原始碼學習第二節 usageenvironment 類學習 usageenvironment 代表了整個系統的執行環境,主要包括錯誤的輸入和輸出。其預設實現主要針對控制台進行輸入和輸出。該類中還儲存了乙個非常重要的資料結構 tasksecheduler 類的引用,這兩個類共同構建了整...
live555原始碼分析 PLAY命令的處理
play命令概述 play命令要求在setup命令之後進行,此命令處理過程中就開始傳送資料了,在處理play命令過程中還建立了rtcpinstance例項。對於play命令請求中的url有以下幾種情況 與pause teardown get parameter set parameter處理是一樣的...