OpenCore框架概述
OpenCore是一個多媒體的框架,從宏觀上來看,它主要包含了兩大方面的內容:PVPlayer:提供媒體播放器的功能,完成各種音頻 (Audio)、視頻(Video)流的回放(Playback)功能。PVAuthor:提供媒體流記錄的功能,完成各種音頻(Audio)、視頻 (Video)流的捕獲(Recording)功能PVPlayer和PVAuthor以SDK的形式提供給開發者,可以在這個SDK之上構建多種應用程 序和服務。在移動終端中常常使用的多媒體應用程序,例如媒體播放器、照相機、錄像機、錄音機等等。
OpenCore的層次結構圖:
OpenCore是一個多媒體的框架,從宏觀上來看,它主要包含了兩大方面的內容:
OSCL(Operating System Compatibility Library,操作系統兼容層)
PVMF(PacketVideo Multimedia Framework,PV多媒體框架) 文件解析(parser)和組成(composer)兩個部分 編解碼部分
NODEs(節點)
Player Engine(播放器引擎)
Author Engine(作者引擎)
OpenCore中包含的內容非常多:從播放的角度,PVPlayer 的輸入的(Source)是文件或者網絡媒體流,輸出(Sink)是音頻視頻的輸出設備,其基本功能包含了媒體流控制、文件解析、音頻視頻流的解碼 (Decode)等方面的內容。除了從文件中播放媒體文件之外,還包含了與網絡相關的RTSP流(RealTime Stream Protocol,實時流協議)。在媒體流記錄的方面,PVAuthor 的輸入的(Source)是照相機、麥克風等設備,輸出(Sink)是各種文件, 包含了流的同步、音頻視頻流的編碼(Encode)以及文件的寫入等功能。在使用OpenCore 的SDK的時候,有可能需要在應用程序層實現一個適配器(Adaptor),然后在適配器之上實現具體的功能,對于PVMF的NODE也可以基于通用的接 口,在上層實現,以插件的形式使用。
OpenCore的OSCL部分:
OSCL,全稱為Operating System Compatibility Library (操作系統兼容庫),它包含了一些在不同操作系統中移植層的功能,它的在OpenCore oscl/oscl目錄中,一般每一個目錄表示一個模塊。OSCL對應的功能是非常細致的,幾乎對C語言中每一個細節的功能都進行封裝,并使用了C++的 接口提供給上層使用。事實上,OperCore中的PVMF、Engine部分都在使用OSCL,而整個OperCore的調用者也需要使用OSCL。
OpenCore的文件格式和編解碼部分:
1.文件格式的處理部分:
OpenCore有關文件格式處理和編解碼部分兩部分的內容,分別在目錄fileformats和codecs_v2當中。這兩部分都屬于基礎性的 功能,不涉及具體的邏輯,因此它們被別的模塊調用來使用。文件格式處理有兩種類型,一種是parser(解析器),另一種是composer(組成器)。 其代碼的目錄為fileformats的目錄,其中包含mp3,mp4,wav等子目錄。其中包含了AVI,mp3,mp4,wav等多種文件的解析器和 組成器,各個目錄中對應的是不同的文件格式等。
fileformats的目錄結構如下所示:
fileformats
|-- avi
| `-- parser
|-- common
| `-- parser
|-- id3parcom
| |-- Android.mk
| |-- build
| |-- include
| `-- src
|-- mp3
| `-- parser
|-- mp4
| |-- composer
| `-- parser
|-- rawaac
| `-- parser
|-- rawgsmamr
| `-- parser
`-- wav
`-- parser
2.編解碼部分:
目錄結構如下所示:
codecs_v2
|-- audio
| |-- aac
| |-- gsm_amr
| |-- mp3
| `-- sbc
|-- omx
| |-- factories
| |-- omx_aac
| |-- omx_amr
| |-- omx_common
| |-- omx_h264
| |-- omx_m4v
| |-- omx_mp3
| |-- omx_proxy
| `-- omx_queue
|-- utilities
| |-- colorconvert
| |-- m4v_config_parser
| `-- pv_video_config_parser
`-- video
|-- avc_h264
`-- m4v_h263
編解碼部分主要針對Audio和Video的軟件編解碼,其目錄為codecs_v2,其中包含了audio、omx 、utilities、video等幾個目錄。在audio 和video目錄中,對應了針對各種流的子目錄,其中可能包含dec和enc兩個目錄,分別對應解碼和編碼。
`-- video
|-- avc_h264| |-- common
| |-- dec
| |-- enc
|
-- patent_disclaimer.txt <br />
-- m4v_h263 |-- dec
|-- enc
`-- patent_disclaimer.txt
codecs_v2目錄的子目錄omx實現了一個khronos OpenMAX的功能。OpenMAX是一個多媒體應用程序的框架標準,由NVIDIA公司和Khronos在2006年推出。OpenMAX IL 1.0
(集成層)技術規格定義了媒體組件接口,以便在嵌入式器件的流媒體框架中快速集成加速式編解碼器。OpenMAX的設計實現可以讓具有硬件編輯碼功能的平臺
提供統一的接口和框架,在OpenMAX中可以直接使用硬件加速的進行編解碼乃至輸出的功能,對外保持統一的接口。此處的OpenMAX則是基于一個純軟件的實現,其實現的代碼即是調用這里的video和audio目錄中的軟件編輯碼的代碼。
OpenCore Node介紹:
Node是OpenCore中基本的功能模塊,OpenCore本身提供了一些Node,也可以由上層軟件來實現。本身提供的Node在 OpenCore的nodes目錄中。OpenCore的Node主要分成三個類型:編解碼的Node,文件格式的Node,輸入輸出模塊的Node。OpenCore Player介紹:
OpenCore的Player的編譯文件是pvplayer/Android.mk,將生成動態庫文件 libopencoreplayer.so。這個庫包含了兩方面的內容:一方是Player的engine(引擎),一方面是為Android構件的 Player,這實際上是一個適配器(adapter)。
libopencoreplayer.so中包含了以下內容:
一些解碼工具;
文件的解析器(MP4);
解碼工具對應的Node;
Player的引擎部分(編譯文件:engines/player/Android.mk);
為Android構建的Player適配器(編譯文件:android/Android.mk);
識別工具(pvmi/recognizer);
編解碼工具中的OpenMAX部分(codecs_v2/omx);
對應插件Node的注冊。
libopencoreplayer.so中的內容較多,其中主要為各個文件解析器和解碼器,PVPlayer的核心功能在engines/player /Android.mk當中;而android/Android.mk的內容比較特殊,它是在PVPlayer之上構建的一個為Android使用的播放 器。
OpenCore的Player Engine具有清晰明確的接口,在這個接口上,不同的系統可以根據情況實現不同的Player。位于OpenCore中的engines/player /目錄下,其中,engines/player/include目錄中保存的是接口頭文件,engines/player/src目錄中保存是源文件和私 有頭文件 。
Player Engine的類結構:


為接口,源文件為主要的具體實現pvauthorengine.cpp。

PVAuthor 的結構:

PVAuthor 的類的結構:
