diff --git a/trunk/src/kernel/srs_kernel_mp4.cpp b/trunk/src/kernel/srs_kernel_mp4.cpp index 29e58d816..ddcce00be 100644 --- a/trunk/src/kernel/srs_kernel_mp4.cpp +++ b/trunk/src/kernel/srs_kernel_mp4.cpp @@ -4791,10 +4791,10 @@ srs_error_t SrsMp4SampleManager::load(SrsMp4MovieBox* moov) SrsMp4Sample* SrsMp4SampleManager::at(uint32_t index) { - if (index >= samples.size() - 1) { - return NULL; + if (index < samples.size()) { + return samples.at(index); } - return samples.at(index); + return NULL; } void SrsMp4SampleManager::append(SrsMp4Sample* sample) diff --git a/trunk/src/utest/srs_utest_kernel.cpp b/trunk/src/utest/srs_utest_kernel.cpp index b6784b562..7e4d32f11 100644 --- a/trunk/src/utest/srs_utest_kernel.cpp +++ b/trunk/src/utest/srs_utest_kernel.cpp @@ -4688,8 +4688,34 @@ VOID TEST(KernelMP4Test, CoverMP4Codec) uint16_t ft, ct; uint32_t dts, pts, nb_sample; uint8_t* sample; + + EXPECT_TRUE(srs_success == dec.read_sample(&ht, &ft, &ct, &dts, &pts, &sample, &nb_sample)); + EXPECT_EQ(0, (int)dts); + EXPECT_EQ(41, nb_sample); + EXPECT_EQ(SrsMp4HandlerTypeVIDE, ht); + EXPECT_EQ(SrsAudioAacFrameTraitSequenceHeader, ct); + srs_freepa(sample); + + EXPECT_TRUE(srs_success == dec.read_sample(&ht, &ft, &ct, &dts, &pts, &sample, &nb_sample)); + EXPECT_EQ(0, (int)dts); + EXPECT_EQ(2, nb_sample); + EXPECT_EQ(SrsMp4HandlerTypeSOUN, ht); + EXPECT_EQ(SrsAudioAacFrameTraitSequenceHeader, ct); + srs_freepa(sample); + + EXPECT_TRUE(srs_success == dec.read_sample(&ht, &ft, &ct, &dts, &pts, &sample, &nb_sample)); + EXPECT_EQ(0, (int)dts); + EXPECT_EQ(87, nb_sample); + EXPECT_EQ(SrsMp4HandlerTypeSOUN, ht); + EXPECT_NE(SrsAudioAacFrameTraitSequenceHeader, ct); + srs_freepa(sample); + EXPECT_TRUE(srs_success == dec.read_sample(&ht, &ft, &ct, &dts, &pts, &sample, &nb_sample)); EXPECT_EQ(0, (int)dts); + EXPECT_EQ(127, nb_sample); + EXPECT_EQ(SrsMp4HandlerTypeVIDE, ht); + EXPECT_NE(SrsAudioAacFrameTraitSequenceHeader, ct); + srs_freepa(sample); } if (true) {