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所示:
spa

                                                      圖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)。
   (注:從這裏能夠看到,函數指針是實現多態的手段,而多態就是隔離變化的祕訣
相關文章
相關標籤/搜索