栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

[多媒体] ES格式文件读取

[多媒体] ES格式文件读取

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 



class EsFileRead
{
public:
    EsFileRead()=default;
    ~EsFileRead();
    bool openFile(const char* uri);
    bool mmapavalable();
    bool readoneframe();
    long findTag_error(long begin);
    long findTag();

    int m_fd;
    char* m_data;
    struct stat m_fileinfo;
    long offset=0;
    long idroffset=-1;
    bool findend=false;
};

EsFileRead::~EsFileRead()
{
    if(-1!=m_fd){
        close(m_fd);
    }
}

bool EsFileRead::mmapavalable()
{
    return true;
}

long EsFileRead::findTag_error(long begin)
{
    if(offset+4 >= m_fileinfo.st_size){
        return m_fileinfo.st_size;
    }

    if(m_data[offset]=='f'){
        if(m_data[offset+1] == 'f'){
            if(m_data[offset+2] == 'f'){
                if(m_data[offset+3] == 'e'){
                    offset+=4;
                    return offset;
                }else{
                    offset+=4;
                    //findTag();
                }
            }else{
                offset+=3;
                //findTag();
            }
        }else{
            offset+=2;
            //findTag();
        }
    }else{
        offset+=1;
        //findTag();
    }
    return -1;
}

long EsFileRead::findTag()
{
    if(offset < 0){
        offset=0;
    }

    if(offset+4 >= m_fileinfo.st_size-1){
        offset = 0;
        return m_fileinfo.st_size-1 + 4;  // +4 is used for compact with   "offset_2 = findTag(offset) - 4;"
    }

    if(m_data[offset]==0x00 && m_data[offset+1]==0x00 && m_data[offset+2]==0x00 && m_data[offset+3]==0x01){
        if(!findend && (m_data[offset+4] == 0x67 || m_data[offset+4] == 0x68 || m_data[offset+4] == 0x65)){
            if(idroffset==-1){
                idroffset = offset;
            }
            offset += 1;
            findTag();
        }else{
            offset += 4;
        }
    }else{
        offset += 1;
        findTag();
    }

    return offset;
}

//bool EsFileRead::readoneframe(long *offset, int* size)
bool EsFileRead::readoneframe()
{
    long offset_1 = 0;
    long offset_2 = 0;
    long offset_tmp = 0;

    findend=false;
    offset_tmp = findTag();
    if(idroffset!=-1){
        offset_1 = idroffset;
    }else{
        offset_1 = offset_tmp - 4;
    }

    findend=true;
    if(offset_1 != m_fileinfo.st_size-1){
        if(idroffset!=-1){
            offset_2 = offset - 4;
        }else{
            offset_2 = findTag() - 4;
        }
        offset -= 4;
    }else{
        offset_2 = m_fileinfo.st_size-1;
    }

    idroffset=-1;
    std::cout << "size : "< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/720276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号