天天看點

libdvbpsi源碼分析(一)架構分析

    源碼層次目錄如下所示:

libdvbpsi源碼分析(一)架構分析

其中:

psi.c: psi section structure

dvbpsi.c: 抽象成DVB/PSI decoders,封裝出接口,供應用層調用。

descriptor.c: 各種描述符資料的抽象

demux.c: 解複用器

descriptor/: 各種描述符的解析

tables/: 各種psi子表解析的具體實作

      每個解碼器被劃分成兩個實體:即the PSI decoder和the specific decoder。之是以如此劃分的原因是,每個psi表的section都有相同的格式。解碼器結構如圖1所示:

libdvbpsi源碼分析(一)架構分析

                                                      圖1:解碼器結構

     PSI解碼器:主要任務就是擷取應用層提供的ts流資料包( STB則是根據底層的解碼器晶片擷取ts流),并将完整的psi section(段)發送給專用的解碼器解析。對于不連續的ts流,PSI解碼器也必須穩定可靠的工作,并将ts流交給專用的解碼器處理。

    專用解碼器(specific decoder):主要任務就是根據psi解碼器提供的psi sections,重建完整的表(PSI/SI)并将 他們傳回給應用層處理(STB通常是存入相應的database),同時還要根據psi decoder的訓示去檢查ts的完整性(作CRC校驗)。如果不完整,則傳回錯誤。

    PSI decoder可了解為對每個具體專用解碼器相同特征或行為的抽象,也就是抽象出一個類:decoder,而每個具體的decoder則是具體的類的對象或執行個體,是以要具體實作。用C語言的解釋就是抽象出decoder的接口(Interface),要使用哪個解碼器則傳入不同的回調函數/函數指針(callback)。

   (注:從這裡可以看到,函數指針是實作多态的手段,而多态就是隔離變化的秘訣)

版權聲明:本文為CSDN部落客「weixin_33836223」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33836223/article/details/92632666