Android利用stagefright进行音视频文件的解析,其中OggExtractor类继承MediaExtractor类。ogg是一种多媒体容器,官网(http://www.xiph.org/)提供免费开源的音视频格式。OGG每页之间相互独立,都包含了各自应有的信息,页的大小是可变的,通常为4-8KB,最大值不超过65307字节(27+255+255×255=65307)。页由页头部(pageheader)和页数据(pagedata)组成。OggExtractor.cpp中的readPage()函数会读取页头部,页头部总共27个字节。
页结构
struct Page {
uint64_t mGranulePosition;
int32_t mPrevPacketSize;
uint64_t mPrevPacketPos;
uint32_t mSerialNo;
uint32_t mPageNo;
uint8_t mFlags;
uint8_t mNumSegments;
uint8_t mLace[255];
};
ssize_t MyOggExtractor::readPage(off64_t offset, Page *page) {
uint8_t header[27];
ssize_t n;
if ((n = mSource->readAt(offset, header, sizeof(header)))
< (ssize_t)sizeof(header)) {