我想使用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
只在返回评估后才释放资源。它更安全吗?
答案 0 :(得分:1)
简单
有什么问题bool hasMultipleTracks = trackList.ItemCount() > 1;
inputFileStream->Release();
return hasMultipleTracks;