幻灯片 1

Similar documents
Android 的多媒体框架 OpenCore 介绍 分为几个阶段 : 1 整个 Android 的多媒体框架 OpenCore 2 Player 和 Author 的详细介绍 2 OpenCore 和 Android 其他部分的集成 第一部分 OpenCore 概述 OpenCore 的另外一个常

audiogram3 Owners Manual

untitled

5in1_eDVR_Manual_Chinese.cdr

WaveCN 使用手册及教程

untitled

Microsoft Word - 第1章 Android基本概念.docx

教学〔2016〕120号

关于开展党员组织关系集中

WARNING: TO REDUCE THE RISK OF FIRE OR ELECTRIC SHOCK, DO NOT EXPOSE THIS APPLIANCE TO RAIN OR MOISTURE. CAUTION: TO REDUCE THE RISK OF ELECTRIC SHOCK



電機工程系認可證照清單 /7/1

Microsoft PowerPoint - 第一讲 概论.ppt

ltu

(Microsoft Word \256\325\260\310\267|\304\263\260O\277\375_\252k\250\356_.doc)

Microsoft Word - 桂电教[2008]8号.doc

教育心理学教学案例分析

nb.PDF

Adobe AIR 安全性

重点产品技术性贸易措施研究报告-音视频产品

untitled

第一章

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2


【主持人】:给大家介绍一下,这次的培训是我们画刊部的第三次培训,当然今天特别有幸请来著吊的摄影家李少白老师给我们讲课

Measurement Studio Expands Your Test and Measurement Programming Power

bnb.PDF

(Real-time) (Local Host) (Buffer) (Video Conference) (VoD) (NetRadio) ,000 [1]( ) ( ) 1400 (2001 ) 75 (2005 ) DFC Intelligence [2] 1

影視後製全攻略 Premiere Pro After Effects Encore 自序 Adobe Premiere Pro After Effects Encore 2008 Adobe CS Adobe CS5 Adobe CS4 Premiere Pro After Effect

Basic System Administration

百色人才网事业单位百色市中级人民法院2013年招聘人员工作公告招聘

V39用户手册0227.doc

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas

mvc

2 : ; :

HY144-D-SRC 固件升级指南

CH01.indd

untitled

目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇 业 务 流 程 管 理 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX BPMX3 是 什 么 为 什 么 要 优 先 采 用 BPMX

untitled

epub83-1


中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

W. Richard Stevens UNIX Sockets API echo Sockets TCP OOB IO C struct C/C++ UNIX fork() select(2)/poll(2)/epoll(4) IO IO CPU 100% libevent UNIX CPU IO

一 个 AudioService.java 文 件 就 有 6000 行 代 码, 当 然 幸 运 的 时 候 你 可 能 直 接 看 到 问 题 所 在, 但 是 大 部 分 情 况 下 稍 微 复 杂 一 点 的 系 统 就 需 要 花 费 很 多 时 间 ; 那 么 上 层 AudioServ

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer)

暴风云视点播解决方案

Chapter 9: Objects and Classes

untitled

秘密

E11701


第四章 多媒体框架

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與

Flipout

全国计算机技术与软件专业技术资格(水平)考试

ebook12-1

111

54 15 ipod/iphone/mp3/psp/pda

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

Microsoft Word - 正文.doc

<4D F736F F D C4EABCC6CBE3BBFAB4F3C8FCCDA8D6AA E646F63>

目录 1. RK 支持的编解码类型 头文件与库文件 结构体介绍 编解码枚举定义 编解码结构体定义 解码调用流程 解码创建过程 解码过程 解码销毁过程

Table of Contents 1. Adobe Premiere Pro CS6 Plug-in for AVerMedia Devices Sony Vegas Pro Plug-in for AVerMedia Devices ImageJ Plug-in

目次 

前 言 版 权 2012 Vivitek Corporation. 是 Vivitek Corporation 的 商 标 其 他 商 标 是 其 各 自 所 有 者 的 资 产 值 重 量 和 尺 寸 等 均 为 近 似 值 规 格 如 有 变 更, 恕 不 另 行 通 知 免 责 声 明 本 文

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工 作 的

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

Microsoft Word - 全華Ch4Ans.doc

1 A H (8625) (8625)

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

4NFmini.p65

an153f

1.5招募说明书(草案)

Cover-YP-35-ch

手册 doc

软件概述

复件 Chinese usermanual android tv box

使用 Scene7 Media Portal

Hi3518EV200 HD IP Camera SoC Hi3516A

專業式報告

T6000_end

Microsoft Word doc

本手册描述了Piu和Piu Player的功能,及Piu的完整使用流程。

<4D F736F F D20B5DA34D5C22020B6E0C3BDCCE5BFF2BCDC>

Simulator By SunLingxi 2003

DEC, 2012 Frontiers

Microsoft Word zw

1

简 介 关 于 本 说 明 书 将 来 本 文 件 的 内 容 如 有 变 更 恕 不 预 先 通 知 有 关 产 品 名 称 和 机 型 号 码 的 最 新 信 息 请 联 系 我 们 的 顾 客 支 持 中 心 详 细 使 用 说 明 书 中 使 用 的 液 晶 显 示 器 和 主 机 的 插

1 音频功能 1.1 使用模式 IVR 呼叫中心的常见场景,SIP 电话接入后, 能够执行基于按键的菜单驱动 : 转码和交换 如下图, 不同编码的两个 SIP 呼叫可以通过本设备做转码后相互通话 媒体服务 将文件内容转编码或者不转编码送给远端的 SIP phone

RunPC2_.doc

51 C 51 isp 10 C PCB C C C C KEIL

Connected Intelligence:ビッグデータ技術を活用したIT運用

2004 Sun Microsystems, Inc Network Circle, Santa Clara, CA U.S.A. Sun Sun Berkeley BSD UNIX X/Open Company, Ltd. / SunSun MicrosystemsSun

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

Java Desktop System 呂衄盋 2 呂衄说柔

Nero 手册 <应用程序>

Microsoft Word - 正文.doc

Transcription:

Android 的多媒体系统

Android 的多媒体系统 第一部分多媒体系统的结构 第二部分多媒体的各个层次 第三部分多媒体实现的核心部分 OpenCore

第一部分多媒体系统的结构 Android 的多媒体部分的框架涉及到应用层 JAVA 框架 C 语言框架 硬件抽象层等环节 多媒体主要包括两方面的内容 : 输入输出环节 ( 音频视频的输入输出 ) 中间处理环节 ( 编解码环节 ) 其中, 输入输出环节由其他方面的硬件抽象层实现, 中间处理环节主要由 PacketVideo 实现, 可以使用硬件加速

第一部分多媒体系统的结构 Android 的多媒体应用业务 : Music Player Video Player Camera Sound Recorder Camcorder Video Telephone

第一部分多媒体系统的结构 Java 框架 Java Class of Media Media JNI Media API libmedia MediaPlayer MediaRecorder IPC Media Service IMediaPlayer IMediaRecorder PVPlayer PVAuthor

第一部分多媒体系统的结构 JAVA 类 : frameworks/base/media/java/android/media/ 类的名称为 android.media.* JAVA 本地调用部分 ( JNI ): frameworks/base/media/* 这部分内容编译成为目标是 libmedia_jni.so. 基于 OpenCore 的多媒体播放器和记录器 external/opencore/

第一部分多媒体系统的结构 多媒体框架的 media 库 : frameworks/base/include/media/ frameworks/base/media/libmedia/ 这部分的内容被编译成库 libmedia.so 多媒体服务部分 : frameworks/base/media/libmediaplayerservice/ 这部分内容被编译成库 libmediaplayerservice.so

第一部分多媒体系统的结构 从多媒体应用实现的角度, 主要包括两方面的内容 : 输入输出环节 ( 音频 视频纯数据流的输入输出系统 ) 中间处理环节 ( 文件格式处理环节和编解码环节 ) 以一个 MP3 播放器为例, 从功能的角度就是将一个 mp3 格式的文件作为播放器的输入, 将声音从播放设备输出 从实现的角度, MP3 播放器经过了一下的阶段 : MP3 格式的文件解析 MP3 编码流的解码 PCM 输出的播放 MP3 文件 文件格式解析单元 MP3 编码流 解码单元 PCM 数据 音频输出设备

3.1 多媒体的各种业务 Camera / Camcorder SoundRecoder Music (MediaPlayer) Android 的多媒体系统 Java Aplication android.widget.videoview Java FrameWork android.hardware.camera android.media.mediarecorder android.media.mediaplayer android.view.surface Camera mediarecorder mediaplayer Native FrameWork Camera Service CameraHAL PVAuthor PVPlayer Packet Video Framework MediaPlayer Serivice Midi Player Vorbis Player Surface Flinger OverlayHAL Audio Filnger AudioHAL Driver Camera Driver Hardware Codec Main framebuffer Video Plane Audio Driver

3.1 多媒体的各种业务 音频 / 视频播放器 Music (MediaPlayer) Video Player Java Aplication Music Player android.widget.videoview Java FrameWork android.media.mediaplayer android.view.surface mediaplayer Video Stream Audio Stream Stream Media Media File Native FrameWork PVPlayer Packet Video Framework MediaPlayer Serivice Midi Player Vorbis Player Surface Flinger OverlayHAL Audio Filnger AudioHAL Driver Hardware Codec Main framebuffer Video Plane Audio Driver

3.1 多媒体的各种业务 Camera 照相机 Java Aplication android.hardware.camera android.view.surface Java FrameWork Camera Encoder To JPEG File JPEG File Camera Service Surface Flinger Native Camera HAL Video Preview (Viewfinder) Overlay Driver Camera Driver Main framebuffer Video Plane

3.1 多媒体的各种业务 SoundRecoder 录音机 Java Aplication Java FrameWork android.media.mediarecorder android.media.mediaplayer mediarecorder MediaPlayer Serivice Audio Stream PVAuthor Audio File Audio Filnger Native Packet Video Framework AudioHAL Driver Hardware Codec Audio Driver

3.1 多媒体的各种业务 Camcorder 摄像机 Java Aplication android.widget.videoview Java FrameWork android.media.mediarecorder android.view.surface mediarecorder Camera MediaPlayer Serivice Preview Audio Stream Camera HAL Camera Service PVAuthor Video Stream Media File Surface Flinger Audio Filnger Native Packet Video Framework Overlay AudioHAL Driver Camera Driver Hardware Codec Main framebuffer Video Plane Audio Driver

第二部分多媒体的各个层次 2.1 libmedia 的框架部分 2.2 多媒体服务 2.3 多媒体部分的 JNI 代码 2.4 多媒体部分的 JAVA 框架代码 2.5 类 android.widget.videoview

第二部分多媒体的各个层次 Android 多媒体部分的 C 语言部分的核心是 media 库, 它主要记录了媒体播放器和媒体记录器的框架 media 库向上层通过 JNI 提供接口, 下层通过 Packet Video 等实现

2.1 libmedia 的框架部分 JAVA 媒体播放器 android_media_mediaplayer IMediaPlayerClient IMediaPlayerService MediaPlayerInterface IMediaPlayerClient IMediaPlayerService MediaPlayerBase BnMediaPlayerClient BnMediaPlayerService MediaPlayerInterface MediaPlayer IPC MediaPlayerService mediaplayer IMediaPlayer BnMediaPlayer MediaPlayerService::Client PVPlayer IMediaPlayer MediaPlayerService PVPlayer

2.1 libmedia 的框架部分 JAVA IMediaPlayerClient IMediaPlayerService 媒体记录器 android _media _recorder IMediaPlayerClient IMediaPlayerService BnMediaPlayerClient BnMediaPlayerService MediaRecorder IPC MediaPlayerService MediaRecorder x IMediaRecorder BnMediaRecorder MediaPlayerService ::MediaRecorderClient PVAuthor IMedia Recorder MediaPlayerService PVAuthor

2.1 libmedia 的框架部分 JAVA android_media_mediametadataretriever IMediaPlayerService IMediaPlayerService MediaMetadataRetrieverInterface MediaMetadataRetrieverBase 媒体元信息 BnMediaPlayerService MediaMetadataRetrieverInterface MediaMetadataRetriever IPC MediaPlayerService mediametadataretriever IMediaMetadataRetriever BnMediaMetadataRetriever MediaPlayerService::Client PVMetadataRetriever IMediaMetadataRetriever MediaPlayerService PVMetadataRetriever

3.2 多媒体的服务 多媒体服务的守护进程的代码 : frameworks/base/media/mediaserver/ 其中只有一个源文件 main_mediaserver.cpp, 将被编译成为一个可执行程序 mediaserver 它负责启动了多媒体服务 照相机服务, 音频服务这三个服务 service media /system/bin/mediaserver user media group system audio camera graphics inet net_bt net_bt_admin

3.2 多媒体的服务 多媒体服务提供多媒体的服务部分, 多媒体服务通过 IPC 与 libmedia 库通信, 多媒体服务其路径是 : frameworks/base/media/libmediaplayerservice/ 其中, 主要的类是 MediaPlayerService, 从这个类中可以获取 IMediaPlayer 和 IMediaRecorder 两个实现类 MediaRecorder IMediaRecorder IPC MediaRecorderClient MediaPlayer IMediaPlayer IPC MediaPlayerService::Client PVMediaRecorder MediaPlayerBase MediaMetadataRetriever IPC PVPlayer MidiFile VorbisPlayer IMediaMetadataRetriever MetadataMediaRetrieverClient PVMediaMetadataRetriever

2.2 多媒体的服务 MediaPlayerService 的定义 : class MediaPlayerService : public BnMediaPlayerService { virtual sp<imediarecorder> createmediarecorder(pid_t pid); virtual sp<imediametadataretriever> createmetadataretriever(pid_t pid); } virtual sp<imediaplayer> create(pid_t pid, const sp<imediaplayerclient>& client, const char* url); virtual sp<imediaplayer> create(pid_t pid, const sp<imediaplayerclient>& client, int fd, int64_t offset, int64_t length);

2.3 多媒体部分的 JNI 代码 media 的 JAVA 本地调用部分 ( JNI ): frameworks/base/media/* 这部分内容编译成为目标是 libmedia_jni.so. 主要文件是 : android_media_mediaplayer.cpp android_media_mediarecorder.cpp

2.4 多媒体部分的 JAVA 代码 JAVA 类 : frameworks/base/media/java/android/media/ 主要的文件是 : MediaPlayer.java MediaRecorder.java 分别表示两个类 : android.media.mediaplayer android.media.mediarecorder 这两个类的接口和 JNI 层次乃至本地代码是非常类似的

2.5 VideoView 类 VideoView 是一个 media 集成的高层的 JAVA 类, 这个类的文件是 :: frameworks/base/core/java/android/widget/ 文件的类型是 VideoView.java 类的路径是 android.widget.java VideoView 是一个集成了 MediaPlayer 和 SurfaceView 的类, 可以作为一个 UI 元素 ( View ) 直接放置在 JAVA 应用的界面中, 用于视频的播放

第三部分多媒体实现的核心部分 OpenCore 3.1 OpenCore 概述 3.2 OpenCore 的层次结构 3.3 OpenCore 的 OSCL 部分 3.4 OpenCore 的文件格式和编解码部分 3.5 OpenCore Node 介绍 3.6 OpenCore 的移植和扩展 3.7 OpenCore Player 介绍 3.8 OpenCore Author 介绍

3.1 OpenCore 概述 OpenCore 是一个多媒体的框架, 从宏观上来看, 它主要包含了两大方面的内容 : PVPlayer : 提供媒体播放器的功能, 完成各种音频 ( Audio ) 视频 ( Video ) 流的回放 ( Playback ) 功能 PVAuthor : 提供媒体流记录的功能, 完成各种音频 ( Audio ) 视频 ( Video ) 流的捕获 ( Recording ) 功能 PVPlayer 和 PVAuthor 以 SDK 的形式提供给开发者, 可以在这个 SDK 之上构建多种应用程序和服务 在移动终端中常常使用的多媒体应用程序, 例如媒体播放器 照相机 录像机 录音机等等

3.2 OpenCore 的层次结构 Android Media Framework Android Player Android Author OpenCore NODE NODE Android HAL Audio IO PVPlayer Engine PVAuthor Engine 2way Engine Codec NODEs FileFormat NODEs Video Output Camera Sink/Source NODEs PVMF (PacketVideo Multimedia Framework) 3rd Codec OSCL (Operating System Compatibility Library) OS, lib

3.2 OpenCore 的层次结构 OpenCore 是一个多媒体的框架, 从宏观上来看, 它主要包含了两大方面的内容 : OSCL ( Operating System Compatibility Library, 操作系统兼容层 ) PVMF ( PacketVideo Multimedia Framework, PV 多媒体框架 ) 文件解析 ( parser ) 和组成 ( composer ) 两个部分 编解码部分 NODEs ( 节点 ) Player Engine ( 播放器引擎 ) Author Engine ( 作者引擎 )

3.2 OpenCore 的 OSCL 部分 OSCL, 全称为 Operating System Compatibility Library ( 操作系统兼容库 ), 它包含了一些在不同操作系统中移植层的功能, 它的在 OpenCore oscl/oscl 目录中, 一般每一个目录表示一个模块 OSCL 对应的功能是非常细致的, 几乎对 C 语言中每一个细节的功能都进行封装, 并使用了 C+ + 的接口提供给上层使用 事实上, OperCore 中的 PVMF Engine 部分都在使用 OSCL, 而整个 OperCore 的调用者也需要使用 OSCL

3.4 OpenCore 的文件格式和编解码部分 OpenCore 有关文件格式处理和编解码部分两部分的内容, 分别在目录 fileformats 和 codecs_v2 当中 这两部分都属于基础性的功能, 不涉及具体的逻辑, 因此它们被别的模块调用来使用 文件格式处理有两种类型, 一种是 parser ( 解析器 ), 另一种是 composer ( 组成器 ) 编解码部分的子目录 omx 实现了一个 khronos OpenMAX 的功能 OpenMAX 是一个多媒体应用程序的框架标准

3.4 OpenCore 的文件格式和编解码部分 文件格式的处理部分 : 由于同时涉及播放文件和记录文件两种功能, 因此 OpenCore 中的文件格式处理有两种类型, 一种是 parser ( 解析器 ), 另一种是 composer ( 组成器 ) 其代码的目录为 fileformats 的目录, 其中包含 mp3, mp4, wav 等子目录 其中包含了 AVI, mp3, mp4, wav 等多种文件的解析器和组成器, 各个目录中对应的是不同的文件格式等

3.4 OpenCore 的文件格式和编解码部分 编解码部分 : 编解码部分主要针对 Audio 和 Video 的软件编解码, 其目录为 codecs_v2, 其中包含了 audio omx utilities video 等几个目录 在 audio 和 video 目录中, 对应了针对各种流的子目录, 其中可能包含 dec 和 enc 两个目录, 分别对应解码和编码 video -- avc_h264 -- common -- dec -- enc `-- patent_disclaimer.txt `-- m4v_h263 -- dec -- enc `-- patent_disclaimer.txt

3.4 OpenCore 的文件格式和编解码部分 codecs_v2 目录的子目录 omx 实现了一个 khronos OpenMAX 的功能 OpenMAX 是一个多媒体应用程序的框架标准, 由 NVIDIA 公司和 Khronos 在 2006 年推出 OpenMAX IL 1.0 ( 集成层 ) 技术规格定义了媒体组件接口, 以便在嵌入式器件的流媒体框架中快速集成加速式编解码器 OpenMAX 的设计实现可以让具有硬件编辑码功能的平台提供统一的接口和框架, 在 OpenMAX 中可以直接使用硬件加速的进行编解码乃至输出的功能, 对外保持统一的接口 此处的 OpenMAX 则是基于一个纯软件的实现, 其实现的代码即是调用这里的 video 和 audio 目录中的软件编辑码的代码

3.5 OpenCore Node 介绍 Node 是 OpenCore 中基本的功能模块, OpenCore 本身提供了一些 Node, 也可以由上层软件来实现 本身提供的 Node 在 OpenCore 的 nodes 目录中 OpenCore 的 Node 主要分成三个类型 : 编解码的 Node, 文件格式的 Node, 输入输出模块的 Node

3.6 OpenCore 的功能扩展 OpenCore 本身提供了很强大的功能, 在使用的过程中, 还可以对 OpenCore 进行扩展 在扩展的使用, 一般是基于 OpenCore 的框架为其增加固定的插件 插件主要一般可以做成 Node 的形式 各种文件格式 Node 各种编解码的 Node 文件格式插件 Node 格式解析 / 组成 Node 基于 OpenMax 的编解码 Node 其他编解码 Node 文件格式的插件 各种文件解析程序 各种文件组成程序 OpenMax 的封装 OpenMax 的封装 软件 OpenMax 实现 OpenMax 实现插件 各种软件 Codec

3.6 OpenCore 的功能扩展 编解码相关的 Node 包括 : pvomxbasedecnode, pvomxaudiodecnode, pvomxvideod ecnode, pvomxencnode 等 文件格式的 Node 包括 : pvwavffparsernode, pvaacffparsernode, pvamrffparsernode, pvmp3ffparsern ode, pvmp4ffparsernode, pvvideoparsernode, pvmp4f fcomposernode 等 输入输出的 Node 包括 : pvmediainputnode, pvmediaoutputnode, pvdummyinput node, pvdummyoutputnode, pvfileoutputnode, pvdow nloadmanagernode 等 此外, 还包括 pvsocketnode pvdownloadmanagernode 等其他功能的 Node

3.6 OpenCore 的功能扩展 MediaIO 在 pvmi/pvmf/include 目录中的 PvmiMIOControl.h 和 pvmi_media_transfer.h 头文件中实现定义, 在实现的过程中只需要继承和构建其中的接口, 然后由框架最终实现成为 Node 在 OpenCore 系统中使用 事实上, MediaIO 是对 Node 的一种封装, 封装成为多媒体的输入输出环节

3.7 OpenCore Player 介绍 OpenCore 的 Player 的编译文件是 pvplayer/android.mk, 将生成动态库文件 libopencoreplayer.so 这个库包含了两方面的内容 : 一方是 Player 的 engine ( 引擎 ), 一方面是为 Android 构件的 Player, 这实际上是一个适配器 ( adapter ) engine 的路径是 engine/player ; adapter 的路径是 android

3.7 OpenCore Player 介绍 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 使用的播放器

3.7 OpenCore Player 介绍 libopencoreplayer.so Android Player Video Output Audio Output PVPlayer Player Driver Player Engine 组成部分 : 播放器核心引擎 适配器 ( PVPlayer ) Video 输出环节 Audio 输入环节 PVMF OpenCore Common lib (libopencorecommon.so)

3.7 OpenCore Player 介绍 OpenCore 的 Player Engine 具有清晰明确的接口, 在这个接口上, 不同的系统可以根据情况实现不同的 Player 位于 OpenCore 中的 engines/player/ 目录下, 其中, engines/player/include 目录中保存的是接口头文件, engines/player/src 目录中保存是源文件和私有头文件 Player Engine 的类结构 : PVPlayerInterface PVPlayerFactory PVPlayerDataSink PVPlayerDataSinkPVMFNode PVPlayerDataSinkFilename +GetPVPlayerState() +AddDataSource() +Init() +AddDataSink() +Prepare() +Start() +Pause() +Resume() +Stop() +RemoveDataSink() +Reset() +RemoveDataSource() PVPlayerDataSourceURL PVPlayerDataSource PVPlayerDataSourcePVMFNode PVPlayerEngine

3.7 OpenCore Player 介绍 PVPlayer 的结构 : PVPlayer Audio Data Sink Node android_audio_mio Media URL PVMediaPlayer android _audio _stream android _audio_output Sink Node android_surface_output Video Data PV Player Engine Video Output Audio Output Sink Node 接受上一个 Node 写的动作

3.7 OpenCore Player 介绍 PVPlayer 的类结构 : MediaPlayerInterface AndroidSurfaceOutput AndroidAudioOutput PVPlayer PVPlayerDriver PVPlayerInterface PVPlayerFactory PVPlayerDataSink PVPlayerDataSinkPVMFNode PVPlayerDataSinkFilename +GetPVPlayerState() +AddDataSource() +Init() +AddDataSink() +Prepare() +Start() +Pause() +Resume() +Stop() +RemoveDataSink() +Reset() +RemoveDataSource()

3.7 OpenCore Player 介绍 OpenCore 的 Author 的编译文件是 pvauthor/ Android.mk, 将生成动态库文件 libopencoreauthor.so 与 Player 类似, 这个库包含了两方面的内容 : 一方是 Author 的 engine ( 引擎 ), 一方面是为 Android 构件的 Author, 这实际上是一个适配器 ( adapter ) engine 的路径是 engine/author ; adapter 的路径是 android/author

3.7 OpenCore Player 介绍 libopencoreauthor.so 中包含了以下内容 : 一些编码工具 ( 例如, 视频流 H263 H264 和音频流 Amr ); 文件的组成器 ( MP4 ); 编码工具对应的 Node ; 表示媒体输入的 Node ( 编译文件 : nodes/pvmediainputnode/android.mk ); Author 的引擎部分 ( 编译文件 : engines/author/android.mk ); Android 的 Author 适配器 ( 编译文件 : android/author/android.mk ) libopencoreauthor.so 中主要内容为各个文件编码器和文件组成器, PVAuthor 的核心功能在 engines/author/android.mk 中, 而 android/author/android.mk 是在 PVAuthor 之上构建的一个为 Android 使用的媒体记录器

3.8 OpenCore Author 介绍 libopencoreauthor.so Android Author (mediarecorder) Camera Input Audio Input PVAuthor Author Driver Player Engine 组成部分 : 作者核心引擎 适配器 ( PVAuthor ) Camera 输入环节 Audio 输出环节 PVMF OpenCore Common lib (libopencorecommon.so)

3.8 OpenCore Author 介绍 目录为 OpenCore 中的 engines/author/, 是 Author 引擎目录, 其主要包含 include 和 src 两个目录, 头文件中的 pvauthorenginefactory.h 和 pvauthorengineinterface.h 两个文件为接口, 源文件为主要的具体实现 pvauthorengine.cpp Author Engine 的类结构 : pvauthorengineinterface pvauthorenginefactory pvauthorengine

3.8 OpenCore Author 介绍 PVAuthor 的结构 : PVAuthor Active Source Node Audio Data ISurface android_audio_input Active Source Node android_camera_input PVMediaRecorder Media File Video Data Audio Input Camera PV Author Engine 活动的数据源 Node 将主动写下一个环节

3.8 OpenCore Author 介绍 PVAuthor 的类的结构 : PVMediaRecorder AndroidAudioInput AndroidCameraInput PVAuthor PVAuthorDriver - pvauthorengineinterface +GetPVAuthorState() +AddDataSource() +SelectComposer() +AddMediaTrack() +AddDataSink() +Open() +Close() +Init() +Reset() +Start() +Pause() +Resume() +Stop() pvauthorenginefactory

附 : Stagefright Stagefright 是 Android Eclair 中新增的一个多媒体的实现 它是一个轻量级的多媒体实现 Stagefright 头文件 : frameworks/base/media/libstagefright/include/ Stagefright 的实现 : frameworks/base/media/libstagefright/

附 : Stagefright Stagefright 是 Android Eclair 中新增的一个多媒体的实现 Stagefright 是一个轻量级的多媒体实现, 主要功能基于 OpenMax 来实现, 提供媒体播放等功能接口, 为 Android 的框架层使用 ( 如作为 mediaplayer 的实现 ) Stagefright 头文件 : frameworks/base/include/media/stagefright/ Stagefright 的实现 : frameworks/base/media/libstagefright/

谢谢!