Make onOutputFormat nullable

- This is to make sure we know about all the tracks before initializing
the SamplePipelines. This allows to set the muxer and the fallback
listener track count before the SamplePipelines are built.
- As a result, the test files had to be updated because the order in
which the tracks are written has changed.
- The ImageAssetLoader also had to be updated to call onOutputFormat
repeatedly until it returns a non-null SampleConsumer.
- Also fix the trackCount sent to the muxer and fallback listener. The
correct track count can be computed now that we know about all the
tracks before building the SamplePipelines.

PiperOrigin-RevId: 514426123
This commit is contained in:
kimvde 2023-03-06 16:58:09 +00:00 committed by Rohit Singh
parent 729066fbd6
commit 0f8b67b875
11 changed files with 1643 additions and 1578 deletions

View File

@ -1,9 +1,4 @@
format 0: format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
format 1:
id = 1 id = 1
sampleMimeType = video/avc sampleMimeType = video/avc
codecs = avc1.640034 codecs = avc1.640034
@ -14,356 +9,361 @@ format 1:
initializationData: initializationData:
data = length 30, hash F6F3D010 data = length 30, hash F6F3D010
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
format 1:
sampleMimeType = audio/mp4a-latm
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -252482306
size = 36477
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 1
dataHashCode = 67864034
size = 5341
isKeyFrame = false
presentationTimeUs = 67000
sample:
trackIndex = 1
dataHashCode = 897273234
size = 596
isKeyFrame = false
presentationTimeUs = 33000
sample:
trackIndex = 1
dataHashCode = -1549870586
size = 7704
isKeyFrame = false
presentationTimeUs = 200000
sample:
trackIndex = 1
dataHashCode = 672384813
size = 989
isKeyFrame = false
presentationTimeUs = 133000
sample:
trackIndex = 1
dataHashCode = -988996493
size = 721
isKeyFrame = false
presentationTimeUs = 100000
sample:
trackIndex = 1
dataHashCode = 1711151377
size = 519
isKeyFrame = false
presentationTimeUs = 167000
sample:
trackIndex = 1
dataHashCode = -506806036
size = 6160
isKeyFrame = false
presentationTimeUs = 333000
sample:
trackIndex = 1
dataHashCode = 1902167649
size = 953
isKeyFrame = false
presentationTimeUs = 267000
sample:
trackIndex = 1
dataHashCode = 2054873212
size = 620
isKeyFrame = false
presentationTimeUs = 233000
sample:
trackIndex = 0
dataHashCode = 555688582 dataHashCode = 555688582
size = 416 size = 416
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 0 presentationTimeUs = 0
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 2000837254 dataHashCode = 2000837254
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 4717 presentationTimeUs = 4717
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1593942879 dataHashCode = -1593942879
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 9456 presentationTimeUs = 9456
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 587837542 dataHashCode = 587837542
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 14196 presentationTimeUs = 14196
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1836423877 dataHashCode = -1836423877
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 18935 presentationTimeUs = 18935
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 874705099 dataHashCode = 874705099
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 23674 presentationTimeUs = 23674
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -269206181 dataHashCode = -269206181
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 28413 presentationTimeUs = 28413
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -58682425 dataHashCode = -58682425
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 33152 presentationTimeUs = 33152
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -859796970 dataHashCode = -859796970
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 37892 presentationTimeUs = 37892
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 711911523 dataHashCode = 711911523
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 42631 presentationTimeUs = 42631
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -252482306
size = 36477
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = 67864034
size = 5341
isKeyFrame = false
presentationTimeUs = 67000
sample:
trackIndex = 0
dataHashCode = 897273234
size = 596
isKeyFrame = false
presentationTimeUs = 33000
sample:
trackIndex = 0
dataHashCode = -1549870586
size = 7704
isKeyFrame = false
presentationTimeUs = 200000
sample:
trackIndex = 0
dataHashCode = 672384813
size = 989
isKeyFrame = false
presentationTimeUs = 133000
sample:
trackIndex = 0
dataHashCode = -988996493
size = 721
isKeyFrame = false
presentationTimeUs = 100000
sample:
trackIndex = 0
dataHashCode = 1711151377
size = 519
isKeyFrame = false
presentationTimeUs = 167000
sample:
trackIndex = 0
dataHashCode = -506806036
size = 6160
isKeyFrame = false
presentationTimeUs = 333000
sample:
trackIndex = 0
dataHashCode = 1902167649
size = 953
isKeyFrame = false
presentationTimeUs = 267000
sample:
trackIndex = 0
dataHashCode = 2054873212
size = 620
isKeyFrame = false
presentationTimeUs = 233000
sample:
trackIndex = 1
dataHashCode = -694513071 dataHashCode = -694513071
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 47370 presentationTimeUs = 47370
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1124371059 dataHashCode = -1124371059
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 52109 presentationTimeUs = 52109
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 297166745 dataHashCode = 297166745
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 56849 presentationTimeUs = 56849
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -937110638 dataHashCode = -937110638
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 61588 presentationTimeUs = 61588
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1050158990 dataHashCode = -1050158990
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 66327 presentationTimeUs = 66327
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1109510229 dataHashCode = 1109510229
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 71066 presentationTimeUs = 71066
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1297086772 dataHashCode = 1297086772
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 75805 presentationTimeUs = 75805
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1739939803 dataHashCode = -1739939803
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 80545 presentationTimeUs = 80545
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1149727930 dataHashCode = -1149727930
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 85284 presentationTimeUs = 85284
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1627652713 dataHashCode = -1627652713
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 90023 presentationTimeUs = 90023
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1556608231 dataHashCode = 1556608231
size = 405 size = 405
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 300000 presentationTimeUs = 300000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1648978019 dataHashCode = -1648978019
size = 4852 size = 4852
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 433000 presentationTimeUs = 433000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -484808327 dataHashCode = -484808327
size = 547 size = 547
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 400000 presentationTimeUs = 400000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -20706048 dataHashCode = -20706048
size = 570 size = 570
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 367000 presentationTimeUs = 367000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 2085064574 dataHashCode = 2085064574
size = 5525 size = 5525
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 567000 presentationTimeUs = 567000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -637074022 dataHashCode = -637074022
size = 1082 size = 1082
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500000 presentationTimeUs = 500000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1824027029 dataHashCode = -1824027029
size = 807 size = 807
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 467000 presentationTimeUs = 467000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1701945306 dataHashCode = -1701945306
size = 744 size = 744
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 533000 presentationTimeUs = 533000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -551926260 dataHashCode = -551926260
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 94762 presentationTimeUs = 94762
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 45987178 dataHashCode = 45987178
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 99502 presentationTimeUs = 99502
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -903675808 dataHashCode = -903675808
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 104241 presentationTimeUs = 104241
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -755916991 dataHashCode = -755916991
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 108980 presentationTimeUs = 108980
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1355207303 dataHashCode = -1355207303
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 113719 presentationTimeUs = 113719
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -975703389 dataHashCode = -975703389
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 118459 presentationTimeUs = 118459
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1933194670 dataHashCode = 1933194670
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 123198 presentationTimeUs = 123198
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -565778989 dataHashCode = -565778989
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 127937 presentationTimeUs = 127937
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1454083383 dataHashCode = 1454083383
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 132676 presentationTimeUs = 132676
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -952425536 dataHashCode = -952425536
size = 4732 size = 4732
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 700000 presentationTimeUs = 700000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1978031576 dataHashCode = -1978031576
size = 1004 size = 1004
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 633000 presentationTimeUs = 633000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -2128215508 dataHashCode = -2128215508
size = 794 size = 794
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 600000 presentationTimeUs = 600000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -259850011 dataHashCode = -259850011
size = 645 size = 645
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 667000 presentationTimeUs = 667000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1920983928 dataHashCode = 1920983928
size = 2684 size = 2684
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 833000 presentationTimeUs = 833000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1100642337 dataHashCode = 1100642337
size = 787 size = 787
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 767000 presentationTimeUs = 767000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1544917830 dataHashCode = 1544917830
size = 649 size = 649
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 733000 presentationTimeUs = 733000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -116205995 dataHashCode = -116205995
size = 509 size = 509
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 800000 presentationTimeUs = 800000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 696343585 dataHashCode = 696343585
size = 1226 size = 1226
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 967000 presentationTimeUs = 967000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -644371190 dataHashCode = -644371190
size = 898 size = 898
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 900000 presentationTimeUs = 900000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1606273467 dataHashCode = -1606273467
size = 476 size = 476
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 867000 presentationTimeUs = 867000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -571265861 dataHashCode = -571265861
size = 486 size = 486
isKeyFrame = false isKeyFrame = false

View File

@ -1,9 +1,4 @@
format 0: format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 1
sampleRate = 48000
pcmEncoding = 2
format 1:
id = 1 id = 1
sampleMimeType = video/avc sampleMimeType = video/avc
codecs = avc1.64001F codecs = avc1.64001F
@ -14,458 +9,463 @@ format 1:
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
format 1:
sampleMimeType = audio/mp4a-latm
channelCount = 1
sampleRate = 48000
pcmEncoding = 2
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -770308242
size = 36692
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 1
dataHashCode = -732087136
size = 5312
isKeyFrame = false
presentationTimeUs = 66733
sample:
trackIndex = 1
dataHashCode = 468156717
size = 599
isKeyFrame = false
presentationTimeUs = 33366
sample:
trackIndex = 1
dataHashCode = 1150349584
size = 7735
isKeyFrame = false
presentationTimeUs = 200200
sample:
trackIndex = 1
dataHashCode = 1443582006
size = 987
isKeyFrame = false
presentationTimeUs = 133466
sample:
trackIndex = 1
dataHashCode = -310585145
size = 673
isKeyFrame = false
presentationTimeUs = 100100
sample:
trackIndex = 1
dataHashCode = 807460688
size = 523
isKeyFrame = false
presentationTimeUs = 166833
sample:
trackIndex = 1
dataHashCode = 1936487090
size = 6061
isKeyFrame = false
presentationTimeUs = 333666
sample:
trackIndex = 1
dataHashCode = -32297181
size = 992
isKeyFrame = false
presentationTimeUs = 266933
sample:
trackIndex = 1
dataHashCode = 1529616406
size = 623
isKeyFrame = false
presentationTimeUs = 233566
sample:
trackIndex = 0
dataHashCode = 1868041800 dataHashCode = 1868041800
size = 22 size = 22
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 0 presentationTimeUs = 0
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1552866193 dataHashCode = 1552866193
size = 8 size = 8
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 230 presentationTimeUs = 230
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 701848493 dataHashCode = 701848493
size = 160 size = 160
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 313 presentationTimeUs = 313
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 2000505720 dataHashCode = 2000505720
size = 206 size = 206
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 1980 presentationTimeUs = 1980
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 57276327 dataHashCode = 57276327
size = 222 size = 222
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 4125 presentationTimeUs = 4125
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 382237408 dataHashCode = 382237408
size = 228 size = 228
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 6438 presentationTimeUs = 6438
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 795308374 dataHashCode = 795308374
size = 228 size = 228
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 8813 presentationTimeUs = 8813
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 356270426 dataHashCode = 356270426
size = 224 size = 224
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 11188 presentationTimeUs = 11188
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 963641614 dataHashCode = 963641614
size = 244 size = 244
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 13521 presentationTimeUs = 13521
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 2045272193 dataHashCode = 2045272193
size = 234 size = 234
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 16063 presentationTimeUs = 16063
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -770308242
size = 36692
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = -732087136
size = 5312
isKeyFrame = false
presentationTimeUs = 66733
sample:
trackIndex = 0
dataHashCode = 468156717
size = 599
isKeyFrame = false
presentationTimeUs = 33366
sample:
trackIndex = 0
dataHashCode = 1150349584
size = 7735
isKeyFrame = false
presentationTimeUs = 200200
sample:
trackIndex = 0
dataHashCode = 1443582006
size = 987
isKeyFrame = false
presentationTimeUs = 133466
sample:
trackIndex = 0
dataHashCode = -310585145
size = 673
isKeyFrame = false
presentationTimeUs = 100100
sample:
trackIndex = 0
dataHashCode = 807460688
size = 523
isKeyFrame = false
presentationTimeUs = 166833
sample:
trackIndex = 0
dataHashCode = 1936487090
size = 6061
isKeyFrame = false
presentationTimeUs = 333666
sample:
trackIndex = 0
dataHashCode = -32297181
size = 992
isKeyFrame = false
presentationTimeUs = 266933
sample:
trackIndex = 0
dataHashCode = 1529616406
size = 623
isKeyFrame = false
presentationTimeUs = 233566
sample:
trackIndex = 1
dataHashCode = -251933090 dataHashCode = -251933090
size = 228 size = 228
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 18500 presentationTimeUs = 18500
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -329315280 dataHashCode = -329315280
size = 234 size = 234
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 20875 presentationTimeUs = 20875
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1536715689 dataHashCode = -1536715689
size = 248 size = 248
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 23313 presentationTimeUs = 23313
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1275249610 dataHashCode = -1275249610
size = 254 size = 254
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 25896 presentationTimeUs = 25896
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2081231470 dataHashCode = -2081231470
size = 254 size = 254
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 28542 presentationTimeUs = 28542
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1912348529 dataHashCode = 1912348529
size = 250 size = 250
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 31188 presentationTimeUs = 31188
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1393642278 dataHashCode = -1393642278
size = 246 size = 246
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 33792 presentationTimeUs = 33792
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2073671562 dataHashCode = -2073671562
size = 236 size = 236
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 36355 presentationTimeUs = 36355
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -381095129 dataHashCode = -381095129
size = 248 size = 248
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 38813 presentationTimeUs = 38813
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -804721381 dataHashCode = -804721381
size = 238 size = 238
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 41396 presentationTimeUs = 41396
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1949198785 dataHashCode = 1949198785
size = 421 size = 421
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 300300 presentationTimeUs = 300300
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -147880287 dataHashCode = -147880287
size = 4899 size = 4899
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 433766 presentationTimeUs = 433766
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1369083472 dataHashCode = 1369083472
size = 568 size = 568
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 400400 presentationTimeUs = 400400
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 965782073 dataHashCode = 965782073
size = 620 size = 620
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 367033 presentationTimeUs = 367033
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 172275944 dataHashCode = 172275944
size = 260 size = 260
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 43875 presentationTimeUs = 43875
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1045486664 dataHashCode = -1045486664
size = 248 size = 248
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 46584 presentationTimeUs = 46584
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1465283679 dataHashCode = -1465283679
size = 260 size = 260
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 49167 presentationTimeUs = 49167
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1840117006 dataHashCode = 1840117006
size = 254 size = 254
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 51875 presentationTimeUs = 51875
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -631848848 dataHashCode = -631848848
size = 250 size = 250
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 54521 presentationTimeUs = 54521
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1207491554 dataHashCode = -1207491554
size = 236 size = 236
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 57125 presentationTimeUs = 57125
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 838792456 dataHashCode = 838792456
size = 258 size = 258
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 59584 presentationTimeUs = 59584
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1131122284 dataHashCode = -1131122284
size = 264 size = 264
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 62271 presentationTimeUs = 62271
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -122326555 dataHashCode = -122326555
size = 250 size = 250
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 65021 presentationTimeUs = 65021
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1340323720 dataHashCode = -1340323720
size = 250 size = 250
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 67625 presentationTimeUs = 67625
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -261176150 dataHashCode = -261176150
size = 5450 size = 5450
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 567233 presentationTimeUs = 567233
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1830836678 dataHashCode = -1830836678
size = 1051 size = 1051
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500500 presentationTimeUs = 500500
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1767407540 dataHashCode = 1767407540
size = 874 size = 874
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 467133 presentationTimeUs = 467133
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 918440283 dataHashCode = 918440283
size = 781 size = 781
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 533866 presentationTimeUs = 533866
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1290952882 dataHashCode = -1290952882
size = 260 size = 260
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 70230 presentationTimeUs = 70230
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 2118216858 dataHashCode = 2118216858
size = 244 size = 244
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 72938 presentationTimeUs = 72938
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 879520231 dataHashCode = 879520231
size = 252 size = 252
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 75480 presentationTimeUs = 75480
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -174892555 dataHashCode = -174892555
size = 264 size = 264
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 78105 presentationTimeUs = 78105
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -555873771 dataHashCode = -555873771
size = 252 size = 252
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 80855 presentationTimeUs = 80855
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1479853263 dataHashCode = -1479853263
size = 256 size = 256
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 83480 presentationTimeUs = 83480
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1068971504 dataHashCode = -1068971504
size = 250 size = 250
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 86146 presentationTimeUs = 86146
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -866214350 dataHashCode = -866214350
size = 254 size = 254
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 88750 presentationTimeUs = 88750
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2111034853 dataHashCode = -2111034853
size = 288 size = 288
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 91396 presentationTimeUs = 91396
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1445430754 dataHashCode = -1445430754
size = 278 size = 278
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 94396 presentationTimeUs = 94396
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1200468541 dataHashCode = 1200468541
size = 246 size = 246
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 97292 presentationTimeUs = 97292
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1853596884 dataHashCode = -1853596884
size = 246 size = 246
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 99855 presentationTimeUs = 99855
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1266372568 dataHashCode = -1266372568
size = 254 size = 254
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 102417 presentationTimeUs = 102417
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -212017561 dataHashCode = -212017561
size = 248 size = 248
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 105063 presentationTimeUs = 105063
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1464702479 dataHashCode = -1464702479
size = 8 size = 8
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 107646 presentationTimeUs = 107646
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2065 dataHashCode = -2065
size = 2 size = 2
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 107730 presentationTimeUs = 107730
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1408463661 dataHashCode = -1408463661
size = 4725 size = 4725
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 700700 presentationTimeUs = 700700
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1569455924 dataHashCode = 1569455924
size = 1022 size = 1022
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 633966 presentationTimeUs = 633966
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1723778407 dataHashCode = -1723778407
size = 790 size = 790
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 600600 presentationTimeUs = 600600
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1578275472 dataHashCode = 1578275472
size = 610 size = 610
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 667333 presentationTimeUs = 667333
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1989768395 dataHashCode = 1989768395
size = 2751 size = 2751
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 834166 presentationTimeUs = 834166
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1215674502 dataHashCode = -1215674502
size = 745 size = 745
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 767433 presentationTimeUs = 767433
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -814473606 dataHashCode = -814473606
size = 621 size = 621
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 734066 presentationTimeUs = 734066
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 498370894 dataHashCode = 498370894
size = 505 size = 505
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 800800 presentationTimeUs = 800800
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1051506468 dataHashCode = -1051506468
size = 1268 size = 1268
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 967633 presentationTimeUs = 967633
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1025604144 dataHashCode = -1025604144
size = 880 size = 880
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 900900 presentationTimeUs = 900900
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -913586520 dataHashCode = -913586520
size = 530 size = 530
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 867533 presentationTimeUs = 867533
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1340459242 dataHashCode = 1340459242
size = 568 size = 568
isKeyFrame = false isKeyFrame = false

View File

@ -1,4 +1,15 @@
format 0: format 0:
id = 1
sampleMimeType = video/avc
codecs = avc1.64001F
maxInputSize = 36722
width = 1080
height = 720
frameRate = 29.970028
initializationData:
data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B
format 1:
peakBitrate = 200000 peakBitrate = 200000
id = 2 id = 2
sampleMimeType = audio/mp4a-latm sampleMimeType = audio/mp4a-latm
@ -10,463 +21,452 @@ format 0:
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
format 1:
id = 1
sampleMimeType = video/avc
codecs = avc1.64001F
maxInputSize = 36722
width = 1080
height = 720
frameRate = 29.970028
initializationData:
data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -770308242
size = 36692
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 1
dataHashCode = -732087136
size = 5312
isKeyFrame = false
presentationTimeUs = 66733
sample:
trackIndex = 1
dataHashCode = 468156717
size = 599
isKeyFrame = false
presentationTimeUs = 33366
sample:
trackIndex = 1
dataHashCode = 1150349584
size = 7735
isKeyFrame = false
presentationTimeUs = 200200
sample:
trackIndex = 1
dataHashCode = 1443582006
size = 987
isKeyFrame = false
presentationTimeUs = 133466
sample:
trackIndex = 1
dataHashCode = -310585145
size = 673
isKeyFrame = false
presentationTimeUs = 100100
sample:
trackIndex = 1
dataHashCode = 807460688
size = 523
isKeyFrame = false
presentationTimeUs = 166833
sample:
trackIndex = 1
dataHashCode = 1936487090
size = 6061
isKeyFrame = false
presentationTimeUs = 333666
sample:
trackIndex = 1
dataHashCode = -32297181
size = 992
isKeyFrame = false
presentationTimeUs = 266933
sample:
trackIndex = 1
dataHashCode = 1529616406
size = 623
isKeyFrame = false
presentationTimeUs = 233566
sample:
trackIndex = 0
dataHashCode = 1205768497 dataHashCode = 1205768497
size = 23 size = 23
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 44000 presentationTimeUs = 44000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 837571078 dataHashCode = 837571078
size = 6 size = 6
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 67219 presentationTimeUs = 67219
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1991633045 dataHashCode = -1991633045
size = 148 size = 148
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 90439 presentationTimeUs = 90439
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -822987359 dataHashCode = -822987359
size = 189 size = 189
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 113659 presentationTimeUs = 113659
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1141508176 dataHashCode = -1141508176
size = 205 size = 205
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 136879 presentationTimeUs = 136879
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -226971245 dataHashCode = -226971245
size = 210 size = 210
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 160099 presentationTimeUs = 160099
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2099636855 dataHashCode = -2099636855
size = 210 size = 210
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 183319 presentationTimeUs = 183319
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1541550559 dataHashCode = 1541550559
size = 207 size = 207
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 206539 presentationTimeUs = 206539
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 411148001 dataHashCode = 411148001
size = 225 size = 225
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 229759 presentationTimeUs = 229759
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -897603973 dataHashCode = -897603973
size = 215 size = 215
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 252979 presentationTimeUs = 252979
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1949198785 dataHashCode = -770308242
size = 421 size = 36692
isKeyFrame = false isKeyFrame = true
presentationTimeUs = 300300 presentationTimeUs = 0
sample:
trackIndex = 1
dataHashCode = -147880287
size = 4899
isKeyFrame = false
presentationTimeUs = 433766
sample:
trackIndex = 1
dataHashCode = 1369083472
size = 568
isKeyFrame = false
presentationTimeUs = 400400
sample:
trackIndex = 1
dataHashCode = 965782073
size = 620
isKeyFrame = false
presentationTimeUs = 367033
sample:
trackIndex = 1
dataHashCode = -261176150
size = 5450
isKeyFrame = false
presentationTimeUs = 567233
sample:
trackIndex = 1
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 500500
sample:
trackIndex = 1
dataHashCode = 1767407540
size = 874
isKeyFrame = false
presentationTimeUs = 467133
sample:
trackIndex = 1
dataHashCode = 918440283
size = 781
isKeyFrame = false
presentationTimeUs = 533866
sample:
trackIndex = 1
dataHashCode = -1408463661
size = 4725
isKeyFrame = false
presentationTimeUs = 700700
sample:
trackIndex = 1
dataHashCode = 1569455924
size = 1022
isKeyFrame = false
presentationTimeUs = 633966
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -732087136
size = 5312
isKeyFrame = false
presentationTimeUs = 66733
sample:
trackIndex = 0
dataHashCode = 468156717
size = 599
isKeyFrame = false
presentationTimeUs = 33366
sample:
trackIndex = 0
dataHashCode = 1150349584
size = 7735
isKeyFrame = false
presentationTimeUs = 200200
sample:
trackIndex = 0
dataHashCode = 1443582006
size = 987
isKeyFrame = false
presentationTimeUs = 133466
sample:
trackIndex = 0
dataHashCode = -310585145
size = 673
isKeyFrame = false
presentationTimeUs = 100100
sample:
trackIndex = 0
dataHashCode = 807460688
size = 523
isKeyFrame = false
presentationTimeUs = 166833
sample:
trackIndex = 0
dataHashCode = 1936487090
size = 6061
isKeyFrame = false
presentationTimeUs = 333666
sample:
trackIndex = 0
dataHashCode = -32297181
size = 992
isKeyFrame = false
presentationTimeUs = 266933
sample:
trackIndex = 0
dataHashCode = 1529616406
size = 623
isKeyFrame = false
presentationTimeUs = 233566
sample:
trackIndex = 1
dataHashCode = 1478106136 dataHashCode = 1478106136
size = 211 size = 211
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 276199 presentationTimeUs = 276199
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1380417145 dataHashCode = -1380417145
size = 216 size = 216
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 299419 presentationTimeUs = 299419
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 780903644 dataHashCode = 780903644
size = 229 size = 229
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 322639 presentationTimeUs = 322639
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 586204432 dataHashCode = 586204432
size = 232 size = 232
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 345859 presentationTimeUs = 345859
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2038771492 dataHashCode = -2038771492
size = 235 size = 235
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 369079 presentationTimeUs = 369079
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2065161304 dataHashCode = -2065161304
size = 231 size = 231
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 392299 presentationTimeUs = 392299
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 468662933 dataHashCode = 468662933
size = 226 size = 226
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 415519 presentationTimeUs = 415519
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -358398546 dataHashCode = -358398546
size = 216 size = 216
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 438739 presentationTimeUs = 438739
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1767325983 dataHashCode = 1767325983
size = 229 size = 229
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 461959 presentationTimeUs = 461959
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1093095458 dataHashCode = 1093095458
size = 219 size = 219
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 485179 presentationTimeUs = 485179
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1723778407 dataHashCode = 1949198785
size = 790 size = 421
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 600600 presentationTimeUs = 300300
sample:
trackIndex = 1
dataHashCode = 1578275472
size = 610
isKeyFrame = false
presentationTimeUs = 667333
sample:
trackIndex = 1
dataHashCode = 1989768395
size = 2751
isKeyFrame = false
presentationTimeUs = 834166
sample:
trackIndex = 1
dataHashCode = -1215674502
size = 745
isKeyFrame = false
presentationTimeUs = 767433
sample:
trackIndex = 1
dataHashCode = -814473606
size = 621
isKeyFrame = false
presentationTimeUs = 734066
sample:
trackIndex = 1
dataHashCode = 498370894
size = 505
isKeyFrame = false
presentationTimeUs = 800800
sample:
trackIndex = 1
dataHashCode = -1051506468
size = 1268
isKeyFrame = false
presentationTimeUs = 967633
sample:
trackIndex = 1
dataHashCode = -1025604144
size = 880
isKeyFrame = false
presentationTimeUs = 900900
sample:
trackIndex = 1
dataHashCode = -913586520
size = 530
isKeyFrame = false
presentationTimeUs = 867533
sample:
trackIndex = 1
dataHashCode = 1340459242
size = 568
isKeyFrame = false
presentationTimeUs = 934266
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -147880287
size = 4899
isKeyFrame = false
presentationTimeUs = 433766
sample:
trackIndex = 0
dataHashCode = 1369083472
size = 568
isKeyFrame = false
presentationTimeUs = 400400
sample:
trackIndex = 0
dataHashCode = 965782073
size = 620
isKeyFrame = false
presentationTimeUs = 367033
sample:
trackIndex = 0
dataHashCode = -261176150
size = 5450
isKeyFrame = false
presentationTimeUs = 567233
sample:
trackIndex = 0
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 500500
sample:
trackIndex = 0
dataHashCode = 1767407540
size = 874
isKeyFrame = false
presentationTimeUs = 467133
sample:
trackIndex = 0
dataHashCode = 918440283
size = 781
isKeyFrame = false
presentationTimeUs = 533866
sample:
trackIndex = 0
dataHashCode = -1408463661
size = 4725
isKeyFrame = false
presentationTimeUs = 700700
sample:
trackIndex = 0
dataHashCode = 1569455924
size = 1022
isKeyFrame = false
presentationTimeUs = 633966
sample:
trackIndex = 1
dataHashCode = 1687543702 dataHashCode = 1687543702
size = 241 size = 241
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 508399 presentationTimeUs = 508399
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1675188486 dataHashCode = 1675188486
size = 228 size = 228
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 531619 presentationTimeUs = 531619
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 888567545 dataHashCode = 888567545
size = 238 size = 238
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 554839 presentationTimeUs = 554839
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -439631803 dataHashCode = -439631803
size = 234 size = 234
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 578058 presentationTimeUs = 578058
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1606694497 dataHashCode = 1606694497
size = 231 size = 231
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 601278 presentationTimeUs = 601278
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1747388653 dataHashCode = 1747388653
size = 217 size = 217
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 624498 presentationTimeUs = 624498
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -734560004 dataHashCode = -734560004
size = 239 size = 239
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 647718 presentationTimeUs = 647718
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -975079040 dataHashCode = -975079040
size = 243 size = 243
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 670938 presentationTimeUs = 670938
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1403504710 dataHashCode = -1403504710
size = 231 size = 231
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 694158 presentationTimeUs = 694158
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 379512981 dataHashCode = 379512981
size = 230 size = 230
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 717378 presentationTimeUs = 717378
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -1723778407
size = 790
isKeyFrame = false
presentationTimeUs = 600600
sample:
trackIndex = 0
dataHashCode = 1578275472
size = 610
isKeyFrame = false
presentationTimeUs = 667333
sample:
trackIndex = 0
dataHashCode = 1989768395
size = 2751
isKeyFrame = false
presentationTimeUs = 834166
sample:
trackIndex = 0
dataHashCode = -1215674502
size = 745
isKeyFrame = false
presentationTimeUs = 767433
sample:
trackIndex = 0
dataHashCode = -814473606
size = 621
isKeyFrame = false
presentationTimeUs = 734066
sample:
trackIndex = 0
dataHashCode = 498370894
size = 505
isKeyFrame = false
presentationTimeUs = 800800
sample:
trackIndex = 0
dataHashCode = -1051506468
size = 1268
isKeyFrame = false
presentationTimeUs = 967633
sample:
trackIndex = 0
dataHashCode = -1025604144
size = 880
isKeyFrame = false
presentationTimeUs = 900900
sample:
trackIndex = 0
dataHashCode = -913586520
size = 530
isKeyFrame = false
presentationTimeUs = 867533
sample:
trackIndex = 0
dataHashCode = 1340459242
size = 568
isKeyFrame = false
presentationTimeUs = 934266
sample:
trackIndex = 1
dataHashCode = -997198863 dataHashCode = -997198863
size = 238 size = 238
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 740598 presentationTimeUs = 740598
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1394492825 dataHashCode = 1394492825
size = 225 size = 225
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 763818 presentationTimeUs = 763818
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -885232755 dataHashCode = -885232755
size = 232 size = 232
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 787038 presentationTimeUs = 787038
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 260871367 dataHashCode = 260871367
size = 243 size = 243
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 810258 presentationTimeUs = 810258
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1505318960 dataHashCode = -1505318960
size = 232 size = 232
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 833478 presentationTimeUs = 833478
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -390625371 dataHashCode = -390625371
size = 237 size = 237
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 856698 presentationTimeUs = 856698
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1067950751 dataHashCode = 1067950751
size = 228 size = 228
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 879918 presentationTimeUs = 879918
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1179436278 dataHashCode = -1179436278
size = 235 size = 235
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 903138 presentationTimeUs = 903138
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1906607774 dataHashCode = 1906607774
size = 264 size = 264
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 926358 presentationTimeUs = 926358
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -800475828 dataHashCode = -800475828
size = 257 size = 257
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 949578 presentationTimeUs = 949578
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1718972977 dataHashCode = 1718972977
size = 227 size = 227
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 972798 presentationTimeUs = 972798
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1120448741 dataHashCode = -1120448741
size = 227 size = 227
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 996018 presentationTimeUs = 996018
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1718323210 dataHashCode = -1718323210
size = 235 size = 235
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 1019238 presentationTimeUs = 1019238
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -422416 dataHashCode = -422416
size = 229 size = 229
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 1042458 presentationTimeUs = 1042458
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 833757830 dataHashCode = 833757830
size = 6 size = 6
isKeyFrame = true isKeyFrame = true

View File

@ -1,9 +1,4 @@
format 0: format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 2
sampleRate = 12000
pcmEncoding = 2
format 1:
id = 2 id = 2
sampleMimeType = video/avc sampleMimeType = video/avc
codecs = avc1.64000D codecs = avc1.64000D
@ -15,332 +10,337 @@ format 1:
initializationData: initializationData:
data = length 33, hash D3FB879D data = length 33, hash D3FB879D
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
format 1:
sampleMimeType = audio/mp4a-latm
channelCount = 2
sampleRate = 12000
pcmEncoding = 2
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1949079733
size = 5446
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 1
dataHashCode = -1397194508
size = 125
isKeyFrame = false
presentationTimeUs = 14000
sample:
trackIndex = 1
dataHashCode = 1147159698
size = 147
isKeyFrame = false
presentationTimeUs = 47333
sample:
trackIndex = 1
dataHashCode = 524634358
size = 149
isKeyFrame = false
presentationTimeUs = 80667
sample:
trackIndex = 1
dataHashCode = 2031178347
size = 149
isKeyFrame = false
presentationTimeUs = 114000
sample:
trackIndex = 1
dataHashCode = -625462168
size = 169
isKeyFrame = false
presentationTimeUs = 147333
sample:
trackIndex = 1
dataHashCode = -973299745
size = 126
isKeyFrame = false
presentationTimeUs = 180667
sample:
trackIndex = 1
dataHashCode = -788426325
size = 120
isKeyFrame = false
presentationTimeUs = 228042
sample:
trackIndex = 1
dataHashCode = 2009515523
size = 126
isKeyFrame = false
presentationTimeUs = 244708
sample:
trackIndex = 1
dataHashCode = -874600600
size = 1180
isKeyFrame = false
presentationTimeUs = 334083
sample:
trackIndex = 0
dataHashCode = -212376212 dataHashCode = -212376212
size = 20 size = 20
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 0 presentationTimeUs = 0
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1948569090 dataHashCode = -1948569090
size = 72 size = 72
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 417 presentationTimeUs = 417
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1316750072 dataHashCode = -1316750072
size = 84 size = 84
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 1917 presentationTimeUs = 1917
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1016428949 dataHashCode = 1016428949
size = 88 size = 88
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 3667 presentationTimeUs = 3667
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1127325245 dataHashCode = -1127325245
size = 96 size = 96
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 5500 presentationTimeUs = 5500
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1148147726 dataHashCode = 1148147726
size = 92 size = 92
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 7500 presentationTimeUs = 7500
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1949079733
size = 5446
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = -1397194508
size = 125
isKeyFrame = false
presentationTimeUs = 14000
sample:
trackIndex = 0
dataHashCode = 1147159698
size = 147
isKeyFrame = false
presentationTimeUs = 47333
sample:
trackIndex = 0
dataHashCode = 524634358
size = 149
isKeyFrame = false
presentationTimeUs = 80667
sample:
trackIndex = 0
dataHashCode = 2031178347
size = 149
isKeyFrame = false
presentationTimeUs = 114000
sample:
trackIndex = 0
dataHashCode = -625462168
size = 169
isKeyFrame = false
presentationTimeUs = 147333
sample:
trackIndex = 0
dataHashCode = -973299745
size = 126
isKeyFrame = false
presentationTimeUs = 180667
sample:
trackIndex = 0
dataHashCode = -788426325
size = 120
isKeyFrame = false
presentationTimeUs = 228042
sample:
trackIndex = 0
dataHashCode = 2009515523
size = 126
isKeyFrame = false
presentationTimeUs = 244708
sample:
trackIndex = 0
dataHashCode = -874600600
size = 1180
isKeyFrame = false
presentationTimeUs = 334083
sample:
trackIndex = 1
dataHashCode = -2125685540 dataHashCode = -2125685540
size = 76 size = 76
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 9417 presentationTimeUs = 9417
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 473329679 dataHashCode = 473329679
size = 24 size = 24
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 11000 presentationTimeUs = 11000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 240990900 dataHashCode = 240990900
size = 176 size = 176
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 11500 presentationTimeUs = 11500
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 777637182 dataHashCode = 777637182
size = 196 size = 196
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 15167 presentationTimeUs = 15167
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1872106264 dataHashCode = 1872106264
size = 180 size = 180
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 19250 presentationTimeUs = 19250
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1520711499 dataHashCode = -1520711499
size = 140 size = 140
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 23000 presentationTimeUs = 23000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1580199067 dataHashCode = 1580199067
size = 232 size = 232
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 25917 presentationTimeUs = 25917
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 475464086 dataHashCode = 475464086
size = 184 size = 184
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 30750 presentationTimeUs = 30750
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -211754132 dataHashCode = -211754132
size = 172 size = 172
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 34584 presentationTimeUs = 34584
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1236547164 dataHashCode = 1236547164
size = 172 size = 172
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 38167 presentationTimeUs = 38167
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2064216186 dataHashCode = -2064216186
size = 188 size = 188
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 41750 presentationTimeUs = 41750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 984869991 dataHashCode = 984869991
size = 216 size = 216
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 267416 presentationTimeUs = 267416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 2106811176 dataHashCode = 2106811176
size = 119 size = 119
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 234083 presentationTimeUs = 234083
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1981166365 dataHashCode = -1981166365
size = 145 size = 145
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 300750 presentationTimeUs = 300750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1234592714 dataHashCode = 1234592714
size = 1274 size = 1274
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 467416 presentationTimeUs = 467416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -13135608 dataHashCode = -13135608
size = 190 size = 190
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 400750 presentationTimeUs = 400750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1840621658 dataHashCode = 1840621658
size = 107 size = 107
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 367416 presentationTimeUs = 367416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1637734271 dataHashCode = 1637734271
size = 125 size = 125
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 434083 presentationTimeUs = 434083
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -682950885 dataHashCode = -682950885
size = 260 size = 260
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 45667 presentationTimeUs = 45667
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1301206627 dataHashCode = 1301206627
size = 236 size = 236
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 51084 presentationTimeUs = 51084
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 256580525 dataHashCode = 256580525
size = 236 size = 236
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 56000 presentationTimeUs = 56000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1086601304 dataHashCode = -1086601304
size = 236 size = 236
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 60917 presentationTimeUs = 60917
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2046131588 dataHashCode = -2046131588
size = 224 size = 224
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 65834 presentationTimeUs = 65834
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1550955865 dataHashCode = 1550955865
size = 224 size = 224
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 70500 presentationTimeUs = 70500
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -274800552 dataHashCode = -274800552
size = 220 size = 220
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 75167 presentationTimeUs = 75167
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 382420909 dataHashCode = 382420909
size = 224 size = 224
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 79750 presentationTimeUs = 79750
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1431575865 dataHashCode = -1431575865
size = 232 size = 232
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 84417 presentationTimeUs = 84417
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 2112365658 dataHashCode = 2112365658
size = 1109 size = 1109
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 600750 presentationTimeUs = 600750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -968901399 dataHashCode = -968901399
size = 250 size = 250
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 534083 presentationTimeUs = 534083
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1184738023 dataHashCode = -1184738023
size = 124 size = 124
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500750 presentationTimeUs = 500750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1756300509 dataHashCode = 1756300509
size = 134 size = 134
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 567416 presentationTimeUs = 567416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 823429273 dataHashCode = 823429273
size = 1201 size = 1201
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 734083 presentationTimeUs = 734083
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 651718599 dataHashCode = 651718599
size = 213 size = 213
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 667416 presentationTimeUs = 667416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 846349953 dataHashCode = 846349953
size = 125 size = 125
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 634083 presentationTimeUs = 634083
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1331153462 dataHashCode = 1331153462
size = 114 size = 114
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 700750 presentationTimeUs = 700750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -73358172 dataHashCode = -73358172
size = 1010 size = 1010
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 867416 presentationTimeUs = 867416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1395269253 dataHashCode = -1395269253
size = 209 size = 209
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 800750 presentationTimeUs = 800750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1001367604 dataHashCode = -1001367604
size = 139 size = 139
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 767416 presentationTimeUs = 767416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -122569918 dataHashCode = -122569918
size = 138 size = 138
isKeyFrame = false isKeyFrame = false

View File

@ -21,6 +21,7 @@ import static java.lang.annotation.ElementType.TYPE_USE;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.IntDef; import androidx.annotation.IntDef;
import androidx.annotation.IntRange; import androidx.annotation.IntRange;
import androidx.annotation.Nullable;
import androidx.media3.common.Format; import androidx.media3.common.Format;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
@ -114,17 +115,21 @@ public interface AssetLoader {
* Called when the {@link Format} of samples that will be output by the {@link AssetLoader} is * Called when the {@link Format} of samples that will be output by the {@link AssetLoader} is
* known. * known.
* *
* <p>Must be called once per {@linkplain #onTrackCount declared} track, and only after that * <p>Must be called after the corresponding track has been {@link #onTrackAdded added}.
* track has been {@link #onTrackAdded added}. *
* <p>For each {@link #onTrackAdded added} track, this method must be called regularly until the
* returned {@link SampleConsumer} is non-null.
* *
* <p>Must be called from the thread that will be used to call the returned {@link * <p>Must be called from the thread that will be used to call the returned {@link
* SampleConsumer}'s methods. This thread must be the same for all formats output, and is * SampleConsumer}'s methods. This thread must be the same for all formats output, and is
* generally different from the one used to access the {@link AssetLoader} methods. * generally different from the one used to access the {@link AssetLoader} methods.
* *
* @param format The {@link Format} of samples that will be output. * @param format The {@link Format} of samples that will be output.
* @return The {@link SampleConsumer} of samples of the given {@link Format}. * @return The {@link SampleConsumer} of samples of the given {@link Format}, or {@code null} if
* it could not be retrieved yet.
* @throws ExportException If an error occurs configuring the {@link SampleConsumer}. * @throws ExportException If an error occurs configuring the {@link SampleConsumer}.
*/ */
@Nullable
SampleConsumer onOutputFormat(Format format) throws ExportException; SampleConsumer onOutputFormat(Format format) throws ExportException;
/** /**

View File

@ -235,25 +235,31 @@ import java.util.concurrent.atomic.AtomicInteger;
return decodeOutput; return decodeOutput;
} }
@Nullable
@Override @Override
public SampleConsumer onOutputFormat(Format format) throws ExportException { public SampleConsumer onOutputFormat(Format format) throws ExportException {
@C.TrackType int trackType = getProcessedTrackType(format.sampleMimeType); @C.TrackType int trackType = getProcessedTrackType(format.sampleMimeType);
SampleConsumer sampleConsumer; SampleConsumer sampleConsumer;
if (currentMediaItemIndex.get() == 0) { if (currentMediaItemIndex.get() == 0) {
sampleConsumer = @Nullable
new SampleConsumerWrapper(compositeAssetLoaderListener.onOutputFormat(format)); SampleConsumer wrappedSampleConsumer = compositeAssetLoaderListener.onOutputFormat(format);
if (wrappedSampleConsumer == null) {
return null;
}
sampleConsumer = new SampleConsumerWrapper(wrappedSampleConsumer);
sampleConsumersByTrackType.put(trackType, sampleConsumer); sampleConsumersByTrackType.put(trackType, sampleConsumer);
if (forceAudioTrack && nonEndedTracks.get() == 1 && trackType == C.TRACK_TYPE_VIDEO) { if (forceAudioTrack && nonEndedTracks.get() == 1 && trackType == C.TRACK_TYPE_VIDEO) {
sampleConsumersByTrackType.put( SampleConsumer wrappedAudioSampleConsumer =
C.TRACK_TYPE_AUDIO, checkStateNotNull(
new SampleConsumerWrapper(
compositeAssetLoaderListener.onOutputFormat( compositeAssetLoaderListener.onOutputFormat(
FORCE_AUDIO_TRACK_FORMAT FORCE_AUDIO_TRACK_FORMAT
.buildUpon() .buildUpon()
.setSampleMimeType(MimeTypes.AUDIO_RAW) .setSampleMimeType(MimeTypes.AUDIO_RAW)
.setPcmEncoding(C.ENCODING_PCM_16BIT) .setPcmEncoding(C.ENCODING_PCM_16BIT)
.build()))); .build()));
sampleConsumersByTrackType.put(
C.TRACK_TYPE_AUDIO, new SampleConsumerWrapper(wrappedAudioSampleConsumer));
} }
} else { } else {
// TODO(b/270533049): Remove the check below when implementing blank video frames generation. // TODO(b/270533049): Remove the check below when implementing blank video frames generation.

View File

@ -46,6 +46,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
protected @MonotonicNonNull Codec decoder; protected @MonotonicNonNull Codec decoder;
protected boolean isEnded; protected boolean isEnded;
private @MonotonicNonNull Format inputFormat; private @MonotonicNonNull Format inputFormat;
private @MonotonicNonNull Format outputFormat;
private final TransformerMediaClock mediaClock; private final TransformerMediaClock mediaClock;
private final AssetLoader.Listener assetLoaderListener; private final AssetLoader.Listener assetLoaderListener;
@ -244,19 +245,26 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
return true; return true;
} }
if (outputFormat == null) {
if (decoder != null if (decoder != null
&& getProcessedTrackType(inputFormat.sampleMimeType) == C.TRACK_TYPE_AUDIO) { && getProcessedTrackType(inputFormat.sampleMimeType) == C.TRACK_TYPE_AUDIO) {
@Nullable Format decoderOutputFormat = decoder.getOutputFormat(); @Nullable Format decoderOutputFormat = decoder.getOutputFormat();
if (decoderOutputFormat == null) { if (decoderOutputFormat == null) {
return false; return false;
} }
sampleConsumer = assetLoaderListener.onOutputFormat(decoderOutputFormat); outputFormat = decoderOutputFormat;
} else { } else {
// TODO(b/237674316): Move surface creation out of video sampleConsumer. Init decoder and get // TODO(b/237674316): Move surface creation out of video sampleConsumer. Init decoder and
// decoderOutput Format before init sampleConsumer. // get decoderOutput Format before init sampleConsumer.
sampleConsumer = assetLoaderListener.onOutputFormat(inputFormat); outputFormat = inputFormat;
}
} }
SampleConsumer sampleConsumer = assetLoaderListener.onOutputFormat(outputFormat);
if (sampleConsumer == null) {
return false;
}
this.sampleConsumer = sampleConsumer;
return true; return true;
} }

View File

@ -22,22 +22,28 @@ import static androidx.media3.transformer.ExportException.ERROR_CODE_IO_UNSPECIF
import static androidx.media3.transformer.ExportException.ERROR_CODE_UNSPECIFIED; import static androidx.media3.transformer.ExportException.ERROR_CODE_UNSPECIFIED;
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_AVAILABLE; import static androidx.media3.transformer.Transformer.PROGRESS_STATE_AVAILABLE;
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_NOT_STARTED; import static androidx.media3.transformer.Transformer.PROGRESS_STATE_NOT_STARTED;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.Nullable;
import androidx.media3.common.C; import androidx.media3.common.C;
import androidx.media3.common.Format; import androidx.media3.common.Format;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.MimeTypes; import androidx.media3.common.MimeTypes;
import androidx.media3.common.util.BitmapLoader; import androidx.media3.common.util.BitmapLoader;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.datasource.DataSource;
import androidx.media3.datasource.DataSourceBitmapLoader; import androidx.media3.datasource.DataSourceBitmapLoader;
import androidx.media3.datasource.DefaultDataSource;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.MoreExecutors;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
/** An {@link AssetLoader} implementation that loads images into {@link Bitmap} instances. */ /** An {@link AssetLoader} implementation that loads images into {@link Bitmap} instances. */
@UnstableApi @UnstableApi
@ -61,26 +67,36 @@ public final class ImageAssetLoader implements AssetLoader {
public static final String MIME_TYPE_IMAGE_ALL = MimeTypes.BASE_TYPE_IMAGE + "/*"; public static final String MIME_TYPE_IMAGE_ALL = MimeTypes.BASE_TYPE_IMAGE + "/*";
private final Context context; private static final int QUEUE_BITMAP_INTERVAL_MS = 10;
private final EditedMediaItem editedMediaItem; private final EditedMediaItem editedMediaItem;
private final DataSource.Factory dataSourceFactory;
private final Listener listener; private final Listener listener;
private final ScheduledExecutorService scheduledExecutorService;
private @Transformer.ProgressState int progressState; private @Transformer.ProgressState int progressState;
private int progress;
private volatile int progress;
private ImageAssetLoader(Context context, EditedMediaItem editedMediaItem, Listener listener) { private ImageAssetLoader(Context context, EditedMediaItem editedMediaItem, Listener listener) {
this.context = context; checkState(editedMediaItem.durationUs != C.TIME_UNSET);
checkState(editedMediaItem.frameRate != C.RATE_UNSET_INT);
this.editedMediaItem = editedMediaItem; this.editedMediaItem = editedMediaItem;
dataSourceFactory = new DefaultDataSource.Factory(context);
this.listener = listener; this.listener = listener;
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
progressState = PROGRESS_STATE_NOT_STARTED; progressState = PROGRESS_STATE_NOT_STARTED;
} }
@Override @Override
@SuppressWarnings("FutureReturnValueIgnored")
public void start() { public void start() {
progressState = PROGRESS_STATE_AVAILABLE; progressState = PROGRESS_STATE_AVAILABLE;
listener.onDurationUs(editedMediaItem.durationUs);
listener.onTrackCount(1); listener.onTrackCount(1);
BitmapLoader bitmapLoader = new DataSourceBitmapLoader(context); BitmapLoader bitmapLoader =
new DataSourceBitmapLoader(
MoreExecutors.listeningDecorator(scheduledExecutorService), dataSourceFactory);
MediaItem.LocalConfiguration localConfiguration = MediaItem.LocalConfiguration localConfiguration =
checkNotNull(editedMediaItem.mediaItem.localConfiguration); checkNotNull(editedMediaItem.mediaItem.localConfiguration);
ListenableFuture<Bitmap> future = bitmapLoader.loadBitmap(localConfiguration.uri); ListenableFuture<Bitmap> future = bitmapLoader.loadBitmap(localConfiguration.uri);
@ -102,21 +118,10 @@ public final class ImageAssetLoader implements AssetLoader {
SUPPORTED_OUTPUT_TYPE_DECODED, SUPPORTED_OUTPUT_TYPE_DECODED,
/* streamStartPositionUs= */ 0, /* streamStartPositionUs= */ 0,
/* streamOffsetUs= */ 0); /* streamOffsetUs= */ 0);
SampleConsumer sampleConsumer = listener.onOutputFormat(format); scheduledExecutorService.submit(() -> queueBitmapInternal(bitmap, format));
checkState(editedMediaItem.durationUs != C.TIME_UNSET);
checkState(editedMediaItem.frameRate != C.RATE_UNSET_INT);
// TODO(b/262693274): consider using listener.onDurationUs() or the MediaItem change
// callback (when it's added) rather than setting duration here.
sampleConsumer.queueInputBitmap(
bitmap, editedMediaItem.durationUs, editedMediaItem.frameRate);
sampleConsumer.signalEndOfVideoInput();
} catch (ExportException e) {
listener.onError(e);
} catch (RuntimeException e) { } catch (RuntimeException e) {
listener.onError(ExportException.createForAssetLoader(e, ERROR_CODE_UNSPECIFIED)); listener.onError(ExportException.createForAssetLoader(e, ERROR_CODE_UNSPECIFIED));
} }
progress = 100;
} }
@Override @Override
@ -124,7 +129,7 @@ public final class ImageAssetLoader implements AssetLoader {
listener.onError(ExportException.createForAssetLoader(t, ERROR_CODE_IO_UNSPECIFIED)); listener.onError(ExportException.createForAssetLoader(t, ERROR_CODE_IO_UNSPECIFIED));
} }
}, },
MoreExecutors.directExecutor()); scheduledExecutorService);
} }
@Override @Override
@ -143,5 +148,28 @@ public final class ImageAssetLoader implements AssetLoader {
@Override @Override
public void release() { public void release() {
progressState = PROGRESS_STATE_NOT_STARTED; progressState = PROGRESS_STATE_NOT_STARTED;
scheduledExecutorService.shutdownNow();
}
@SuppressWarnings("FutureReturnValueIgnored")
private void queueBitmapInternal(Bitmap bitmap, Format format) {
try {
@Nullable SampleConsumer sampleConsumer = listener.onOutputFormat(format);
if (sampleConsumer == null) {
scheduledExecutorService.schedule(
() -> queueBitmapInternal(bitmap, format), QUEUE_BITMAP_INTERVAL_MS, MILLISECONDS);
return;
}
// TODO(b/262693274): consider using listener.onDurationUs() or the MediaItem change
// callback rather than setting duration here.
sampleConsumer.queueInputBitmap(
bitmap, editedMediaItem.durationUs, editedMediaItem.frameRate);
sampleConsumer.signalEndOfVideoInput();
progress = 100;
} catch (ExportException e) {
listener.onError(e);
} catch (RuntimeException e) {
listener.onError(ExportException.createForAssetLoader(e, ERROR_CODE_UNSPECIFIED));
}
} }
} }

View File

@ -54,6 +54,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@ -99,8 +100,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private final HandlerThread internalHandlerThread; private final HandlerThread internalHandlerThread;
private final HandlerWrapper internalHandler; private final HandlerWrapper internalHandler;
private final List<CompositeAssetLoader> compositeAssetLoaders; private final List<CompositeAssetLoader> compositeAssetLoaders;
private final AtomicInteger totalInputTrackCount; private final AtomicInteger trackCountsToReport;
private final AtomicInteger unreportedInputTrackCounts; private final AtomicInteger tracksToAdd;
private final AtomicBoolean outputHasAudio;
private final AtomicBoolean outputHasVideo;
private final List<SamplePipeline> samplePipelines; private final List<SamplePipeline> samplePipelines;
private final MuxerWrapper muxerWrapper; private final MuxerWrapper muxerWrapper;
private final ConditionVariable transformerConditionVariable; private final ConditionVariable transformerConditionVariable;
@ -153,8 +156,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
compositeAssetLoaderListener, compositeAssetLoaderListener,
clock)); clock));
} }
totalInputTrackCount = new AtomicInteger(); trackCountsToReport = new AtomicInteger(composition.sequences.size());
unreportedInputTrackCounts = new AtomicInteger(composition.sequences.size()); tracksToAdd = new AtomicInteger();
outputHasAudio = new AtomicBoolean();
outputHasVideo = new AtomicBoolean();
samplePipelines = new ArrayList<>(); samplePipelines = new ArrayList<>();
transformerConditionVariable = new ConditionVariable(); transformerConditionVariable = new ConditionVariable();
exportResultBuilder = new ExportResult.Builder(); exportResultBuilder = new ExportResult.Builder();
@ -435,12 +440,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
ERROR_CODE_FAILED_RUNTIME_CHECK)); ERROR_CODE_FAILED_RUNTIME_CHECK));
return; return;
} }
totalInputTrackCount.addAndGet(trackCount); trackCountsToReport.decrementAndGet();
unreportedInputTrackCounts.decrementAndGet(); tracksToAdd.addAndGet(trackCount);
if (unreportedInputTrackCounts.get() == 0) {
muxerWrapper.setTrackCount(totalInputTrackCount.get());
fallbackListener.setTrackCount(totalInputTrackCount.get());
}
} }
@Override @Override
@ -449,21 +450,38 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@AssetLoader.SupportedOutputTypes int supportedOutputTypes, @AssetLoader.SupportedOutputTypes int supportedOutputTypes,
long streamStartPositionUs, long streamStartPositionUs,
long streamOffsetUs) { long streamOffsetUs) {
@C.TrackType
int trackType = getProcessedTrackType(firstAssetLoaderInputFormat.sampleMimeType);
AddedTrackInfo trackInfo = AddedTrackInfo trackInfo =
new AddedTrackInfo( new AddedTrackInfo(
firstAssetLoaderInputFormat, firstAssetLoaderInputFormat,
supportedOutputTypes, supportedOutputTypes,
streamStartPositionUs, streamStartPositionUs,
streamOffsetUs); streamOffsetUs);
addedTrackInfoByTrackType.put(trackType, trackInfo);
addedTrackInfoByTrackType.put( if (trackType == C.TRACK_TYPE_AUDIO) {
getProcessedTrackType(firstAssetLoaderInputFormat.sampleMimeType), trackInfo); outputHasAudio.set(true);
} else {
outputHasVideo.set(true);
}
if (trackCountsToReport.get() == 0 && tracksToAdd.get() == 1) {
int outputTrackCount = (outputHasAudio.get() ? 1 : 0) + (outputHasVideo.get() ? 1 : 0);
muxerWrapper.setTrackCount(outputTrackCount);
fallbackListener.setTrackCount(outputTrackCount);
}
tracksToAdd.decrementAndGet();
return trackInfo.shouldTranscode; return trackInfo.shouldTranscode;
} }
@Nullable
@Override @Override
public SampleConsumer onOutputFormat(Format assetLoaderOutputFormat) throws ExportException { public SampleConsumer onOutputFormat(Format assetLoaderOutputFormat) throws ExportException {
if (trackCountsToReport.get() > 0 || tracksToAdd.get() > 0) {
return null;
}
@C.TrackType int trackType = getProcessedTrackType(assetLoaderOutputFormat.sampleMimeType); @C.TrackType int trackType = getProcessedTrackType(assetLoaderOutputFormat.sampleMimeType);
AddedTrackInfo trackInfo = checkStateNotNull(addedTrackInfoByTrackType.get(trackType)); AddedTrackInfo trackInfo = checkStateNotNull(addedTrackInfoByTrackType.get(trackType));
SamplePipeline samplePipeline = getSamplePipeline(assetLoaderOutputFormat, trackInfo); SamplePipeline samplePipeline = getSamplePipeline(assetLoaderOutputFormat, trackInfo);