Android视频文件格式解析相关分析

引用:http://blog.csdn.net/wstarx/archive/2008/12/17/3541458.aspx

以上,是前辈摸索出的一条线索,但是不全面,至少对我现在的工作来说如此.

其以WAV格式为突破口,止步于CreatePVMFWAVFFParserNode().最后这段代码位置是在 external/opencore/engines/player/config/linux_nj/pv_player_node_registry.cpp中.

 

我们已经知道3gp格式是支持的,但是android代码中并没有明确的有关3gp的文件解析node或者代码,在PVPlayer的方法中enqueueCommand(),再在playerdriver的Run()中,dequeueCommand()并且根据command->code(),做相应的操作.

其中就有handleSetDataSource(),这个方法看上去与文件格式解析相关.

 

handleSetDataSource()中会调用pv_player_engine.cpp中的AddDataSource()方法,发出一个Command:“PVP_ENGINE_COMMAND_ADD_DATA_SOURCE”到队列中,

接着在Run()中的switch(...)语句中,执行DoAddDataSource(),在这里

if(iSourceFormat=SOURCEFORMAT_UNKNOWN)

{

     retval = DoQuerySourceFormat(...);

}

else

{

      ...

}

 

DoQuerySourceFormat()中,参数iPlayerRecognizerRegistry闪亮登场,其类型为PVPlayerRecognizerRegistry,通过

iPlayerRecognizerRegistry.QueryFormatType(iDataSource->GetDataSourceURL(), *this, (OsclAny*) context));

在QueryFormatType()中,会使用传入的文件路径创建一个PVMIDataStreamSyncInterfaceRefFactory对象,并强制转换成PVMFDataStreamFactory*.再使用PVMFRecognizerRegistry::Recognize(iRecSessionId, *iFileDataStreamFactory, NULL, iRecognizerResult, NULL);它会继续向下调用PVMFRecognizerRegistryImpl::Recognize(...),将参数保存,再生成一个CMD:PVMFRECREG_COMMAND_RECOGNIZE,再在PVMFRecognizerRegistryImpl::Run()中,通过switch(...)执行doRecognize().

 

可以理解为所有解析的node都保存在iRecognizerPluginFactoryList中,再在doRecognaize()中遍历,以获得合适的node(I am not sure!XD)

 

 

以下可以忽略

/*******************************************************************************************

初始化位置是在PVPlayerEngine::PopulateRecognizerRegistry(...)中,这个函数是被PopulateAllRegistries(...)调用,而PopulateAllRegistries(...)在PlayerEngine的Construct()中调用,并且其在调用PopulateRecognizerRegistry(...)之前,还会调用一个PopulateNodeRegistry(...),暂且把PopulateAllRegistries(...)放下不谈,回到PopulateRecognizerRegistry(...)中,首先通过读取config文件(/system/etc/pvplayer.conf),将其中与PV_RECOGNIZER_INTERFACE相同Uuid的动态库加载进来...(这里为什么会指定一个Uuid呢?这个Uuid在config文件中对应的正是 libopencoremp4reg.so,也就是说,格式为UNKNOWN的,都用这个库来识别?...继续看). 这个库本身就是opencore的一个node,生成它的Android.mk位于"external/opencore/tools_v2/build/modules/linux_mp4/node_registry",可以看出,他其实就是nodes/pvmp4ffparsernode,到此,文件解析的动态库也已加载.明天来继续往下看,今天再温习一下流程,思索下...

*********************************************************************************************/

 

 

好吧,其实android 1.5不支持.MP4的现象是因为我的.mp4文件的声音部分是用的aac编码,而android本身只支持wav的音频编码...so,虽然能够识别出是video/mp4,但是却会导致播放器die(因为我的播放器没做纠错)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值