我想使用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提供了create函数,并且其dtor受保护,这就是为什么有
release
函数的原因。但是在那种情况下,我使用来自用该FileByteStream初始化的解析器的指针和const引用。我们如何期望
return (trackList.ItemCount()>1);
在release
之后工作?根据我所做的实验,它可以运行,但是我可能很幸运!
你有什么主意吗?
我考虑过将
inputFileStream
作为shared_ptr
来仅在返回评估之后释放资源。更安全吗? 最佳答案
简单有什么问题
bool hasMultipleTracks = trackList.ItemCount() > 1;
inputFileStream->Release();
return hasMultipleTracks;