OggExtractor.cpp中readPage()函数解读

本文深入解析Android中的OggExtractor类,特别是readPage()函数,该函数负责读取Ogg文件的页结构。Ogg是一种包含音视频信息的容器格式,其页面由页头部和数据组成,大小可变且最大不超过65307字节。通过readPage(),可以解读每个页头的27字节信息。
摘要由CSDN通过智能技术生成

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)) {
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值