多媒体的框架 - OpenCore框架概述

fmms 13年前
     <h3><span class="link_title">OpenCore框架概述(一)</span></h3>    <br />    <p>             OpenCore是一个多媒体的框架,从宏观上来看,它主要包含了两大方面的内容:PVPlayer:提供媒体播放器的功能,完成各种音频 (Audio)、视频(Video)流的回放(Playback)功能。PVAuthor:提供媒体流记录的功能,完成各种音频(Audio)、视频 (Video)流的捕获(Recording)功能PVPlayer和PVAuthor以SDK的形式提供给开发者,可以在这个SDK之上构建多种应用程 序和服务。在移动终端中常常使用的多媒体应用程序,例如媒体播放器、照相机、录像机、录音机等等。</p>    <p><strong>OpenCore的层次结构图</strong>:</p>    <p><img style="width:672px;height:451px;" alt="多媒体的框架 - OpenCore框架概述(一)" src="https://simg.open-open.com/show/208a4d7159826e8a28a46b052861f729.jpg" /></p>    <p>OpenCore是一个多媒体的框架,从宏观上来看,它主要包含了两大方面的内容:<br />  OSCL(Operating System Compatibility Library,操作系统兼容层)<br />  PVMF(PacketVideo Multimedia Framework,PV多媒体框架) 文件解析(parser)和组成(composer)两个部分 编解码部分<br /> NODEs(节点)<br /> Player Engine(播放器引擎)<br /> Author Engine(作者引擎)</p>    <p>        OpenCore中包含的内容非常多:从播放的角度,PVPlayer 的输入的(Source)是文件或者网络媒体流,输出(Sink)是音频视频的输出设备,其基本功能包含了媒体流控制、文件解析、音频视频流的解码 (Decode)等方面的内容。除了从文件中播放媒体文件之外,还包含了与网络相关的RTSP流(RealTime Stream Protocol,实时流协议)。在媒体流记录的方面,PVAuthor 的输入的(Source)是照相机、麦克风等设备,输出(Sink)是各种文件, 包含了流的同步、音频视频流的编码(Encode)以及文件的写入等功能。在使用OpenCore 的SDK的时候,有可能需要在应用程序层实现一个适配器(Adaptor),然后在适配器之上实现具体的功能,对于PVMF的NODE也可以基于通用的接 口,在上层实现,以插件的形式使用。</p>    <p><strong>OpenCore的OSCL部分</strong>:</p>    <p>OSCL,全称为Operating System Compatibility Library (操作系统兼容库),它包含了一些在不同操作系统中移植层的功能,它的在OpenCore oscl/oscl目录中,一般每一个目录表示一个模块。OSCL对应的功能是非常细致的,几乎对C语言中每一个细节的功能都进行封装,并使用了C++的 接口提供给上层使用。事实上,OperCore中的PVMF、Engine部分都在使用OSCL,而整个OperCore的调用者也需要使用OSCL。</p>    <p><strong>OpenCore的文件格式和编解码部分</strong>:</p>    <p>1.文件格式的处理部分:</p>    <p>OpenCore有关文件格式处理和编解码部分两部分的内容,分别在目录fileformats和codecs_v2当中。这两部分都属于基础性的 功能,不涉及具体的逻辑,因此它们被别的模块调用来使用。文件格式处理有两种类型,一种是parser(解析器),另一种是composer(组成器)。 其代码的目录为fileformats的目录,其中包含mp3,mp4,wav等子目录。其中包含了AVI,mp3,mp4,wav等多种文件的解析器和 组成器,各个目录中对应的是不同的文件格式等。</p>    <p>fileformats的目录结构如下所示:<br /> fileformats<br /> |-- avi<br /> | `-- parser<br /> |-- common<br /> | `-- parser<br /> |-- id3parcom<br /> | |-- Android.mk<br /> | |-- build</p>    <p>| |-- include<br /> | `-- src<br /> |-- mp3<br /> | `-- parser<br /> |-- mp4<br /> | |-- composer<br /> | `-- parser<br /> |-- rawaac<br /> | `-- parser<br /> |-- rawgsmamr<br /> | `-- parser<br /> `-- wav<br /> `-- parser</p>    <p> </p>    <p>2.编解码部分:</p>    <p>目录结构如下所示:</p>    <p>codecs_v2<br /> |-- audio<br /> | |-- aac<br /> | |-- gsm_amr<br /> | |-- mp3<br /> | `-- sbc<br /> |-- omx<br /> | |-- factories<br /> | |-- omx_aac<br /> | |-- omx_amr<br /> | |-- omx_common<br /> | |-- omx_h264<br /> | |-- omx_m4v<br /> | |-- omx_mp3<br /> | |-- omx_proxy<br /> | `-- omx_queue<br /> |-- utilities<br /> | |-- colorconvert<br /> | |-- m4v_config_parser<br /> | `-- pv_video_config_parser<br /> `-- video<br /> |-- avc_h264<br /> `-- m4v_h263</p>    <p>编解码部分主要针对Audio和Video的软件编解码,其目录为codecs_v2,其中包含了audio、omx 、utilities、video等几个目录。在audio 和video目录中,对应了针对各种流的子目录,其中可能包含dec和enc两个目录,分别对应解码和编码。</p>    <p>`-- video</p> |-- avc_h264    <br /> | |-- common    <br /> | |-- dec    <br /> | |-- enc    <br /> | `-- patent_disclaimer.txt    <br /> `-- m4v_h263    <br /> |-- dec    <br /> |-- enc    <br /> `-- patent_disclaimer.txt    <p>codecs_v2目录的子目录omx实现了一个khronos OpenMAX的功能。OpenMAX是一个多媒体应用程序的框架标准,由NVIDIA公司和Khronos在2006年推出。OpenMAX IL 1.0<br /> (集成层)技术规格定义了媒体组件接口,以便在嵌入式器件的流媒体框架中快速集成加速式编解码器。OpenMAX的设计实现可以让具有硬件编辑码功能的平台<br /> 提供统一的接口和框架,在OpenMAX中可以直接使用硬件加速的进行编解码乃至输出的功能,对外保持统一的接口。此处的OpenMAX则是基于一个纯软件的实现,其实现的代码即是调用这里的video和audio目录中的软件编辑码的代码。</p>    <p><strong>OpenCore Node介绍</strong>:</p> Node是OpenCore中基本的功能模块,OpenCore本身提供了一些Node,也可以由上层软件来实现。本身提供的Node在 OpenCore的nodes目录中。OpenCore的Node主要分成三个类型:编解码的Node,文件格式的Node,输入输出模块的Node。    <br />    <br />    <h3><span class="link_title">OpenCore框架概述(二)</span> </h3>    <br />    <p><strong>OpenCore Player介绍:</strong></p>    <p>OpenCore的Player的编译文件是pvplayer/Android.mk,将生成动态库文件 libopencoreplayer.so。这个库包含了两方面的内容:一方是Player的engine(引擎),一方面是为Android构件的 Player,这实际上是一个适配器(adapter)。</p>    <p>libopencoreplayer.so中包含了以下内容:</p>    <p>一些解码工具;<br /> 文件的解析器(MP4);<br /> 解码工具对应的Node;<br /> Player的引擎部分(编译文件:engines/player/Android.mk);</p>    <p>  为Android构建的Player适配器(编译文件:android/Android.mk);</p>    <p> 识别工具(pvmi/recognizer);<br />  编解码工具中的OpenMAX部分(codecs_v2/omx);<br />  对应插件Node的注册。<br /> libopencoreplayer.so中的内容较多,其中主要为各个文件解析器和解码器,PVPlayer的核心功能在engines/player /Android.mk当中;而android/Android.mk的内容比较特殊,它是在PVPlayer之上构建的一个为Android使用的播放 器。</p>    <p align="center"><img alt="多媒体的框架 - OpenCore框架概述(一)" src="https://simg.open-open.com/show/350583a7b40469e2aac0bf515b67fcde.jpg" width="515" height="501" /></p>    <p>OpenCore的Player Engine具有清晰明确的接口,在这个接口上,不同的系统可以根据情况实现不同的Player。位于OpenCore中的engines/player /目录下,其中,engines/player/include目录中保存的是接口头文件,engines/player/src目录中保存是源文件和私 有头文件 。</p>    <p>Player Engine的类结构:</p>    <img style="width:696px;height:312px;" alt="多媒体的框架 - OpenCore框架概述(一)" src="https://simg.open-open.com/show/6a511253ddf6343ead7fbe356724b327.jpg" />    <br />    <br />    <div align="left">     PVPlayer 的结构:     <br />     <br />     <div align="center">      <img style="width:689px;height:334px;" alt="多媒体的框架 - OpenCore框架概述(一)" src="https://simg.open-open.com/show/0de688d10eb121833636fa20d32df780.jpg" />      <br />      <br />      <div align="left">       <strong>OpenCore Author介绍:</strong>       <br />      </div>     </div>    </div>    <div align="left">     目录为OpenCore中的engines/author/,是Author引擎目录,其主要包含include和src两个目录,头文件中的pvauthorenginefactory.h和pvauthorengineinterface.h两个文件     <br /> 为接口,源文件为主要的具体实现pvauthorengine.cpp。     <br />     <br />     <div align="center">      <img alt="多媒体的框架 - OpenCore框架概述(一)" src="https://simg.open-open.com/show/7c6833e97e391935b68c2bb7d22f6e8c.jpg" width="505" height="473" />      <br />     </div>    </div>    <br />    <br /> PVAuthor 的结构:    <br />    <img style="width:662px;height:346px;" alt="多媒体的框架 - OpenCore框架概述(一)" src="https://simg.open-open.com/show/0387f646318deb99f36e7298557028e7.jpg" />    <br />    <br />    <br /> PVAuthor 的类的结构:    <br />    <img alt="多媒体的框架 - OpenCore框架概述(一)" src="https://simg.open-open.com/show/3a1739c948f7200b31dce62d3013ae1d.jpg" width="591" height="459" />    <br />    <br /> 转自:    <a href="/misc/goto?guid=4959517540891276682">http://blog.csdn.net/itachi85/article/details/7080682</a>    <br />