0

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

    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 类提供创建函数并保护其 dtor,这就是为什么有一个release函数。

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

根据我所做的实验,它有效,但我可能很幸运!你有什么想法吗?我考虑过inputFileStreamshared_ptr在返回评估之后才释放资源。它更安全吗?

4

1 回答 1

1

简单的有什么不好

bool hasMultipleTracks = trackList.ItemCount() > 1;
inputFileStream->Release();
return hasMultipleTracks;
于 2013-09-03T13:44:26.533 回答