文件类型的识别在recognizer部分,文件类型一经确认,随后就会初始化对应的音频、视频解码的node。现在的问题是 opencore是怎么分离出各自的音频、视频流并输送到对应的解码node上?

解决方案 »

  1.   


    这个应该还没到解码那部分的吧… 比如一个mp4文件(aac+avc),在recognizer分析了之后,肯定会初始化aac和avc对应的解码器node。我现在的问题是从mp4文件到aac_dec_node、avc_dec_node这个过程中,数据是怎么分离的,也就是怎么从mp4文件中分离出音频流和视频流,然后输送至对应的node中,然后进行各自的解码…大概瞄了下源码目录,里边有个mp4对应的parser子目录,opencore\fileformats\mp4\parser,具体源码还没细看,应该在这里的吧  呵呵
      

  2.   

    在对应的parserNode中,有个什么trackInfo的东西会储存这些信息
      

  3.   

    opencore\fileformats\mp4\parser 完成的是解析的核心功能,opencore将此parser包装成了对应的node,这样才能与其他的node相连而运行起来,对应的code在文件夹nodes/pvmp4ffparsernode 下面,取得音视频数据的函数是:PVMFMP4FFParserNode::RetrieveTrackData,取得数据以后通过PVMFMP4FFParserNode::SendTrackData 将数据发送到对应的codec node进行解码。实现过程你得自己去研究。
      

  4.   

    还没研究这么细recognizer──>parserNode->decNode->sinkNode
    parser中的内容实在巨大现在还没仔细研究
      

  5.   


    你的认识有误区,recognizer是另外一条路,用来识别MP4,MP3等媒体格式,以及格式中的封面,长度,等信息,识别出来的文件才能被playerengine播放,不可混为一谈。
      

  6.   

    recognizer是一个预处理一样的吧。只有媒体文件被正确的识别之后,得到一个MIME TYPE,才能去建立相应的parserNode去解析,然后通过query Interface 去获得 PVMFMetadataExtensionInterface 指针,其实就是Node本身了,来获得一些媒体信息吧,我的理解是这个样子
      

  7.   

    fileformat node module这三个目录下都有相应的文件,fileformat中实现文件读写和解析,node 写主要调用fileformat里的类实现opencore标准的NODE接口,module下的实现文件格式的识别还有注册Node
      

  8.   


    运气不错,你不用研究opencore了,研究libstagefright吧,google已经往这个方向转了。
    不过libstagefright用的openmax component还是来自opencore的。
      

  9.   

    不知道为什么目前2.2中是用了stagefright
    /build/core/main.mk
    272行,BUILD_WITH_FULL_STAGEFRIGHT := true
    可android目前还是保留了opencore并且在2.2中opencore还被优化了下,如果查看2.1版本android的opencore,可以看到更新了一些地方
      

  10.   

    小弟也有相关的疑问:
    engine通过datapath来管理nodes,但我在datapath里只看到这几个node: isourcenode, idecnode, isinknode,以及这几个node之间port相连的code。没有看到parsernode。parsernode既然没有跟这些node一起放在datapath里管理。那么它被放在那里了呢?在建立datasourcenode之前?在recognizer的时候就已经建立了?。。望大虾明解。还有那个track selection与datapath之间的关系我也不大清楚,个人理解datapath是对应于每条码流node的线路。但track selection的数据成员与用法貌似与其非常相似,有何意义?
      

  11.   

    我看到codec node会建立输入输出buffer,parser node是否也要建立输入输出buffer?
    parser node和codec node之间数据是如何传递的?谁能解释一下,谢谢了!
      

  12.   

    小弟也看了opencore有段时间了,从上层的mediaplayer看到pvplayer和playerdriver,再看到PVPlayerEngine。在这之前都容易看懂,看到这里就看不下去了。添加数据源、识别文件格式、解析、解码、输出,很多都是交给node去完成,具体的数据流是怎么在各个node之间传递的,现在是一头雾水啊!