`
suiyuchen
  • 浏览: 30468 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Android多媒体框架OpenCore(PacketVideo)介绍之三:Player和Auther

阅读更多

第五部分 OpenCore Player介绍
5.1 Player的组成
OpenCore的Player的编译文件是pvplayer/Android.mk,将生成动态库文件 libopencoreplayer.so。这个库包含了两方面的内容:一方是Player的engine(引擎),一方面是为Android构件的Player,这实际上是一个适配器(adapter)。engine的路径是engine/player;adapter的路径是android。
5.2 Player Engine部分
OpenCore的Player Engine具有清晰明确的接口。在这个接口之上,不同的系统可一个根据自己的情况实现不同Player。目录engines中的文件结构如下所示:
engines/player/
|-- Android.mk
|-- build
| |-- linux_nj
| |-- make
| `-- makefile.conf
|-- config
| `-- linux_nj
|-- include
| |-- pv_player_datasink.h
| |-- pv_player_datasinkfilename.h
| |-- pv_player_datasinkpvmfnode.h
| |-- pv_player_datasource.h
| |-- pv_player_datasourcepvmfnode.h
| |-- pv_player_datasourceurl.h
| |-- pv_player_events.h
| |-- pv_player_factory.h
| |-- pv_player_interface.h
| |-- pv_player_license_acquisition_interface.h
| |-- pv_player_registry_interface.h
| |-- pv_player_track_selection_interface.h
| `-- pv_player_types.h
|-- sample_app
| |-- Android.mk
| |-- build
| |-- sample_player_app_release.txt
| `-- src
|-- src
| |-- pv_player_datapath.cpp
| |-- pv_player_datapath.h
| |-- pv_player_engine.cpp
| |-- pv_player_engine.h
| |-- pv_player_factory.cpp
| |-- pv_player_node_registry.h
| `-- pv_player_sdkinfo.h
`-- test
|-- Android.mk
|-- build
|-- config
`-- src
在Player Engine的实现中,包含了编解码和流控制等功能,而输出的介质需要从外部设置进来。PVPlayerInterface定义的接口基本是按照操作顺序的,主要的接口如下所示:
PVCommandId AddDataSource(PVPlayerDataSource& aDataSource, const OsclAny* aContextData = NULL);

PVCommandId Init(const OsclAny* aContextData = NULL);
PVCommandId AddDataSink(PVPlayerDataSink& aDataSink, const OsclAny* aContextData = NULL);
PVCommandId Prepare(const OsclAny* aContextData = NULL);
PVCommandId Start(const OsclAny* aContextData = NULL);
PVCommandId Pause(const OsclAny* aContextData = NULL);
PVCommandId Resume(const OsclAny* aContextData = NULL);
PVCommandId Stop(const OsclAny* aContextData = NULL);
PVCommandId RemoveDataSink(PVPlayerDataSink& aDataSink, const OsclAny* aContextData = NULL);
PVCommandId Reset(const OsclAny* aContextData = NULL);
PVCommandId RemoveDataSource(PVPlayerDataSource& aDataSource, const OsclAny* aContextData = NULL);
这里面的DataSink可能包含Video的输出和Audio的输出两者部分。在pv_player_types.h文件中,定义了Player的状态机,以PVP_STATE_为开头,如下所示:
typedef enum
{
PVP_STATE_IDLE = 1,
PVP_STATE_INITIALIZED = 2,
PVP_STATE_PREPARED = 3,
PVP_STATE_STARTED = 4,
PVP_STATE_PAUSED = 5,
PVP_STATE_ERROR = 6
} PVPlayerState;
PVPlayerInterface 中的各个操作如果成功,可以更改Player的状态机:初始化的时候Player是PVP_STATE_IDLE状态,调用Init后,进入PVP_STATE_INITIALIZED状态;调用AddDataSink,进入PVP_STATE_PREPARED状态;调用Prepare后,进入PVP_STATE_PREPARED状态;调用start后进入PVP_STATE_STARTED状态,之后可以调用pause进入PVP_STATE_PAUSED状态。
PVP_STATE_STARTED和PVP_STATE_PAUSED状态是播放情况下的状态,可以使用start和pause函数在这两个状态中切换。在播放过程中,调用stop可以返回PVP_STATE_INITIALIZED状态,在调用RemoveDataSource返回PVP_STATE_IDLE状态。

5.3 Android Player部分
这个Android的Player的“适配器”需要调用OpenCore的Player Engine的接口,实现Android的媒体播放器的服务所需要接口,即最终实现一个PVPlayer,而PVPlayer实际上是继承了MediaPlayerInterface。在实现过程中,首先实现了一个PlayerDriver,然后再使用PVPlayer,PVPlayer通过调用PlayerDriver来完成具体的功能。对PVPlayerDriver的各种操作使用各种命令来完成,这些命令在playerdriver.h中进行的定义。

enum player_command_type {
PLAYER_QUIT = 1,
PLAYER_SETUP = 2,
PLAYER_SET_DATA_SOURCE = 3,
PLAYER_SET_VIDEO_SURFACE = 4,
PLAYER_SET_AUDIO_SINK = 5,
PLAYER_INIT = 6,
PLAYER_PREPARE = 7,
PLAYER_START = 8,
PLAYER_STOP = 9,
PLAYER_PAUSE = 10,
PLAYER_RESET = 11,
PLAYER_SET_LOOP = 12,
PLAYER_SEEK = 13,
PLAYER_GET_POSITION = 14,
PLAYER_GET_DURATION = 15,
PLAYER_GET_STATUS = 16,
PLAYER_REMOVE_DATA_SOURCE = 17,
PLAYER_CANCEL_ALL_COMMANDS = 18,
};
第六部分 OpenCore Author介绍

6.1 Android Author
android/author/
|-- Android.mk
|-- android_audio_input.cpp
|-- android_audio_input.h
|-- android_audio_input_threadsafe_callbacks.cpp
|-- android_audio_input_threadsafe_callbacks.h
|-- android_camera_input.cpp
|-- android_camera_input.h
|-- authordriver.cpp
|-- authordriver.h
`-- mediarecorder.cpp

6.2 author引擎

engines/author/
|-- Android.mk
|-- build
| |-- make
| `-- makefile
|-- include
| |-- pvauthorenginefactory.h
| `-- pvauthorengineinterface.h
|-- src
| |-- pvae_tuneables.h
| |-- pvaenodeutility.cpp
| |-- pvaenodeutility.h
| |-- pvauthorengine.cpp
| |-- pvauthorengine.h
| `-- single_core
`-- test
|-- Android.mk
|-- build
|-- config
|-- src
`-- test_input

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhandoushi1982/archive/2010/03/02/5337644.aspx

分享到:
评论

相关推荐

    Android的多媒体框架OpenCore介绍

    Android的多媒体框架OpenCore是Android系统中的核心组件之一,用于处理多媒体内容的播放和录制。OpenCore最初由PacketVideo公司开发,后来成为Android系统的一部分。本文将深入探讨OpenCore的结构、功能及其与...

    Android的多媒体框架OpenCore(PacketVideo)介绍

    ### Android的多媒体框架OpenCore(PacketVideo)介绍 #### 一、OpenCore概述 OpenCore,也常被称为PacketVideo,是Android系统中的多媒体核心组件。它由PacketVideo公司开发,旨在为Android平台提供全面的多媒体...

    Android的多媒体框架OpenCore(PacketVideo)介绍 Linux

    Android的多媒体框架OpenCore(PacketVideo)介绍 Linux

    Android的多媒体框架OpenCore(PacketVideo)

    【Android的多媒体框架OpenCore(PacketVideo)】 OpenCore,又称PacketVideo,是Android系统中的多媒体核心组件,负责处理音频和视频的播放及录制。它是一个由C++编写的复杂框架,提供了高度可移植的系统层,使得...

    Android的多媒体框架OpenCore介绍.pdf

    Android的多媒体框架OpenCore是Android系统中用于处理多媒体内容的核心组件,它提供了全面的多媒体播放和录制功能。OpenCore最初由PacketVideo公司开发,后来成为Android系统的一部分。在Android开发者社区中,...

    Android多媒体框架分析.pdf

    基于 PacketVideo 公司的 OpenCORE 平台,多媒体框架提供了一套通用的可扩展接口,支持所有通用的音频、视频、静态图像格式的编解码器(CODEC),并且可以方便地支持硬件/软件编解码器插件。 多媒体框架架构: 在 ...

    Android多媒体框架初步分析

    首先,Android多媒体框架是建立在PacketVideo公司的OpenCORE平台上,这个平台支持多种通用的音频、视频和静态图像格式的编解码器。OpenMAX 1L interface接口的使用使得硬件和软件编解码插件的扩展变得更加便捷。常见...

    Android多媒体框架分析

    - **基础实现**:Android多媒体框架基于第三方PacketVideo公司的OpenCORE平台实现。 - **功能支持**:支持常见的音频、视频、静态图像格式。 - **扩展性**:通过OpenMAX 1L interface接口进行扩展,便于硬件/软件编...

    android的多媒体系统.pdf

    - **外部OpenCore项目**: 包含多种编解码器和多媒体处理组件,例如PVPlayer和PVAuthor。 - **PVPlayer**: 用于播放多媒体内容。 - **PVAuthor**: 用于创建或编辑多媒体内容。 #### 三、多媒体框架的关键库 **3.1 ...

    深入浅出android多媒体

    PacketVideo作为一家公司,其开发的OpenCore多媒体框架为Android提供了强大的多媒体支持。 - **地位作用**:在Android系统中,OpenCore扮演着至关重要的角色,负责处理音频和视频的播放与录制。 ##### 1.2 主要组成...

    Android的多媒体系统

    OpenCore是Android多媒体框架中的一个关键组成部分,提供了基础的编解码能力。它支持多种编解码器,允许开发者创建高性能的多媒体应用程序。 #### 二、多媒体框架的关键组件 **2.1 MediaService** MediaService是...

    Android多媒体核心及其插件

    - Android多媒体处理的核心架构由多个层次组成,包括本地多媒体引擎、本地多媒体框架、JNI以及Java多媒体框架等。 - OpenCore和Stagefright作为主要的多媒体引擎,各有特点并支持多种类型的插件。 - 多媒体插件的...

Global site tag (gtag.js) - Google Analytics