首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bento4,实例管理(创建/发布)

Bento4,实例管理(创建/发布)
EN

Stack Overflow用户
提问于 2013-09-03 13:12:24
回答 1查看 190关注 0票数 0

我想使用Bento4解析MP4文件,并检查它们是否有1或几个轨道。

代码语言:javascript
复制
    AP4_ByteStream* inputFileStream = NULL;
    AP4_Result res = AP4_FileByteStream::Create(file.c_str(), AP4_FileByteStream::STREAM_MODE_READ, inputFileStream);
    if(res != AP4_SUCCESS || inputFileStream == NULL) {throw std::logic_error("Error while analyzing " + file);}

    AP4_File inputFileParser(*inputFileStream);
    AP4_Movie* pMovie = inputFileParser.GetMovie();
    const AP4_List< AP4_Track >& trackList = pMovie->GetTracks();
    inputFileStream->Release();
    return (trackList.ItemCount()>1);

类AP4_FileByteStream提供了create函数并对其dtor进行了保护,这就是为什么存在release函数的原因。

但在这种情况下,我使用指针和const引用,它们来自用FileByteStream初始化的解析器。我们怎么能期望return (trackList.ItemCount()>1);release之后工作呢?

根据我所做的实验,它是有效的,但我可能是幸运的!你知不知道?我考虑将inputFileStream作为一个shared_ptr,只在返回评估之后才释放资源。它更安全吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-03 13:44:26

任何简单的错误

代码语言:javascript
复制
bool hasMultipleTracks = trackList.ItemCount() > 1;
inputFileStream->Release();
return hasMultipleTracks;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18593264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档