mirror of
https://github.com/androidx/media.git
synced 2025-04-29 22:36:54 +08:00
Adding API and internal export support for audio gaps in sequences.
PiperOrigin-RevId: 678235289
This commit is contained in:
parent
43765b7567
commit
076eea283e
@ -49,6 +49,7 @@
|
||||
allow invoking events of subclass listeners
|
||||
([1736](https://github.com/androidx/media/pull/1736)).
|
||||
* Transformer:
|
||||
* Add export support for gaps in sequences of audio EditedMediaItems.
|
||||
* Track Selection:
|
||||
* Extractors:
|
||||
* Fix preroll sample handling for non-keyframe media start positions when
|
||||
|
@ -0,0 +1,227 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 2
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2078200747
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1746076349
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1572855937
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 701978997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1243111139
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1322796125
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 183250677
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1653767665
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1354849623
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -394780569
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1818125983
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2040268451
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1205101453
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1680621511
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1417062205
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 391927517
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1602519453
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -889560817
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1844125309
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1254048247
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 862533775
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1056907509
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 614586437
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1422444303
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1521025139
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -645048879
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1964215627
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 794382801
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1742698007
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1820518143
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1778289323
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1268893547
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1838744749
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1671917515
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1340018589
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1917601633
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -265336963
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -784922721
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1193402155
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1103096997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1473134533
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1817808281
|
||||
size = 272
|
||||
isKeyFrame = true
|
||||
released = true
|
@ -0,0 +1,227 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 2
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2078200747
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1746076349
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1572855937
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 701978997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 459593640
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 177383240
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 565637567
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1269391254
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1473724630
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1365108398
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 15208603
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -149452152
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 568136563
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1569944195
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1581189639
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 344240733
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1247810281
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 723599439
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1844125309
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1254048247
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 862533775
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1056907509
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 614586437
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1422444303
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1521025139
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -645048879
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1964215627
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 794382801
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1742698007
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1820518143
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1778289323
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1268893547
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1838744749
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1671917515
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1340018589
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1917601633
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -265336963
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -784922721
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1193402155
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1103096997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1473134533
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1817808281
|
||||
size = 272
|
||||
isKeyFrame = true
|
||||
released = true
|
@ -0,0 +1,117 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 1
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -477126770
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 779113371
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 45842530
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2001000243
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -187462316
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -309708822
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1030869338
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1134039798
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2131288947
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1159697593
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -889164698
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1380568930
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1722863050
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1365744081
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -81471997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -6915052
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1634845963
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1252305359
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2127515647
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2077308846
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1055925064
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1128351030
|
||||
size = 2184
|
||||
isKeyFrame = true
|
||||
released = true
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,117 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 2
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1728208641
|
||||
size = 2184
|
||||
isKeyFrame = true
|
||||
released = true
|
@ -0,0 +1,377 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 2
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1549267417
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 189152495
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1814391561
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -422124093
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -155446957
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1488079801
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1669809701
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -894031225
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 40356789
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 971335451
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1732134737
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -446879687
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 868401927
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1206562483
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1400548769
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1068263999
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2145054801
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1570577127
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 10822971
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 688645803
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2108835899
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -722381595
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1250628323
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 244326497
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -698620401
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 271098305
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1004000469
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1556734443
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -903836437
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -177535827
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -595024459
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2131779733
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1910157521
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 131901723
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 583017977
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 163786317
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 387678787
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -884773583
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1782565003
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -270552755
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -371096827
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1960606887
|
||||
size = 872
|
||||
isKeyFrame = true
|
||||
released = true
|
@ -0,0 +1,592 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 2
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1039756463
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 532104865
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2624455
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 861767379
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 374370895
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -101038951
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1221457977
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 668147831
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -912268579
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1066036765
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1280807051
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -331910423
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -601176327
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1258553699
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1298154949
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1230948091
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1309853349
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1932471341
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1319660815
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 203254827
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -38648823
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 41026117
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 665344669
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1362552447
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -811356717
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1083196893
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 481568515
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1740292951
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 176097221
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1538356855
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1523294877
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1035272899
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2006397059
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1229497131
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 575153873
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -180951997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -155506985
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 771687811
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1771428289
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 415627769
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1851518133
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1491589801
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1451338191
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2030338071
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2140922517
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1748392625
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1287891629
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1923200619
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1521215509
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1640206823
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 210873943
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1744451301
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2000153215
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1039735551
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -109960687
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -370495703
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1284650595
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1361253863
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -857651477
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1997614047
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1362337995
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1629579951
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1326900633
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1032738365
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 415627231
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 57107875
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1660454425
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 285979697
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1504030063
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1211281407
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 820691967
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 319369447
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -245890127
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 151928257
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2008077475
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1938059573
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1983275801
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1943585545
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1433346369
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1711471215
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1312724333
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -675636013
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -12375949
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -180443079
|
||||
size = 1144
|
||||
isKeyFrame = true
|
||||
released = true
|
@ -0,0 +1,302 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 1
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -77784020
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1487579866
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -955640128
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1797926221
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1304162335
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 87515422
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1134039798
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2131288947
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1159697593
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -889164698
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1380568930
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1722863050
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1365744081
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -81471997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -6915052
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1634845963
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1252305359
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2127515647
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2077308846
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1055925064
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1806711606
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1326368952
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -161801624
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2080056822
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -716932048
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1439402914
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -793688784
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 34855870
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1205979058
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -690080937
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -542923942
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1305696330
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 785152593
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1048551992
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 522695938
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 575615445
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 372293125
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -547323125
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 119556475
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1819928231
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2147026131
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -293825684
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -742988832
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1521393535
|
||||
size = 572
|
||||
isKeyFrame = true
|
||||
released = true
|
@ -0,0 +1,192 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 1
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -77784020
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1487579866
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -955640128
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1797926221
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1304162335
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 87515422
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1134039798
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2131288947
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1159697593
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -889164698
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1380568930
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1722863050
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1365744081
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -81471997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -6915052
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1634845963
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1252305359
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2127515647
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2077308846
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1055925064
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1806711606
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1999233
|
||||
size = 2484
|
||||
isKeyFrame = true
|
||||
released = true
|
@ -0,0 +1,302 @@
|
||||
format audio:
|
||||
averageBitrate = 131072
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
channelCount = 1
|
||||
sampleRate = 44100
|
||||
pcmEncoding = 2
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -77784020
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1487579866
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -955640128
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1797926221
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1304162335
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 87515422
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1134039798
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -2131288947
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1159697593
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -889164698
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1380568930
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1722863050
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1365744081
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -81471997
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -6915052
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1634845963
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1252305359
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2127515647
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2077308846
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1055925064
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1806711606
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1742602241
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -635847032
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1881983178
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -728439441
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 515653227
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -391208104
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 166656461
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 330396328
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -116386074
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 569267689
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1316476459
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -223671612
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1465862447
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2040352837
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1371156112
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1657641665
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1745756564
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2067094482
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 2009678119
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -1673523012
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1191811455
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = -120295709
|
||||
size = 4096
|
||||
isKeyFrame = true
|
||||
sample:
|
||||
trackType = audio
|
||||
dataHashCode = 1474861853
|
||||
size = 572
|
||||
isKeyFrame = true
|
||||
released = true
|
@ -327,6 +327,9 @@ public class TransformerAndroidTestRunner {
|
||||
}
|
||||
for (EditedMediaItemSequence sequence : composition.sequences) {
|
||||
for (EditedMediaItem editedMediaItem : sequence.editedMediaItems) {
|
||||
if (editedMediaItem.isGap()) {
|
||||
continue;
|
||||
}
|
||||
Uri mediaItemUri = checkNotNull(editedMediaItem.mediaItem.localConfiguration).uri;
|
||||
String scheme = mediaItemUri.getScheme();
|
||||
if (scheme != null && (scheme.equals("http") || scheme.equals("https"))) {
|
||||
|
@ -1610,6 +1610,74 @@ public class TransformerEndToEndTest {
|
||||
assertThat(new File(result.filePath).length()).isGreaterThan(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioCompositionWithFirstSequenceOffsetGap_isCorrect() throws Exception {
|
||||
assumeFormatsSupported(
|
||||
context,
|
||||
testId,
|
||||
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET.uri)))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addGap(100_000)
|
||||
.addItem(editedMediaItem)
|
||||
.build(),
|
||||
new EditedMediaItemSequence.Builder(editedMediaItem).build())
|
||||
.build();
|
||||
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
||||
.build()
|
||||
.run(testId, composition);
|
||||
|
||||
assertThat(new File(result.filePath).length()).isGreaterThan(0);
|
||||
assertThat(result.exportResult.processedInputs).hasSize(3);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioVideoCompositionWithSecondSequenceIntervalGap_isCorrect()
|
||||
throws Exception {
|
||||
assumeFormatsSupported(
|
||||
context,
|
||||
testId,
|
||||
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||
|
||||
EditedMediaItem videoItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET.uri))).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(
|
||||
new MediaItem.Builder()
|
||||
.setUri(MP4_ASSET.uri)
|
||||
.setClippingConfiguration(
|
||||
new MediaItem.ClippingConfiguration.Builder().setEndPositionMs(300).build())
|
||||
.build())
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder(videoItem).build(),
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addItem(editedMediaItem)
|
||||
.addGap(200_000)
|
||||
.addItem(editedMediaItem)
|
||||
.build())
|
||||
.build();
|
||||
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
||||
.build()
|
||||
.run(testId, composition);
|
||||
|
||||
assertThat(new File(result.filePath).length()).isGreaterThan(0);
|
||||
assertThat(result.exportResult.processedInputs).hasSize(4);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void analyzeAudio_completesSuccessfully() throws Exception {
|
||||
assumeFormatsSupported(
|
||||
|
@ -440,4 +440,17 @@ public final class Composition {
|
||||
this.hdrMode = hdrMode;
|
||||
this.retainHdrFromUltraHdrImage = retainHdrFromUltraHdrImage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether any {@linkplain EditedMediaItemSequence sequences} contain a {@linkplain
|
||||
* EditedMediaItemSequence.Builder#addGap(long) gap}.
|
||||
*/
|
||||
/* package */ boolean hasGaps() {
|
||||
for (int i = 0; i < sequences.size(); i++) {
|
||||
if (sequences.get(i).hasGaps()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -29,10 +29,12 @@ import androidx.media3.common.util.Util;
|
||||
import androidx.media3.exoplayer.source.MediaSource;
|
||||
import androidx.media3.extractor.mp4.Mp4Extractor;
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import java.util.Objects;
|
||||
|
||||
/** A {@link MediaItem} with the transformations to apply to it. */
|
||||
@UnstableApi
|
||||
public final class EditedMediaItem {
|
||||
/* package */ static final String GAP_MEDIA_ID = "androidx-media3-GapMediaItem";
|
||||
|
||||
/** A builder for {@link EditedMediaItem} instances. */
|
||||
public static final class Builder {
|
||||
@ -341,4 +343,12 @@ public final class EditedMediaItem {
|
||||
}
|
||||
return max(audioDurationUs, videoDurationUs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether this {@code EditedMediaItem} is a {@linkplain
|
||||
* EditedMediaItemSequence.Builder#addGap(long) gap}.
|
||||
*/
|
||||
/* package */ boolean isGap() {
|
||||
return Objects.equals(mediaItem.mediaId, GAP_MEDIA_ID);
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ package androidx.media3.transformer;
|
||||
|
||||
import static androidx.media3.common.util.Assertions.checkArgument;
|
||||
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.util.UnstableApi;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
@ -81,6 +82,26 @@ public final class EditedMediaItemSequence {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a gap to the sequence.
|
||||
*
|
||||
* <p>A gap is a period of time with no media.
|
||||
*
|
||||
* <p>Gaps are only supported in sequences of audio.
|
||||
*
|
||||
* @param durationUs The duration of the gap, in milliseconds.
|
||||
* @return This builder, for convenience.
|
||||
*/
|
||||
@CanIgnoreReturnValue
|
||||
public Builder addGap(long durationUs) {
|
||||
items.add(
|
||||
new EditedMediaItem.Builder(
|
||||
new MediaItem.Builder().setMediaId(EditedMediaItem.GAP_MEDIA_ID).build())
|
||||
.setDurationUs(durationUs)
|
||||
.build());
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* See {@link EditedMediaItemSequence#isLooping}.
|
||||
*
|
||||
@ -157,4 +178,14 @@ public final class EditedMediaItemSequence {
|
||||
!editedMediaItems.isEmpty(), "The sequence must contain at least one EditedMediaItem.");
|
||||
this.isLooping = builder.isLooping;
|
||||
}
|
||||
|
||||
/** Return whether any items are a {@linkplain Builder#addGap(long) gap}. */
|
||||
/* package */ boolean hasGaps() {
|
||||
for (int i = 0; i < editedMediaItems.size(); i++) {
|
||||
if (editedMediaItems.get(i).isGap()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
private final List<EditedMediaItem> editedMediaItems;
|
||||
private final boolean isLooping;
|
||||
private final boolean forceAudioTrack;
|
||||
private final AssetLoader.Factory assetLoaderFactory;
|
||||
private final Factory assetLoaderFactory;
|
||||
private final CompositionSettings compositionSettings;
|
||||
private final Listener sequenceAssetLoaderListener;
|
||||
private final HandlerWrapper handler;
|
||||
@ -109,7 +109,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
public SequenceAssetLoader(
|
||||
EditedMediaItemSequence sequence,
|
||||
boolean forceAudioTrack,
|
||||
AssetLoader.Factory assetLoaderFactory,
|
||||
Factory assetLoaderFactory,
|
||||
CompositionSettings compositionSettings,
|
||||
Listener listener,
|
||||
Clock clock,
|
||||
@ -117,7 +117,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
editedMediaItems = sequence.editedMediaItems;
|
||||
isLooping = sequence.isLooping;
|
||||
this.forceAudioTrack = forceAudioTrack;
|
||||
this.assetLoaderFactory = assetLoaderFactory;
|
||||
this.assetLoaderFactory = new GapInterceptingAssetLoaderFactory(assetLoaderFactory);
|
||||
this.compositionSettings = compositionSettings;
|
||||
sequenceAssetLoaderListener = listener;
|
||||
handler = clock.createHandler(looper, /* callback= */ null);
|
||||
@ -131,7 +131,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
// constructor.
|
||||
@SuppressWarnings("nullness:argument.type.incompatible")
|
||||
AssetLoader currentAssetLoader =
|
||||
assetLoaderFactory.createAssetLoader(
|
||||
this.assetLoaderFactory.createAssetLoader(
|
||||
editedMediaItems.get(0), looper, /* listener= */ this, compositionSettings);
|
||||
this.currentAssetLoader = currentAssetLoader;
|
||||
}
|
||||
@ -340,12 +340,14 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
return;
|
||||
}
|
||||
|
||||
EditedMediaItem editedMediaItem = editedMediaItems.get(currentMediaItemIndex);
|
||||
|
||||
onMediaItemChangedListener.onMediaItemChanged(
|
||||
editedMediaItems.get(currentMediaItemIndex),
|
||||
editedMediaItem,
|
||||
/* durationUs= */ (trackType == C.TRACK_TYPE_AUDIO && isLooping && decodeAudio)
|
||||
? C.TIME_UNSET
|
||||
: currentAssetDurationUs,
|
||||
/* decodedFormat= */ outputFormat,
|
||||
/* decodedFormat= */ editedMediaItem.isGap() ? null : outputFormat,
|
||||
/* isLast= */ currentMediaItemIndex == editedMediaItems.size() - 1);
|
||||
}
|
||||
|
||||
@ -544,6 +546,13 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
}
|
||||
}
|
||||
|
||||
private void onGapSignalled() {
|
||||
nonEndedTrackCount.decrementAndGet();
|
||||
if (currentMediaItemIndex < editedMediaItems.size() - 1) {
|
||||
switchAssetLoader();
|
||||
}
|
||||
}
|
||||
|
||||
private void switchAssetLoader() {
|
||||
handler.post(
|
||||
() -> {
|
||||
@ -611,4 +620,106 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
return new ClippingIterator(iterator.copyOf(), clippingValue);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Internally signals that the current asset is a {@linkplain
|
||||
* EditedMediaItemSequence.Builder#addGap(long) gap}, but does no loading or processing of media.
|
||||
*
|
||||
* <p>This component requires downstream components to handle generation of the gap media.
|
||||
*/
|
||||
private final class GapSignalingAssetLoader implements AssetLoader {
|
||||
|
||||
private static final int OUTPUT_FORMAT_RETRY_DELAY_MS = 10;
|
||||
|
||||
private final long durationUs;
|
||||
private final Format trackFormat;
|
||||
private final Format decodedFormat;
|
||||
|
||||
private boolean outputtedFormat;
|
||||
|
||||
private GapSignalingAssetLoader(long durationUs) {
|
||||
this.durationUs = durationUs;
|
||||
this.trackFormat = new Format.Builder().setSampleMimeType(MimeTypes.AUDIO_RAW).build();
|
||||
this.decodedFormat =
|
||||
new Format.Builder()
|
||||
.setSampleMimeType(MimeTypes.AUDIO_RAW)
|
||||
.setSampleRate(44100)
|
||||
.setChannelCount(2)
|
||||
.setPcmEncoding(C.ENCODING_PCM_16BIT)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
onDurationUs(durationUs);
|
||||
onTrackCount(1);
|
||||
onTrackAdded(trackFormat, SUPPORTED_OUTPUT_TYPE_DECODED);
|
||||
outputFormatToSequenceAssetLoader();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Transformer.ProgressState int getProgress(ProgressHolder progressHolder) {
|
||||
progressHolder.progress = outputtedFormat ? 99 : 0;
|
||||
return PROGRESS_STATE_AVAILABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableMap<Integer, String> getDecoderNames() {
|
||||
return ImmutableMap.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void release() {}
|
||||
|
||||
/** Outputs the gap format, scheduling to try again if unsuccessful. */
|
||||
private void outputFormatToSequenceAssetLoader() {
|
||||
try {
|
||||
if (outputtedFormat) {
|
||||
return;
|
||||
}
|
||||
|
||||
@Nullable SampleConsumerWrapper sampleConsumerWrapper = onOutputFormat(decodedFormat);
|
||||
if (sampleConsumerWrapper != null) {
|
||||
outputtedFormat = true;
|
||||
sampleConsumerWrapper.onGapSignalled();
|
||||
} else {
|
||||
handler.postDelayed(
|
||||
this::outputFormatToSequenceAssetLoader, OUTPUT_FORMAT_RETRY_DELAY_MS);
|
||||
}
|
||||
|
||||
} catch (ExportException e) {
|
||||
onError(e);
|
||||
} catch (RuntimeException e) {
|
||||
onError(ExportException.createForAssetLoader(e, ExportException.ERROR_CODE_UNSPECIFIED));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Intercepts {@link AssetLoader.Factory} calls, when {@linkplain
|
||||
* EditedMediaItemSequence.Builder#addGap(long) a gap} is detected, otherwise forwards them to the
|
||||
* provided {@link AssetLoader.Factory}.
|
||||
*
|
||||
* <p>In the case that a gap is detected, a {@link GapSignalingAssetLoader} is returned.
|
||||
*/
|
||||
private final class GapInterceptingAssetLoaderFactory implements AssetLoader.Factory {
|
||||
|
||||
private final AssetLoader.Factory factory;
|
||||
|
||||
public GapInterceptingAssetLoaderFactory(AssetLoader.Factory factory) {
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AssetLoader createAssetLoader(
|
||||
EditedMediaItem editedMediaItem,
|
||||
Looper looper,
|
||||
Listener listener,
|
||||
CompositionSettings compositionSettings) {
|
||||
if (editedMediaItem.isGap()) {
|
||||
return new GapSignalingAssetLoader(editedMediaItem.durationUs);
|
||||
}
|
||||
return factory.createAssetLoader(editedMediaItem, looper, listener, compositionSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -83,6 +83,9 @@ public final class TransformerUtil {
|
||||
|| composition.sequences.get(sequenceIndex).editedMediaItems.size() > 1) {
|
||||
return !composition.transmuxAudio;
|
||||
}
|
||||
if (composition.hasGaps()) {
|
||||
return true;
|
||||
}
|
||||
if (encoderFactory.audioNeedsEncoding()) {
|
||||
return true;
|
||||
}
|
||||
|
@ -447,6 +447,278 @@ public class CompositionExportTest {
|
||||
getCompositionDumpFilePath("seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioCompositionWithFirstSequenceAsGap_isCorrect() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioItem1000ms =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder().addGap(1_000_000).build(),
|
||||
new EditedMediaItemSequence.Builder(audioItem1000ms).build())
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
// Gaps are 44.1kHz, stereo by default. Sample.wav is 44.1kHz mono, so this test needs its own
|
||||
// dump file.
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getCompositionDumpFilePath("seq-" + "gap_1000ms" + "+seq-" + getFileName(FILE_AUDIO_RAW)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioCompositionWithFirstSequenceOffsetGap_isCorrect() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ))
|
||||
.build();
|
||||
EditedMediaItem otherAudioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addGap(100_000)
|
||||
.addItem(audioEditedMediaItem)
|
||||
.build(),
|
||||
new EditedMediaItemSequence.Builder(otherAudioEditedMediaItem).build())
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(exportResult.processedInputs).hasSize(3);
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getCompositionDumpFilePath(
|
||||
"seq-"
|
||||
+ "gap_100ms-"
|
||||
+ getFileName(FILE_AUDIO_RAW_STEREO_48000KHZ)
|
||||
+ "+seq-"
|
||||
+ getFileName(FILE_AUDIO_RAW)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioCompositionWithFirstSequencePaddingGap_isCorrect() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioItem300ms =
|
||||
new EditedMediaItem.Builder(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)
|
||||
.buildUpon()
|
||||
.setClippingConfiguration(
|
||||
new MediaItem.ClippingConfiguration.Builder()
|
||||
.setStartPositionMs(100)
|
||||
.setEndPositionMs(400)
|
||||
.build())
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem audioItem1000ms =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addItem(audioItem300ms)
|
||||
.addGap(700_000)
|
||||
.build(),
|
||||
new EditedMediaItemSequence.Builder(audioItem1000ms).build())
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getCompositionDumpFilePath(
|
||||
"seq-"
|
||||
+ getFileName(FILE_AUDIO_RAW)
|
||||
+ "+seq-"
|
||||
+ getFileName(FILE_AUDIO_RAW)
|
||||
+ "_clipped100msTo400ms-gap_700ms"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioVideoCompositionWithSecondSequenceOffsetGap_isCorrect() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioVideoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||
.build();
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder(audioVideoEditedMediaItem).build(),
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addGap(200_000)
|
||||
.addItem(audioEditedMediaItem)
|
||||
.build())
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(exportResult.processedInputs).hasSize(3);
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getCompositionDumpFilePath(
|
||||
"seq-"
|
||||
+ getFileName(FILE_AUDIO_RAW_VIDEO)
|
||||
+ "+seq-gap_200ms-"
|
||||
+ getFileName(FILE_AUDIO_RAW_STEREO_48000KHZ)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioVideoCompositionWithSecondSequenceIntervalGap_isCorrect()
|
||||
throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioVideoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||
.build();
|
||||
EditedMediaItem audio300msEditedMediaItem =
|
||||
new EditedMediaItem.Builder(
|
||||
new MediaItem.Builder()
|
||||
.setUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ)
|
||||
.setClippingConfiguration(
|
||||
new MediaItem.ClippingConfiguration.Builder().setEndPositionMs(300).build())
|
||||
.build())
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
EditedMediaItem audio500msEditedMediaItem =
|
||||
new EditedMediaItem.Builder(
|
||||
new MediaItem.Builder()
|
||||
.setUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ)
|
||||
.setClippingConfiguration(
|
||||
new MediaItem.ClippingConfiguration.Builder()
|
||||
.setStartPositionMs(300)
|
||||
.setEndPositionMs(800)
|
||||
.build())
|
||||
.build())
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder(audioVideoEditedMediaItem).build(),
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addItem(audio300msEditedMediaItem)
|
||||
.addGap(200_000)
|
||||
.addItem(audio500msEditedMediaItem)
|
||||
.build())
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(exportResult.processedInputs).hasSize(4);
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getCompositionDumpFilePath(
|
||||
"seq-"
|
||||
+ getFileName(FILE_AUDIO_RAW_VIDEO)
|
||||
+ "+seq-"
|
||||
+ getFileName(FILE_AUDIO_RAW_STEREO_48000KHZ)
|
||||
+ "_clipped0msTo300ms-"
|
||||
+ "gap_200ms-"
|
||||
+ getFileName(FILE_AUDIO_RAW_STEREO_48000KHZ)
|
||||
+ "_clipped300msTo800ms"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioVideoCompositionWithSecondSequencePaddingGap_isCorrect() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioVideoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||
.build();
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder(audioVideoEditedMediaItem).build(),
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addItem(audioEditedMediaItem)
|
||||
.addGap(100_000)
|
||||
.build())
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(exportResult.processedInputs).hasSize(3);
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getCompositionDumpFilePath(
|
||||
"seq-"
|
||||
+ getFileName(FILE_AUDIO_RAW_VIDEO)
|
||||
+ "+seq-"
|
||||
+ getFileName(FILE_AUDIO_RAW_STEREO_48000KHZ)
|
||||
+ "-gap_100ms"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioCompositionWithSecondSequenceAsGap_isCorrect() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioItem1000ms =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder(audioItem1000ms).build(),
|
||||
new EditedMediaItemSequence.Builder().addGap(1_000_000).build())
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_AUDIO_RAW));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioCompositionWithBothSequencesAsGaps_isCorrect() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence.Builder().addGap(500_000).build(),
|
||||
new EditedMediaItemSequence.Builder().addGap(500_000).build())
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context, muxerFactory.getCreatedMuxer(), getDumpFileName("gap", "500ms"));
|
||||
}
|
||||
|
||||
private static String getFileName(String filePath) {
|
||||
int lastSeparator = filePath.lastIndexOf("/");
|
||||
return filePath.substring(lastSeparator + 1);
|
||||
|
@ -141,6 +141,26 @@ public final class MediaItemExportTest {
|
||||
removeEncodersAndDecoders();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_gapOnlyExport_outputsSilence() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
|
||||
EditedMediaItemSequence gapSequence =
|
||||
new EditedMediaItemSequence.Builder().addGap(500_000).build();
|
||||
|
||||
transformer.start(new Composition.Builder(gapSequence).build(), outputDir.newFile().getPath());
|
||||
ExportResult result = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
// TODO(b/355201372) - Assert 500ms duration.
|
||||
assertThat(result.durationMs).isAtLeast(487);
|
||||
assertThat(result.durationMs).isAtMost(500);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context, muxerFactory.getCreatedMuxer(), getDumpFileName("gap", "500ms"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_audioAndVideoPassthrough_withClippingStartAtKeyFrame_completesSuccessfully()
|
||||
throws Exception {
|
||||
|
@ -29,6 +29,7 @@ import static androidx.media3.transformer.TestUtil.createChannelCountChangingAud
|
||||
import static androidx.media3.transformer.TestUtil.createPitchChangingAudioProcessor;
|
||||
import static androidx.media3.transformer.TestUtil.createTransformerBuilder;
|
||||
import static androidx.media3.transformer.TestUtil.getDumpFileName;
|
||||
import static androidx.media3.transformer.TestUtil.getSequenceDumpFilePath;
|
||||
import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@ -498,6 +499,171 @@ public final class SequenceExportTest {
|
||||
"silenceHighPitch"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_gapGap_completesSuccessfully() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence.Builder().addGap(300_000).addGap(200_000).build();
|
||||
Composition composition = new Composition.Builder(sequence).build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context, muxerFactory.getCreatedMuxer(), getDumpFileName("gap", "500ms"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_itemGapGap_completesSuccessfully() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem firstAudioItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addItem(firstAudioItem)
|
||||
.addGap(500_000)
|
||||
.addGap(200_000)
|
||||
.build();
|
||||
Composition composition = new Composition.Builder(sequence).build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getSequenceDumpFilePath(
|
||||
ImmutableList.of(FILE_AUDIO_RAW.replace("wav/", ""), "gap_500ms", "gap_200ms")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_gapGapItem_completesSuccessfully() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addGap(200_000)
|
||||
.addGap(500_000)
|
||||
.addItem(audioItem)
|
||||
.build();
|
||||
Composition composition = new Composition.Builder(sequence).build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getSequenceDumpFilePath(
|
||||
ImmutableList.of("gap_200ms", "gap_500ms", FILE_AUDIO_RAW.replace("wav/", ""))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_itemGapGapItem_completesSuccessfully() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem firstAudioItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
EditedMediaItem secondAudioItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addItem(firstAudioItem)
|
||||
.addGap(500_000)
|
||||
.addGap(200_000)
|
||||
.addItem(secondAudioItem)
|
||||
.build();
|
||||
Composition composition = new Composition.Builder(sequence).build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getSequenceDumpFilePath(
|
||||
ImmutableList.of(
|
||||
FILE_AUDIO_RAW.replace("wav/", ""),
|
||||
"gap_500ms",
|
||||
"gap_200ms",
|
||||
FILE_AUDIO_RAW.replace("wav/", ""))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_itemGapItemGap_completesSuccessfully() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem firstAudioItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
EditedMediaItem secondAudioItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addItem(firstAudioItem)
|
||||
.addGap(200_000)
|
||||
.addItem(secondAudioItem)
|
||||
.addGap(500_000)
|
||||
.build();
|
||||
Composition composition = new Composition.Builder(sequence).build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getSequenceDumpFilePath(
|
||||
ImmutableList.of(
|
||||
FILE_AUDIO_RAW.replace("wav/", ""),
|
||||
"gap_200ms",
|
||||
FILE_AUDIO_RAW.replace("wav/", ""),
|
||||
"gap_500ms")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_gapItemGapItem_completesSuccessfully() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem firstAudioItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
EditedMediaItem secondAudioItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence.Builder()
|
||||
.addGap(500_000)
|
||||
.addItem(firstAudioItem)
|
||||
.addGap(200_000)
|
||||
.addItem(secondAudioItem)
|
||||
.build();
|
||||
Composition composition = new Composition.Builder(sequence).build();
|
||||
|
||||
transformer.start(composition, outputDir.newFile().getPath());
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getSequenceDumpFilePath(
|
||||
ImmutableList.of(
|
||||
"gap_500ms",
|
||||
FILE_AUDIO_RAW.replace("wav/", ""),
|
||||
"gap_200ms",
|
||||
FILE_AUDIO_RAW.replace("wav/", ""))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void concatenateTwoAudioItems_withSameFormat_completesSuccessfully() throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user