当使用,MP4ReadSample获取每一帧内容,出现失败,MP4Track::IsSyncSample 似乎有点BUG. 修改如下.
bool MP4Track::IsSyncSample(MP4SampleId sampleId)
{
if (m_pStssCountProperty == NULL) {
return true;
}
u_int32_t numStss = m_pStssCountProperty->GetValue();
u_int32_t stssLIndex = 0;
u_int32_t stssRIndex = numStss - 1;
while (stssRIndex >= stssLIndex){
u_int32_t stssIndex = (stssRIndex + stssLIndex) >> 1;
MP4SampleId syncSampleId =
m_pStssSampleProperty->GetValue(stssIndex);
if (sampleId == syncSampleId) {
return true;
}
if (sampleId > syncSampleId) {
stssLIndex = stssIndex + 1;
} else {
if(stssIndex == 0)/* 添加判断,否则 出现 溢出异常. */
return false; /*返回 false*/
stssRIndex = stssIndex - 1;
}
}
return false;
}