本帖最后由 ameyume 于 2011-07-23 13:30:21 编辑

解决方案 »

  1.   

    在执行注册后,什么时候SniffMP3被调用的呢?
    RegisterSniffer(SniffMP3);
      

  2.   

    在DataSource::sniff()中通过下面的函数指针,调用的相应sniff函数
    if ((*it)(this, &newMimeType, &newConfidence, &newMeta)) {
    而在MediaExtractor::Create函数中调用了DataSource的sniff函数
    if (!source->sniff(&tmp, &confidence, &meta)) {
      

  3.   

    sniff的作用到底是什么呢?怎么没有大侠指点一下啊?急切,想知道!
      

  4.   

    sniff是对要播放的多媒体文件进行探测,因为系统并不清楚该文件时mp3,还是MP4或者wav等等格式。当然,需要每个格式都要实现自己的sniffXXX方法(即读入一小段数据,按照要求格式来比对读入的这一小段内容是否满足标准格式),然后把各自的sniffXXX方法注册到DataSource里面,形成一个链表gSniffers,然后在DataSource::sniff函数里面对链表遍历,其实就是分别调用各个注册过的sniffXXX函数,知道某个函数返回为true为止,否则不认识该文件,也就无法解析,后面也就无法解码播放了。
      

  5.   

    其实就是分析一下,这个文件大概属于那种类型文件,是mp3还是mp4