OpenCore 的代碼結構

OpenCore的代碼結構

?

以開源Android 的代碼為例,Open Core 的代碼在Android 代碼的External/Opencore 目錄

中。這個目錄是OpenCore 的根目錄,其中包含的子目錄如下所示:

android:這里面是一個上層的庫,它基于PVPlayer 和PVAuthor 的SDK 實現了一個為

Android 使用的Player 和Author。

baselibs:包含數據結構和線程安全等內容的底層庫。

codecs_v2:這是一個內容較多的庫,主要包含編解碼的實現,以及一個OpenMAX的實現。

engines:包含PVPlayer 和PVAuthor 引擎的實現。

extern_libs_v2:包含了khronos的OpenMAX 的頭文件。

fileformats:文件格式的解析(parser)工具。

nodes:提供一些PVMF 的NODE,主要是編解碼和文件解析方面的。

oscl:操作系統兼容庫。

pvmi:輸入輸出控制的抽象接口。

protocols:主要是與網絡相關的RTSP、RTP、HTTP 等協議的相關內容。

pvcommon:pvcommon 庫文件的Android.mk 文件,沒有源文件。

pvplayer:pvplayer 庫文件的Android.mk 文件,沒有源文件。

pvauthor:pvauthor 庫文件的Android.mk 文件,沒有源文件。

tools_v2:編譯工具以及一些可注冊的模塊。

?

在external/opencore/目錄中還有2 個文件,如下所示:

Android.mk:全局的編譯文件

pvplayer.conf:配置文件

在external/opencore/的各個子文件夾中包含了眾多的Android.mk 文件,它們之間還存在

著“遞歸”的關系。例如根目錄下的Android.mk,就包含了如下的內容片斷:

include $(PV_TOP)/pvcommon/Android.mk

include $(PV_TOP)/pvplayer/Android.mk

include $(PV_TOP)/pvauthor/Android.mk

這表示了要引用pvcommon,pvplayer 和pvauthor等文件夾下面的Android.mk 文件。

external/opencore/的各個Android.mk 文件可以按照排列組合進行使用,將幾個Android.mk

內容合并在一個庫當中。

?

OpenCore 的編譯結構

1、庫的層次關系:在Android 的開源版本中編譯出來的內容,OpenCore 編譯出來的各個庫如

下所示:

libopencoreauthor.so:OpenCore 的Author 庫

libopencorecommon.so:OpenCore 底層的公共庫

libopencoredownloadreg.so:下載注冊庫

libopencoredownload.so:下載功能實現庫

libopencoremp4reg.so:MP4 注冊庫

libopencoremp4.so:MP4 功能實現庫

libopencorenet_support.so:網絡支持庫

libopencoreplayer.so:OpenCore 的Player 庫

libopencorertspreg.so:RTSP 注冊庫

libopencorertsp.so:RTSP 功能實現庫

這些庫的層次關系如下圖所示:

?

OpenCore 的各個庫之間具有如下的關系:

1)libopencorecommon.so 是所有的庫的依賴庫,提供了公共的功能;

2)libopencoreplayer.so 和libopencoreauthor.so是兩個并立的庫,分別用于回放和

記錄,而且這兩個庫是OpenCore 對外的接口庫;

3)libopencorenet_support.so 提供網絡支持的功能;

一些功能以插件(Plug-In)的方式放入Player 中使用,每個功能使用兩個庫,一個實現具體

功能,一個用于注冊。

2、libopencorecommon.so 庫的結構

libopencorecommon.so 是整個OpenCore的核心庫, 它的編譯控制的文件的路徑為

pvcommon/Android.mk,這個文件使用遞歸的方式尋找子文件:include $(BUILD_SHARED_LIBRARY)

include$(PV_TOP)//oscl/oscl/osclbase/Android.mk

include$(PV_TOP)//oscl/oscl/osclerror/Android.mk

include $(PV_TOP)//oscl/oscl/osclmemory/Android.mk

include$(PV_TOP)//oscl/oscl/osclutil/Android.mk

include $(PV_TOP)//oscl/pvlogger/Android.mk

include$(PV_TOP)//oscl/oscl/osclproc/Android.mk

include$(PV_TOP)//oscl/oscl/osclio/Android.mk

include $(PV_TOP)//oscl/oscl/osclregcli/Android.mk

include$(PV_TOP)//oscl/oscl/osclregserv/Android.mk

include$(PV_TOP)//oscl/unit_test/Android.mk

include$(PV_TOP)//oscl/oscl/oscllib/Android.mk

include $(PV_TOP)//pvmi/pvmf/Android.mk

include$(PV_TOP)//baselibs/pv_mime_utils/Android.mk

include$(PV_TOP)//nodes/pvfileoutputnode/Android.mk

include$(PV_TOP)//baselibs/media_data_structures/Android.mk

include$(PV_TOP)//baselibs/threadsafe_callback_ao/Android.mk

include$(PV_TOP)//codecs_v2/utilities/colorconvert/Android.mk

include $(PV_TOP)//codecs_v2/audio/gsm_amr/amr_nb/common/Android.mk

include$(PV_TOP)//codecs_v2/video/avc_h264/common/Android.mk

這些被包含的Android.mk 文件真正指定需要編譯的文件,這些文件在Android.mk 的目錄及

其子目錄中。事實上,在libopencorecommon.so 庫中包含了以下內容:

1)OSCL 的所有內容

2)Pvmf 框架部分的內容(pvmi/pvmf/Android.mk)

3)基礎庫中的一些內容(baselibs)

4)編解碼的一些內容

5)文件輸出的node(nodes/pvfileoutputnode/Android.mk)

從庫的結構中可以看出, 最終生成庫的結構與OpenCore 的層次關系并非完全重合。

libopencorecommon.so 庫中就包含了底層的OSCL的內容、PVMF 的框架以及Node 和編解碼的工具。

3、libopencoreplayer.so 庫的結構

libopencoreplayer.so 是用于播放的功能庫, 它的編譯控制的文件的路徑為

pvplayer/Android.mk,它包含了以下的內容:

include $(BUILD_SHARED_LIBRARY)

include$(PV_TOP)//engines/player/Android.mk

include$(PV_TOP)//codecs_v2/audio/aac/dec/util/getactualaacconfig/Android.mk

include$(PV_TOP)//codecs_v2/video/avc_h264/dec/Android.mk

include $(PV_TOP)//codecs_v2/audio/aac/dec/Android.mk

include$(PV_TOP)//codecs_v2/audio/gsm_amr/amr_nb/dec/Android.mk

include$(PV_TOP)//codecs_v2/audio/gsm_amr/amr_wb/dec/Android.mk

include$(PV_TOP)//codecs_v2/audio/gsm_amr/common/dec/Android.mk

include $(PV_TOP)//codecs_v2/audio/mp3/dec/Android.mk

include$(PV_TOP)//codecs_v2/utilities/m4v_config_parser/Android.mk

include$(PV_TOP)//codecs_v2/utilities/pv_video_config_parser/Android.mk

include$(PV_TOP)//codecs_v2/omx/omx_common/Android.mk

include $(PV_TOP)//codecs_v2/omx/omx_queue/Android.mk

include$(PV_TOP)//codecs_v2/omx/omx_h264/Android.mk

include$(PV_TOP)//codecs_v2/omx/omx_aac/Android.mk

include$(PV_TOP)//codecs_v2/omx/omx_amr/Android.mk

include$(PV_TOP)//codecs_v2/omx/omx_mp3/Android.mk

include $(PV_TOP)//codecs_v2/omx/factories/omx_m4v_factory/Android.mk

include$(PV_TOP)//codecs_v2/omx/omx_proxy/Android.mk

include $(PV_TOP)//nodes/common/Android.mk

include$(PV_TOP)//pvmi/content_policy_manager/Android.mk

include$(PV_TOP)//pvmi/content_policy_manager/plugins/oma1/passthru/Android.mk

include$(PV_TOP)//pvmi/content_policy_manager/plugins/common/Android.mk

include$(PV_TOP)//pvmi/media_io/pvmiofileoutput/Android.mk

include$(PV_TOP)//fileformats/common/parser/Android.mk

include $(PV_TOP)//fileformats/id3parcom/Android.mk

include$(PV_TOP)//fileformats/rawgsmamr/parser/Android.mk

include$(PV_TOP)//fileformats/mp3/parser/Android.mk

include$(PV_TOP)//fileformats/mp4/parser/Android.mk

include$(PV_TOP)//fileformats/rawaac/parser/Android.mk

include $(PV_TOP)//fileformats/wav/parser/Android.mk

include$(PV_TOP)//nodes/pvaacffparsernode/Android.mk

include$(PV_TOP)//nodes/pvmp3ffparsernode/Android.mk

include$(PV_TOP)//nodes/pvamrffparsernode/Android.mk

include$(PV_TOP)//nodes/pvmediaoutputnode/Android.mk

include$(PV_TOP)//nodes/pvomxvideodecnode/Android.mk

include$(PV_TOP)//nodes/pvomxaudiodecnode/Android.mk

include$(PV_TOP)//nodes/pvwavffparsernode/Android.mk

include$(PV_TOP)//pvmi/recognizer/Android.mk

include$(PV_TOP)//pvmi/recognizer/plugins/pvamrffrecognizer/Android.mk

include$(PV_TOP)//pvmi/recognizer/plugins/pvmp3ffrecognizer/Android.mk

include$(PV_TOP)//pvmi/recognizer/plugins/pvwavffrecognizer/Android.mk

include$(PV_TOP)//engines/common/Android.mk

include$(PV_TOP)//engines/adapters/player/framemetadatautility/Android.mk

include$(PV_TOP)//protocols/rtp_payload_parser/util/Android.mk

include $(PV_TOP)//android/Android.mk

include$(PV_TOP)//android/drm/oma1/Android.mk

include$(PV_TOP)//tools_v2/build/modules/linux_rtsp/core/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_rtsp/node_registry/Android.mk

include$(PV_TOP)//tools_v2/build/modules/linux_net_support/core/Android.mk

include$(PV_TOP)//tools_v2/build/modules/linux_download/core/Android.mk

include $(PV_TOP)//tools_v2/build/modules/linux_download/node_registry/Android.mk

include$(PV_TOP)//tools_v2/build/modules/linux_mp4/core/Android.mk

include$(PV_TOP)//tools_v2/build/modules/linux_mp4/node_registry/Android.mk

libopencoreplayer.so 中包含了以下內容:

1)一些解碼工具

2)文件的解析器(mp4)

3)解碼工具對應的Node

4)player 的引擎部分(engines/player/Android.mk)

5)為Android 的player 適配器(android/Android.mk)

6)識別工具(pvmi/recognizer)

7)編解碼工具中的OpenMax 部分(codecs_v2/omx)

8)對應幾個插件Node 的注冊

libopencoreplayer.so 中的內容較多,其中主要為各個文件解析器和解碼器,PVPlayer 的核心功能在engines/player/Android.mk 當中,而android/Android.mk 的內容比較特殊,它是在PVPlayer 之上構建的一個為Android 使用的播放器。

4、libopencoreauthor.so 庫的結構

libopencoreauthor.so 是用于媒體流記錄的功能庫, 它的編譯控制的文件的路徑為

pvauthor/Android.mk,它包含了以下的內容:

include $(BUILD_SHARED_LIBRARY)

include$(PV_TOP)//engines/author/Android.mk

include $(PV_TOP)//codecs_v2/video/m4v_h263/enc/Android.mk

include$(PV_TOP)//codecs_v2/audio/gsm_amr/amr_nb/enc/Android.mk

include$(PV_TOP)//codecs_v2/video/avc_h264/enc/Android.mk

include$(PV_TOP)//fileformats/mp4/composer/Android.mk

include $(PV_TOP)//nodes/pvamrencnode/Android.mk

include$(PV_TOP)//nodes/pvmp4ffcomposernode/Android.mk

include$(PV_TOP)//nodes/pvvideoencnode/Android.mk

include$(PV_TOP)//nodes/pvavcencnode/Android.mk

include$(PV_TOP)//nodes/pvmediainputnode/Android.mk

include $(PV_TOP)//android/author/Android.mk

libopencoreauthor.so 中包含了以下內容:

1)一些編碼工具(視頻流H263、H264,音頻流Amr)

2)文件的組成器(mp4)

3)編碼工具對應的Node

4)表示媒體輸入的Node(nodes/pvmediainputnode/Android.m)

5)author 的引擎部分(engines/author/Android.mk)

6)為Android 的author 適配器(android/author/Android.mk)

libopencoreauthor.so 中主要為各個文件編碼器和文件組成器,PVAuthor 的核心功能在

engines/author/Android.mk 當中,而android/author/Android.mk 是在PVAuthor 之上構建的一個為Android 使用的媒體記錄器。

5、其他庫

另外的幾個庫的Android.mk 文件的路徑如下所示:

網絡支持庫libopencorenet_support.so:

tools_v2/build/modules/linux_net_support/core/Android.mk

MP4 功能實現庫libopencoremp4.so 和注冊庫libopencoremp4reg.so:

tools_v2/build/modules/linux_mp4/core/Android.mk

tools_v2/build/modules/linux_mp4/node_registry/Android.mk

RTSP 功能實現庫libopencorertsp.so 和注冊庫libopencorertspreg.so:

tools_v2/build/modules/linux_rtsp/core/Android.mk

tools_v2/build/modules/linux_rtsp/node_registry/Android.mk

下載功能實現庫libopencoredownload.so 和注冊庫libopencoredownloadreg.so:

tools_v2/build/modules/linux_download/core/Android.mk

tools_v2/build/modules/linux_download/node_registry/Android.mk

?


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453783.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習之卷積神經網絡 GoogleNet

GoogLeNet Incepetion V1 這是GoogLeNet的最早版本,出現在2014年的《Going deeper with convolutions》。之所以名為“GoogLeNet”而非“GoogleNet”,文章說是為了向早期的LeNet致敬。 深度學習以及神經網絡快速發展,人們不再只關注更給力的硬件、更大…

名詞解釋 算法的有限性_數據結構與算法期中考試卷(含答案)

玉林師范學院期中課程考試試卷(2010——2011學年度第一學期)命題教師:劉恒 命題教師所在系:數計系 課程名稱:數據結構與算法 考試專業:信計 考試年級:09級一、單項選擇題(每題2分,共30分,把正確…

Jzoj4348 打擊目標

又是被水題坑了。。。 一直想不出來看題解說要什么主席樹,于是開始打離線算法 結果打到一半發現要強制在線。。No!!! 發現直接AC自動機似乎可做?樹剖之后在AC自動機上跑的時候判斷一下不就好了嗎!連線段樹都不要 讓后快樂切掉,速度還可以&…

深度學習之卷積神經網絡 VGGNet

2014年,牛津大學計算機視覺組(Visual Geometry Group)和Google DeepMind公司的研究員一起研發出了新的深度卷積神經網絡:VGGNet,并取得了ILSVRC2014比賽分類項目的第二名(第一名是GoogLeNet,也是…

SpringMVC 返回json的兩種方式

前后臺數據交互使用json是一種很重要的方式.本文主要探討SpringMVC框架使用json傳輸的技術. 請注意,本文所提到的項目使用Spring 版本是4.1.7,其他版本在具體使用上可能有不一樣的情況. 一、最常見——使用RequestBody的注解返回一個實體對象; 使用方式如下: 1:引入jar包&#…

word上怎么把圖片拼接到一起_如何用Word把自己插入的兩張圖片合在一起?

例如上面效果的設置方法:1、單擊插入----圖片按鈕;2、彈出插入圖片對話框,按住Ctrl鍵,同時選擇所需要的圖片;3、選中圖片,單擊圖片工具格式----文字環繞----緊密型環繞;4、此時,用鼠…

深度學習之卷積神經網絡 ResNet

論文 Identity Mappings in Deep Residual Networks 2015年,ResNet(Residual Neural Network)由微軟研究院的Kaiming He等四名華人提出,并在ILSVRC2015比賽中取得冠軍,在top5上的錯誤率為3.57%,同時參數量…

按照RFC3984協議實現H264視頻流媒體 RTSP H264

轉自:http://topic.csdn.net/u/20100104/16/0fd992e8-b0a6-4c2b-85a4-d9513d3b1491.html 相信有不少人和我一樣,希望實現H264格式視頻的流媒體播放。但是對于一個新手來說,往往不知道從何入手。利用百度,GOOGLE等搜索資料真是沙里…

搭建SSM框架之Spring

作為一枚大四準備畢業的學生,最重要的事便是畢業設計,前些日子剛剛拿到畢設題目:“3D網絡圖:面向網絡結構數據的可視化軟件設計”,(⊙o⊙)…,怎么說哪,看到題目就是一頭霧水(前幾屆不…

audio unity 加速_淺談Unity中Android、iOS音頻延遲

在Unity上面做音游,當在移動端實機運行起來,會發現,音頻的發出會有一定的延遲,無論是長音效還是短音效,Unity內置的Audio內部使用的是FMOD,有以下手段改善通過設置稍微改善其延遲的問題Edit → Project Set…

深度學習之 hard negative mining (難例挖掘)

Hard Negative Mining Method 思想 hard是困難樣本,negative是負樣本,hard negative就是說在對負樣本分類時候,loss比較大(label與prediction相差較大)的那些樣本,也可以說是容易將負樣本看成正樣本的那些…

單列表_使用Excel中的quot;記錄單quot;功能快速錄入數據

在Excel中進行數據錄入的時候,平常都是一行一行地錄入數據,但是有時候在單元格之間,行與行,列與列之間頻繁地切換去錄入數據,費事費力還容易出錯。今天給你推薦一個既好用又有效率的Excel中的隱藏功能——“記錄單”。…

CentOS 6.9下的Setup工具(用于管理服務/防火墻/網絡配置/驗證服務)

說明:Setup工具套件好像是CentOS下特有的用于管理服務/防火墻/網絡配置等,其實就是基于命令行模式界面的GUI工具。唯一特點就是方便。 安裝: #安裝Setup命令工具 yum -y install setuptool #安裝Setup工具配套的系統服務組件 yum -y insta…

wireshark解析rtp協議,流媒體中的AMR/H263/H264包的方法

原文教程:http://hi.baidu.com/zjxiaoyu3/blog/item/22f9f18f32b45de5f11f3670.html 抓到完整的流媒體包之后,用wireshark打開,其中的包可能不會自動映射成RTP+AMR/H263/H264的包,做如下修改操作…

深度學習之非極大值抑制(Non-maximum suppression,NMS)

非極大值抑制(Non-maximum suppression,NMS)是一種去除非極大值的算法,常用于計算機視覺中的邊緣檢測、物體識別等。 算法流程 給出一張圖片和上面許多物體檢測的候選框(即每個框可能都代表某種物體)&…

148. 顏色分類

給定一個包含紅,白,藍且長度為 n 的數組,將數組元素進行分類使相同顏色的元素相鄰,并按照紅、白、藍的順序進行排序。 我們可以使用整數 0,1 和 2 分別代表紅,白,藍。 注意事項 不能使用代碼庫中…

vue項目token放在哪里_關于vue動態菜單的那點事

vue-element-admin4.0國內節點訪問地址:https://panjiachen.gitee.io/vue-element-admin-site/zh/本此使用的是https://github.com/PanJiaChen/vue-element-admin/tree/i18n 國際化分支的版本。說是除了國際化其他都一樣。本文主要介紹前臺動態的使用資源權限。后臺…

H264學習方法歷程資料

我的H.264學習歷程 半年前,我知道了H.264這個名詞。那個時候決定學習H.264,可是我連資料都不知道如何收集。而且整個學校就只有我一個人在學習H.264, 找不到人交流,所以那個時候學得真的是舉步維艱,很痛苦&#xff0c…

深度學習之 ROI Pooling

什么是ROI? ROI是 Region of interest 的簡寫,指的是 Faster R-CNN 結構中,經過 RPN 層后,產生的 proposal 對應的 box 框。 ROI Pooling 顧名思義,是 pooling 層的一種,而且是針對 ROIs 的 pooling。整個…

KD樹小結

很久之前我就想過怎么快速在二維平面上查找一個區域的信息,思考許久無果,只能想到幾種優秀一點的暴力。 KD樹就是干上面那件事的。 別的不多說,趕緊把自己的理解寫下來,免得涼了。 KD樹的組成 以維護k維空間(x,y,……)內的KD樹為例…