From 579678d6a6048c661a57ebd436d5ec0b986ebe93 Mon Sep 17 00:00:00 2001 From: Kongqun Yang Date: Wed, 1 Jun 2016 16:28:56 -0700 Subject: [PATCH] Fixed a Opus in Mp4 parsing problem - Also added end to end test in packager_test.py Closes Issue #83 Change-Id: I7a8e695a36e654507b75d558710db1ce8867a916 --- packager/app/test/packager_test.py | 62 ++++++++---------- .../bear-320x240-opus-cenc-golden.mp4 | Bin 0 -> 28343 bytes .../testdata/bear-320x240-opus-golden.mp4 | Bin 0 -> 27342 bytes ... => bear-320x240-opus-vp9-cenc-golden.mpd} | 19 +++++- packager/media/base/audio_stream_info.cc | 4 +- .../media/formats/mp4/mp4_media_parser.cc | 2 + 6 files changed, 48 insertions(+), 39 deletions(-) create mode 100644 packager/app/test/testdata/bear-320x240-opus-cenc-golden.mp4 create mode 100644 packager/app/test/testdata/bear-320x240-opus-golden.mp4 rename packager/app/test/testdata/{bear-320x240-vp9-cenc-golden.mpd => bear-320x240-opus-vp9-cenc-golden.mpd} (52%) diff --git a/packager/app/test/packager_test.py b/packager/app/test/packager_test.py index ce220eef10..08e4754c90 100755 --- a/packager/app/test/packager_test.py +++ b/packager/app/test/packager_test.py @@ -103,11 +103,10 @@ class PackagerAppTest(unittest.TestCase): def testPackageAvcTs(self): # Currently we only support live packaging for ts. self.packager.Package( - self._GetStreams( - ['audio', 'video'], - output_format='ts', - live=True, - test_files=['bear-640x360.ts']), + self._GetStreams(['audio', 'video'], + output_format='ts', + live=True, + test_files=['bear-640x360.ts']), self._GetFlags(live=True)) self._DiffLiveGold(self.output[0], 'bear-640x360-a-golden', @@ -129,10 +128,9 @@ class PackagerAppTest(unittest.TestCase): def testPackageVp9Webm(self): self.packager.Package( - self._GetStreams( - ['audio', 'video'], - output_format='webm', - test_files=['bear-320x240-vp9-opus.webm']), + self._GetStreams(['audio', 'video'], + output_format='webm', + test_files=['bear-320x240-vp9-opus.webm']), self._GetFlags()) self._DiffGold(self.output[0], 'bear-320x240-opus-golden.webm') self._DiffGold(self.output[1], 'bear-320x240-vp9-golden.webm') @@ -219,15 +217,17 @@ class PackagerAppTest(unittest.TestCase): self._DiffGold(self.mpd_output, 'bear-640x360-vp8-cenc-golden.mpd') self._VerifyDecryption(self.output[0], 'bear-640x360-vp8-golden.mp4') - def testPackageVp9Mp4WithEncryption(self): + def testPackageOpusVp9Mp4WithEncryption(self): self.packager.Package( - self._GetStreams(['video'], + self._GetStreams(['audio', 'video'], output_format='mp4', test_files=['bear-320x240-vp9-opus.webm']), self._GetFlags(encryption=True)) - self._DiffGold(self.output[0], 'bear-320x240-vp9-cenc-golden.mp4') - self._DiffGold(self.mpd_output, 'bear-320x240-vp9-cenc-golden.mpd') - self._VerifyDecryption(self.output[0], 'bear-320x240-vp9-golden.mp4') + self._DiffGold(self.output[0], 'bear-320x240-opus-cenc-golden.mp4') + self._DiffGold(self.output[1], 'bear-320x240-vp9-cenc-golden.mp4') + self._DiffGold(self.mpd_output, 'bear-320x240-opus-vp9-cenc-golden.mpd') + self._VerifyDecryption(self.output[0], 'bear-320x240-opus-golden.mp4') + self._VerifyDecryption(self.output[1], 'bear-320x240-vp9-golden.mp4') def testPackageWithEncryptionAndRandomIv(self): self.packager.Package( @@ -280,8 +280,7 @@ class PackagerAppTest(unittest.TestCase): def testPackageWithLiveProfile(self): self.packager.Package( - self._GetStreams( - ['audio', 'video'], live=True), + self._GetStreams(['audio', 'video'], live=True), self._GetFlags(live=True)) self._DiffLiveGold(self.output[0], 'bear-640x360-a-live-golden') self._DiffLiveGold(self.output[1], 'bear-640x360-v-live-golden') @@ -289,8 +288,7 @@ class PackagerAppTest(unittest.TestCase): def testPackageWithLiveProfileAndEncryption(self): self.packager.Package( - self._GetStreams( - ['audio', 'video'], live=True), + self._GetStreams(['audio', 'video'], live=True), self._GetFlags(encryption=True, live=True)) self._DiffLiveGold(self.output[0], 'bear-640x360-a-live-cenc-golden') self._DiffLiveGold(self.output[1], 'bear-640x360-v-live-cenc-golden') @@ -299,8 +297,7 @@ class PackagerAppTest(unittest.TestCase): def testPackageWithLiveProfileAndEncryptionAndDashIfIop(self): self.packager.Package( - self._GetStreams( - ['audio', 'video'], live=True), + self._GetStreams(['audio', 'video'], live=True), self._GetFlags(encryption=True, live=True, dash_if_iop=True)) self._DiffLiveGold(self.output[0], 'bear-640x360-a-live-cenc-golden') @@ -310,11 +307,10 @@ class PackagerAppTest(unittest.TestCase): def testPackageWithLiveProfileAndEncryptionAndDashIfIopWithMultFiles(self): self.packager.Package( - self._GetStreams( - ['audio', 'video'], - live=True, - test_files=['bear-1280x720.mp4', 'bear-640x360.mp4', - 'bear-320x180.mp4']), + self._GetStreams(['audio', 'video'], + live=True, + test_files=['bear-1280x720.mp4', 'bear-640x360.mp4', + 'bear-320x180.mp4']), self._GetFlags(encryption=True, live=True, dash_if_iop=True)) self._DiffLiveGold(self.output[2], 'bear-640x360-a-live-cenc-golden') @@ -325,8 +321,7 @@ class PackagerAppTest(unittest.TestCase): def testPackageWithLiveProfileAndKeyRotation(self): self.packager.Package( - self._GetStreams( - ['audio', 'video'], live=True), + self._GetStreams(['audio', 'video'], live=True), self._GetFlags(encryption=True, key_rotation=True, live=True)) @@ -339,8 +334,7 @@ class PackagerAppTest(unittest.TestCase): def testPackageWithLiveProfileAndKeyRotationAndDashIfIop(self): self.packager.Package( - self._GetStreams( - ['audio', 'video'], live=True), + self._GetStreams(['audio', 'video'], live=True), self._GetFlags(encryption=True, key_rotation=True, live=True, @@ -492,11 +486,11 @@ class PackagerAppTest(unittest.TestCase): else: match = filecmp.cmp(test_output, golden_file) if not match: - p = subprocess.Popen( - ['git', '--no-pager', 'diff', '--color=auto', '--no-ext-diff', - '--no-index', golden_file, test_output], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + p = subprocess.Popen(['git', '--no-pager', 'diff', '--color=auto', + '--no-ext-diff', '--no-index', golden_file, + test_output], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) output, error = p.communicate() self.fail(output + error) diff --git a/packager/app/test/testdata/bear-320x240-opus-cenc-golden.mp4 b/packager/app/test/testdata/bear-320x240-opus-cenc-golden.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..396d04163322175f14b859066bd9d5c11770e84d GIT binary patch literal 28343 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

`lcjtV$wYN|F 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 literal 0 HcmV?d00001 diff --git a/packager/app/test/testdata/bear-320x240-vp9-cenc-golden.mpd b/packager/app/test/testdata/bear-320x240-opus-vp9-cenc-golden.mpd similarity index 52% rename from packager/app/test/testdata/bear-320x240-vp9-cenc-golden.mpd rename to packager/app/test/testdata/bear-320x240-opus-vp9-cenc-golden.mpd index e3e102409f..a7f82b57ba 100644 --- a/packager/app/test/testdata/bear-320x240-vp9-cenc-golden.mpd +++ b/packager/app/test/testdata/bear-320x240-opus-vp9-cenc-golden.mpd @@ -1,9 +1,22 @@ - + - - + + + + + + AAAAMHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABAxMjM0NTY3ODkwMTIzNDU2 + + output_audio.mp4 + + + + + + + AAAAMHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABAxMjM0NTY3ODkwMTIzNDU2 diff --git a/packager/media/base/audio_stream_info.cc b/packager/media/base/audio_stream_info.cc index 5b25437e53..c950ffcd86 100644 --- a/packager/media/base/audio_stream_info.cc +++ b/packager/media/base/audio_stream_info.cc @@ -99,11 +99,11 @@ std::string AudioStreamInfo::ToString() const { StreamInfo::ToString().c_str(), AudioCodecToString(codec_).c_str(), sample_bits_, num_channels_, sampling_frequency_, language().c_str()); if (seek_preroll_ns_ != 0) { - base::StringAppendF(&str, " seek_preroll_ns: %" PRIu64 "d\n", + base::StringAppendF(&str, " seek_preroll_ns: %" PRIu64 "\n", seek_preroll_ns_); } if (codec_delay_ns_ != 0) { - base::StringAppendF(&str, " codec_delay_ns: %" PRIu64 "d\n", + base::StringAppendF(&str, " codec_delay_ns: %" PRIu64 "\n", codec_delay_ns_); } return str; diff --git a/packager/media/formats/mp4/mp4_media_parser.cc b/packager/media/formats/mp4/mp4_media_parser.cc index f8fe144b56..158b383380 100644 --- a/packager/media/formats/mp4/mp4_media_parser.cc +++ b/packager/media/formats/mp4/mp4_media_parser.cc @@ -61,6 +61,8 @@ VideoCodec FourCCToVideoCodec(FourCC fourcc) { AudioCodec FourCCToAudioCodec(FourCC fourcc) { switch(fourcc) { + case FOURCC_Opus: + return kCodecOpus; case FOURCC_dtsc: return kCodecDTSC; case FOURCC_dtsh: