Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 中級開發 >> Android的多媒體框架OpenCore介紹(1)

Android的多媒體框架OpenCore介紹(1)

編輯:中級開發

本文為個人總結,不代表官方觀點。

  分為幾個階段:

  1、整個android的多媒體框架OpenCore

  2、Player和Author的詳細介紹

  2、OpenCore和android其他部分的集成

  第一部分 OpenCore概述:

  OpenCore的另外一個常用的稱呼是PacketVideo,它是Android的多媒體核心。事實上,PacketVideo是一家公司的名稱,而OpenCore是這套多媒體框架的軟件層的名稱。在Android的開發者中間,二者的含義基本相同。對比android的其它程序庫,OpenCore的代碼非常龐大,它是一個基於C++的實現,定義了全功能的操作系統移植層,各種基本的功能均被封裝成類的形式,各層次之間的接口多使用繼承等方式。

  OpenCore是一個多媒體的框架,從宏觀上來看,它主要包含了兩大方面的內容:

  PVPlayer:提供媒體播放器的功能,完成各種音頻(Audio)、視頻(Video)流的回放(Playback)功能

  PVAuthor:提供媒體流記錄的功能,完成各種音頻(Audio)、視頻(Video)流的以及靜態圖像捕獲功能

  PVPlayer和PVAuthor以SDK的形式提供給開發者,可以在這個SDK之上構建多種應用程序和服務。在移動終端中常常使用的多媒體應用程序,例如媒體播放器、照相機、錄像機、錄音機等等。

  為了更好的組織整體的架構,OpenCore在軟件層次在宏觀上分成幾個層次:

  

  OSCL:Operating System Compatibility Library (操作系統兼容庫),包含了一些操作系統底層的操作,為了更好地在不同操作系統移植。包含了基本數據類型、配置、字符串工具、IO、錯誤處理、線程等內容,類似一個基礎的C++庫。

  PVMF:PacketVideo Multimedia Framework(PV多媒體框架),在框架內實現一個文件解析(parser)和組成(composer)、編解碼的NODE,也可以繼承其通用的接口,在用戶層實現一些NODE。

  PVPlayer Engine:PVPlayer引擎。

  PVAuthor Engine:PVAuthor引擎。

  事實上,OpenCore中包含的內容非常多:從播放的角度,PVPlayer的輸入的(Source)是文件或者網絡媒體流,輸出(Sink)是音頻視頻的輸出設備,其基本功能包含了媒體流控制、文件解析、音頻視頻流的解碼(Decode)等方面的內容。除了從文件中播放媒體文件之外,還包含了與網絡相關的RTSP流(Real Time Stream Protocol,實時流協議)。在媒體流記錄的方面,PVAuthor的輸入的(Source)是照相機、麥克風等設備,輸出(Sink)是各種文件,包含了流的同步、音頻視頻流的編碼(Encode)以及文件的寫入等功能。

  在使用OpenCore的SDK的時候,有可能需要在應用程序層實現一個適配器(Adaptor),然後在適配器之上實現具體的功能,對於PVMF的NODE也可以基於通用的接口,在上層實現,以插件的形式使用。


第二部分 OpenCore的代碼結構2.1 代碼結構

  以開源android的代碼為例,OpenCore的代碼在以下目錄中: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內容合並在一個庫當中。

  2.2 編譯結構

  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的各個庫之間具有如下的關系:

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

  libopencoreplayer.so和libopencoreauthor.so是兩個並立的庫,分別用於回放和記錄,而且這兩個庫是OpenCore對外的接口庫;

  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庫中包含了以下內容:

OSCL的所有內容

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

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

編解碼的一些內容

文件輸出的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中包含了以下內容:

一些解碼工具

文件的解析器(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使用的播放器。

 

android的多媒體框架OpenCore(PacketVideo)介紹

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved