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的状态转换:
实例化Engine后,Engine处在IDLE状态;
通过API AddDataSource()指定数据源后,调用Init()进入INITIALIZED,意味着数据源已经被初始化;
在INITIALIZED状态时,调用AddDataSink()指定data sink,状态不变;
指定数据源和sink后,用户调用Prepare(),是Engine构建数据流Graph中所需要的PVMF node,并进入PREPARED;
6)媒体数据带有的timestamp与当前回放时钟值比较已决定是否同步输出,