live555原始碼初步解析(一)

2021-06-16 05:09:25 字數 3115 閱讀 8677

最近因專案需要,要學習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處理是一樣的...