android文档

来源:互联网 发布:nginx泛解析 编辑:程序博客网 时间:2024/06/13 16:01

1 OMX Core Integration Guide

1)由于opencore中的omx是PV自己做的omx,core和component之间的一些API是"internal, implementation specific, not prescribed by OMX specification”,而且PV可能随时对其更改,所以在想opencore中加入新的组件时必须要提供相应的core。

2)这样就要解决多个core的共存问题,PV公司提供了一层封装:MasterCore,最后在生成so库时,有两种方式来添加这层封装:

A:先构建没有封装的so库,再添加封装,最终生成带有封装的so库;

B:同时编译,直接生成带有封装的so库。

3)建议在omx中添加API接口:opencore通过此API来获取音视频的相关信息;

OMX_BOOL OMXConfigParser ( OMX_PTR aInputParameters,
OMX_PTR aOutputParameters);

4)对于生成的so库要在配置文件中注册,格式如下:

(OMX Core API OsclUuid), “shared library name.so”
其中UUID为:(0xa054369c,0x22c5,0x412e,0x19,0x17,0x87,0x4c,0x1a,0x19,0xd4,0x5f),唯一确定不可更改;

5)输入buffer中如果包含一个frame结尾,则要将flag:OMX_BUFFERFLAG_ENDOFFRAME设置为真,标志一帧的结束;

6)帧在buffer中的存储情况:一个buffer中存有;

多个完整的frame;

一个完整的frame;

一个frame的一部分,OMX_BUFFERFLAG_ENDOFFRAME只能在包含frame最后一部分的buffer中设置为真,注意一个buffer只能包含一个frame的一部分;

2 PVPlayer SDK Developer's Guide

1)PVPlayer SDK中PVPlayer Engine是核心部分,Engine通过使用Node和Node Graphs来处理数据,实现Node,构建Graph;

2)控制流:PVPlayer SDK的控制流来自PVPlayer的使用者,通常是一个player应用程序,top-down,Engine接收来自应用的请求,然后传递给PVMF Nodes,相连的Nodes之间也有控制流,但大部分存在于PVPlayer engine和PVMF nodes之间;

3)数据流:SDK处理数据是通过几个相连的Node构成Graph来处理的;

4)Engine处理命令多数是异步处理,但也有一部分是同步处理,这可以通过处理的返回值来区分,同步命令返回的是PVMF status code,标志命令成功或是出错,出错是什么错,而所有的异步命令返回命令的ID,异步命令要指明回调函数;

5)Engine的状态转换:

image

实例化Engine后,Engine处在IDLE状态;

通过API AddDataSource()指定数据源后,调用Init()进入INITIALIZED,意味着数据源已经被初始化;

在INITIALIZED状态时,调用AddDataSink()指定data sink,状态不变;

指定数据源和sink后,用户调用Prepare(),是Engine构建数据流Graph中所需要的PVMF node,并进入PREPARED;

6)媒体数据带有的timestamp与当前回放时钟值比较已决定是否同步输出,