diff --git a/libraries/test_data/src/test/assets/media/mp4/crow_emulator_transformer_output.mp4 b/libraries/test_data/src/test/assets/media/mp4/crow_emulator_transformer_output.mp4 new file mode 100644 index 0000000000..e16c9ad968 Binary files /dev/null and b/libraries/test_data/src/test/assets/media/mp4/crow_emulator_transformer_output.mp4 differ diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_with_increasing_timestamps_320w_240h.mp4/original.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_with_increasing_timestamps_320w_240h.mp4/original.dump index b72ae8c506..7a94b1dc8a 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_with_increasing_timestamps_320w_240h.mp4/original.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_with_increasing_timestamps_320w_240h.mp4/original.dump @@ -1,3 +1,16 @@ +format audio: + averageBitrate = 192181 + peakBitrate = 192181 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 643 + channelCount = 2 + sampleRate = 48000 + language = en + metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 560 format video: id = 1 sampleMimeType = video/avc @@ -17,6 +30,4381 @@ format video: data = length 31, hash 4B108214 data = length 9, hash FBA158BB container metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] +container metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] +sample: + trackType = audio + dataHashCode = -119592194 + size = 515 + isKeyFrame = true + presentationTimeUs = 0 +sample: + trackType = audio + dataHashCode = -909491492 + size = 501 + isKeyFrame = true + presentationTimeUs = 5395 +sample: + trackType = audio + dataHashCode = -744678053 + size = 497 + isKeyFrame = true + presentationTimeUs = 26729 +sample: + trackType = audio + dataHashCode = 417104623 + size = 507 + isKeyFrame = true + presentationTimeUs = 48062 +sample: + trackType = audio + dataHashCode = -764944641 + size = 524 + isKeyFrame = true + presentationTimeUs = 69395 +sample: + trackType = audio + dataHashCode = 843782277 + size = 514 + isKeyFrame = true + presentationTimeUs = 90729 +sample: + trackType = audio + dataHashCode = -260253145 + size = 501 + isKeyFrame = true + presentationTimeUs = 112062 +sample: + trackType = audio + dataHashCode = 1701290563 + size = 506 + isKeyFrame = true + presentationTimeUs = 133395 +sample: + trackType = audio + dataHashCode = -1895634185 + size = 501 + isKeyFrame = true + presentationTimeUs = 154729 +sample: + trackType = audio + dataHashCode = -1644044271 + size = 513 + isKeyFrame = true + presentationTimeUs = 176062 +sample: + trackType = audio + dataHashCode = 1325688548 + size = 508 + isKeyFrame = true + presentationTimeUs = 197395 +sample: + trackType = audio + dataHashCode = 1530655727 + size = 526 + isKeyFrame = true + presentationTimeUs = 218729 +sample: + trackType = audio + dataHashCode = -1154741792 + size = 501 + isKeyFrame = true + presentationTimeUs = 240062 +sample: + trackType = audio + dataHashCode = -26272622 + size = 512 + isKeyFrame = true + presentationTimeUs = 261395 +sample: + trackType = audio + dataHashCode = 486073719 + size = 520 + isKeyFrame = true + presentationTimeUs = 282729 +sample: + trackType = audio + dataHashCode = -45610935 + size = 513 + isKeyFrame = true + presentationTimeUs = 304062 +sample: + trackType = audio + dataHashCode = 136692367 + size = 505 + isKeyFrame = true + presentationTimeUs = 325395 +sample: + trackType = audio + dataHashCode = 577995585 + size = 498 + isKeyFrame = true + presentationTimeUs = 346729 +sample: + trackType = audio + dataHashCode = 1929822543 + size = 508 + isKeyFrame = true + presentationTimeUs = 368062 +sample: + trackType = audio + dataHashCode = 521761817 + size = 517 + isKeyFrame = true + presentationTimeUs = 389395 +sample: + trackType = audio + dataHashCode = 487735871 + size = 511 + isKeyFrame = true + presentationTimeUs = 410729 +sample: + trackType = audio + dataHashCode = 994634353 + size = 527 + isKeyFrame = true + presentationTimeUs = 432062 +sample: + trackType = audio + dataHashCode = -487954933 + size = 523 + isKeyFrame = true + presentationTimeUs = 453395 +sample: + trackType = audio + dataHashCode = 620998309 + size = 526 + isKeyFrame = true + presentationTimeUs = 474729 +sample: + trackType = audio + dataHashCode = -919583544 + size = 544 + isKeyFrame = true + presentationTimeUs = 496062 +sample: + trackType = audio + dataHashCode = 303845794 + size = 529 + isKeyFrame = true + presentationTimeUs = 517395 +sample: + trackType = audio + dataHashCode = 1620240335 + size = 505 + isKeyFrame = true + presentationTimeUs = 538729 +sample: + trackType = audio + dataHashCode = 1638669870 + size = 512 + isKeyFrame = true + presentationTimeUs = 560062 +sample: + trackType = audio + dataHashCode = -1570181562 + size = 514 + isKeyFrame = true + presentationTimeUs = 581395 +sample: + trackType = audio + dataHashCode = 1362607989 + size = 497 + isKeyFrame = true + presentationTimeUs = 602729 +sample: + trackType = audio + dataHashCode = 1766932766 + size = 509 + isKeyFrame = true + presentationTimeUs = 624062 +sample: + trackType = audio + dataHashCode = 1474943152 + size = 504 + isKeyFrame = true + presentationTimeUs = 645395 +sample: + trackType = audio + dataHashCode = 719193411 + size = 497 + isKeyFrame = true + presentationTimeUs = 666729 +sample: + trackType = audio + dataHashCode = 1944432132 + size = 505 + isKeyFrame = true + presentationTimeUs = 688062 +sample: + trackType = audio + dataHashCode = -371769589 + size = 501 + isKeyFrame = true + presentationTimeUs = 709395 +sample: + trackType = audio + dataHashCode = 1682135573 + size = 517 + isKeyFrame = true + presentationTimeUs = 730729 +sample: + trackType = audio + dataHashCode = 978441255 + size = 506 + isKeyFrame = true + presentationTimeUs = 752062 +sample: + trackType = audio + dataHashCode = -1271158990 + size = 501 + isKeyFrame = true + presentationTimeUs = 773395 +sample: + trackType = audio + dataHashCode = 372855678 + size = 521 + isKeyFrame = true + presentationTimeUs = 794729 +sample: + trackType = audio + dataHashCode = 307872227 + size = 508 + isKeyFrame = true + presentationTimeUs = 816062 +sample: + trackType = audio + dataHashCode = 94030633 + size = 511 + isKeyFrame = true + presentationTimeUs = 837395 +sample: + trackType = audio + dataHashCode = 1471950794 + size = 525 + isKeyFrame = true + presentationTimeUs = 858729 +sample: + trackType = audio + dataHashCode = 358770376 + size = 512 + isKeyFrame = true + presentationTimeUs = 880062 +sample: + trackType = audio + dataHashCode = 414919942 + size = 521 + isKeyFrame = true + presentationTimeUs = 901395 +sample: + trackType = audio + dataHashCode = 1766233549 + size = 521 + isKeyFrame = true + presentationTimeUs = 922729 +sample: + trackType = audio + dataHashCode = 1728107469 + size = 519 + isKeyFrame = true + presentationTimeUs = 944062 +sample: + trackType = audio + dataHashCode = 1049425325 + size = 507 + isKeyFrame = true + presentationTimeUs = 965395 +sample: + trackType = audio + dataHashCode = 735514196 + size = 508 + isKeyFrame = true + presentationTimeUs = 986729 +sample: + trackType = audio + dataHashCode = -1537380463 + size = 499 + isKeyFrame = true + presentationTimeUs = 1008062 +sample: + trackType = audio + dataHashCode = -1936602644 + size = 502 + isKeyFrame = true + presentationTimeUs = 1029395 +sample: + trackType = audio + dataHashCode = -661342987 + size = 511 + isKeyFrame = true + presentationTimeUs = 1050729 +sample: + trackType = audio + dataHashCode = -1713023913 + size = 522 + isKeyFrame = true + presentationTimeUs = 1072062 +sample: + trackType = audio + dataHashCode = -1406200913 + size = 524 + isKeyFrame = true + presentationTimeUs = 1093395 +sample: + trackType = audio + dataHashCode = -1311232087 + size = 544 + isKeyFrame = true + presentationTimeUs = 1114729 +sample: + trackType = audio + dataHashCode = -854624711 + size = 512 + isKeyFrame = true + presentationTimeUs = 1136062 +sample: + trackType = audio + dataHashCode = -650648966 + size = 501 + isKeyFrame = true + presentationTimeUs = 1157395 +sample: + trackType = audio + dataHashCode = 1861972874 + size = 494 + isKeyFrame = true + presentationTimeUs = 1178729 +sample: + trackType = audio + dataHashCode = 1106278636 + size = 529 + isKeyFrame = true + presentationTimeUs = 1200062 +sample: + trackType = audio + dataHashCode = 35070028 + size = 509 + isKeyFrame = true + presentationTimeUs = 1221395 +sample: + trackType = audio + dataHashCode = -1770326987 + size = 509 + isKeyFrame = true + presentationTimeUs = 1242729 +sample: + trackType = audio + dataHashCode = -781012310 + size = 514 + isKeyFrame = true + presentationTimeUs = 1264062 +sample: + trackType = audio + dataHashCode = -1248932196 + size = 492 + isKeyFrame = true + presentationTimeUs = 1285395 +sample: + trackType = audio + dataHashCode = 1425802171 + size = 511 + isKeyFrame = true + presentationTimeUs = 1306729 +sample: + trackType = audio + dataHashCode = 860704856 + size = 512 + isKeyFrame = true + presentationTimeUs = 1328062 +sample: + trackType = audio + dataHashCode = 392496125 + size = 514 + isKeyFrame = true + presentationTimeUs = 1349395 +sample: + trackType = audio + dataHashCode = 1678007630 + size = 519 + isKeyFrame = true + presentationTimeUs = 1370729 +sample: + trackType = audio + dataHashCode = -826140069 + size = 502 + isKeyFrame = true + presentationTimeUs = 1392062 +sample: + trackType = audio + dataHashCode = 1130407373 + size = 505 + isKeyFrame = true + presentationTimeUs = 1413395 +sample: + trackType = audio + dataHashCode = -1863257313 + size = 502 + isKeyFrame = true + presentationTimeUs = 1434729 +sample: + trackType = audio + dataHashCode = 941248613 + size = 504 + isKeyFrame = true + presentationTimeUs = 1456062 +sample: + trackType = audio + dataHashCode = 190868717 + size = 514 + isKeyFrame = true + presentationTimeUs = 1477395 +sample: + trackType = audio + dataHashCode = 692373533 + size = 501 + isKeyFrame = true + presentationTimeUs = 1498729 +sample: + trackType = audio + dataHashCode = -1237607538 + size = 512 + isKeyFrame = true + presentationTimeUs = 1520062 +sample: + trackType = audio + dataHashCode = 1801509606 + size = 532 + isKeyFrame = true + presentationTimeUs = 1541395 +sample: + trackType = audio + dataHashCode = 439393643 + size = 524 + isKeyFrame = true + presentationTimeUs = 1562729 +sample: + trackType = audio + dataHashCode = 2106476905 + size = 530 + isKeyFrame = true + presentationTimeUs = 1584062 +sample: + trackType = audio + dataHashCode = -793461559 + size = 525 + isKeyFrame = true + presentationTimeUs = 1605395 +sample: + trackType = audio + dataHashCode = -926339646 + size = 497 + isKeyFrame = true + presentationTimeUs = 1626729 +sample: + trackType = audio + dataHashCode = -1360302775 + size = 498 + isKeyFrame = true + presentationTimeUs = 1648062 +sample: + trackType = audio + dataHashCode = 1600490654 + size = 499 + isKeyFrame = true + presentationTimeUs = 1669395 +sample: + trackType = audio + dataHashCode = 79351504 + size = 516 + isKeyFrame = true + presentationTimeUs = 1690729 +sample: + trackType = audio + dataHashCode = -278153651 + size = 514 + isKeyFrame = true + presentationTimeUs = 1712062 +sample: + trackType = audio + dataHashCode = 1591687092 + size = 510 + isKeyFrame = true + presentationTimeUs = 1733395 +sample: + trackType = audio + dataHashCode = 751056620 + size = 514 + isKeyFrame = true + presentationTimeUs = 1754729 +sample: + trackType = audio + dataHashCode = 1155352937 + size = 526 + isKeyFrame = true + presentationTimeUs = 1776062 +sample: + trackType = audio + dataHashCode = 1868537953 + size = 503 + isKeyFrame = true + presentationTimeUs = 1797395 +sample: + trackType = audio + dataHashCode = 1366859169 + size = 514 + isKeyFrame = true + presentationTimeUs = 1818729 +sample: + trackType = audio + dataHashCode = 1927472239 + size = 503 + isKeyFrame = true + presentationTimeUs = 1840062 +sample: + trackType = audio + dataHashCode = -477343526 + size = 506 + isKeyFrame = true + presentationTimeUs = 1861395 +sample: + trackType = audio + dataHashCode = -747626869 + size = 511 + isKeyFrame = true + presentationTimeUs = 1882729 +sample: + trackType = audio + dataHashCode = -611516413 + size = 513 + isKeyFrame = true + presentationTimeUs = 1904062 +sample: + trackType = audio + dataHashCode = -1866151373 + size = 513 + isKeyFrame = true + presentationTimeUs = 1925395 +sample: + trackType = audio + dataHashCode = 1737463002 + size = 533 + isKeyFrame = true + presentationTimeUs = 1946729 +sample: + trackType = audio + dataHashCode = -267651050 + size = 522 + isKeyFrame = true + presentationTimeUs = 1968062 +sample: + trackType = audio + dataHashCode = 1551969375 + size = 514 + isKeyFrame = true + presentationTimeUs = 1989395 +sample: + trackType = audio + dataHashCode = 382328548 + size = 508 + isKeyFrame = true + presentationTimeUs = 2010729 +sample: + trackType = audio + dataHashCode = -1703357300 + size = 504 + isKeyFrame = true + presentationTimeUs = 2032062 +sample: + trackType = audio + dataHashCode = 1032021784 + size = 513 + isKeyFrame = true + presentationTimeUs = 2053395 +sample: + trackType = audio + dataHashCode = 1047426721 + size = 510 + isKeyFrame = true + presentationTimeUs = 2074729 +sample: + trackType = audio + dataHashCode = -1301018749 + size = 507 + isKeyFrame = true + presentationTimeUs = 2096062 +sample: + trackType = audio + dataHashCode = 2013765006 + size = 510 + isKeyFrame = true + presentationTimeUs = 2117395 +sample: + trackType = audio + dataHashCode = -1913734136 + size = 526 + isKeyFrame = true + presentationTimeUs = 2138729 +sample: + trackType = audio + dataHashCode = 763453209 + size = 508 + isKeyFrame = true + presentationTimeUs = 2160062 +sample: + trackType = audio + dataHashCode = 648406053 + size = 505 + isKeyFrame = true + presentationTimeUs = 2181395 +sample: + trackType = audio + dataHashCode = -582819445 + size = 514 + isKeyFrame = true + presentationTimeUs = 2202729 +sample: + trackType = audio + dataHashCode = 1173933852 + size = 501 + isKeyFrame = true + presentationTimeUs = 2224062 +sample: + trackType = audio + dataHashCode = 483391603 + size = 544 + isKeyFrame = true + presentationTimeUs = 2245395 +sample: + trackType = audio + dataHashCode = -1991624763 + size = 509 + isKeyFrame = true + presentationTimeUs = 2266729 +sample: + trackType = audio + dataHashCode = -1272641494 + size = 503 + isKeyFrame = true + presentationTimeUs = 2288062 +sample: + trackType = audio + dataHashCode = -51036668 + size = 500 + isKeyFrame = true + presentationTimeUs = 2309395 +sample: + trackType = audio + dataHashCode = 570372523 + size = 504 + isKeyFrame = true + presentationTimeUs = 2330729 +sample: + trackType = audio + dataHashCode = 505899336 + size = 504 + isKeyFrame = true + presentationTimeUs = 2352062 +sample: + trackType = audio + dataHashCode = 1081550572 + size = 516 + isKeyFrame = true + presentationTimeUs = 2373395 +sample: + trackType = audio + dataHashCode = 1769035098 + size = 520 + isKeyFrame = true + presentationTimeUs = 2394729 +sample: + trackType = audio + dataHashCode = -1933125174 + size = 517 + isKeyFrame = true + presentationTimeUs = 2416062 +sample: + trackType = audio + dataHashCode = -1218512703 + size = 521 + isKeyFrame = true + presentationTimeUs = 2437395 +sample: + trackType = audio + dataHashCode = 1543270682 + size = 520 + isKeyFrame = true + presentationTimeUs = 2458729 +sample: + trackType = audio + dataHashCode = 577834186 + size = 519 + isKeyFrame = true + presentationTimeUs = 2480062 +sample: + trackType = audio + dataHashCode = -1133481451 + size = 501 + isKeyFrame = true + presentationTimeUs = 2501395 +sample: + trackType = audio + dataHashCode = -1929749900 + size = 512 + isKeyFrame = true + presentationTimeUs = 2522729 +sample: + trackType = audio + dataHashCode = 1924174777 + size = 512 + isKeyFrame = true + presentationTimeUs = 2544062 +sample: + trackType = audio + dataHashCode = -519004949 + size = 507 + isKeyFrame = true + presentationTimeUs = 2565395 +sample: + trackType = audio + dataHashCode = 921488358 + size = 505 + isKeyFrame = true + presentationTimeUs = 2586729 +sample: + trackType = audio + dataHashCode = 1691369238 + size = 509 + isKeyFrame = true + presentationTimeUs = 2608062 +sample: + trackType = audio + dataHashCode = 1832803946 + size = 501 + isKeyFrame = true + presentationTimeUs = 2629395 +sample: + trackType = audio + dataHashCode = 1503567832 + size = 517 + isKeyFrame = true + presentationTimeUs = 2650729 +sample: + trackType = audio + dataHashCode = -2044195539 + size = 542 + isKeyFrame = true + presentationTimeUs = 2672062 +sample: + trackType = audio + dataHashCode = 1380956105 + size = 509 + isKeyFrame = true + presentationTimeUs = 2693395 +sample: + trackType = audio + dataHashCode = -2055083598 + size = 517 + isKeyFrame = true + presentationTimeUs = 2714729 +sample: + trackType = audio + dataHashCode = 2050623502 + size = 501 + isKeyFrame = true + presentationTimeUs = 2736062 +sample: + trackType = audio + dataHashCode = 1108311220 + size = 502 + isKeyFrame = true + presentationTimeUs = 2757395 +sample: + trackType = audio + dataHashCode = -932565578 + size = 502 + isKeyFrame = true + presentationTimeUs = 2778729 +sample: + trackType = audio + dataHashCode = 203535457 + size = 511 + isKeyFrame = true + presentationTimeUs = 2800062 +sample: + trackType = audio + dataHashCode = 1154473059 + size = 502 + isKeyFrame = true + presentationTimeUs = 2821395 +sample: + trackType = audio + dataHashCode = 748118461 + size = 504 + isKeyFrame = true + presentationTimeUs = 2842729 +sample: + trackType = audio + dataHashCode = -845986689 + size = 504 + isKeyFrame = true + presentationTimeUs = 2864062 +sample: + trackType = audio + dataHashCode = -978903402 + size = 506 + isKeyFrame = true + presentationTimeUs = 2885395 +sample: + trackType = audio + dataHashCode = -1347499263 + size = 507 + isKeyFrame = true + presentationTimeUs = 2906729 +sample: + trackType = audio + dataHashCode = -881811483 + size = 510 + isKeyFrame = true + presentationTimeUs = 2928062 +sample: + trackType = audio + dataHashCode = 954271189 + size = 513 + isKeyFrame = true + presentationTimeUs = 2949395 +sample: + trackType = audio + dataHashCode = -184444954 + size = 520 + isKeyFrame = true + presentationTimeUs = 2970729 +sample: + trackType = audio + dataHashCode = 1577796387 + size = 519 + isKeyFrame = true + presentationTimeUs = 2992062 +sample: + trackType = audio + dataHashCode = -2035151214 + size = 515 + isKeyFrame = true + presentationTimeUs = 3013395 +sample: + trackType = audio + dataHashCode = 1794572446 + size = 503 + isKeyFrame = true + presentationTimeUs = 3034729 +sample: + trackType = audio + dataHashCode = 147732986 + size = 525 + isKeyFrame = true + presentationTimeUs = 3056062 +sample: + trackType = audio + dataHashCode = 1898640610 + size = 506 + isKeyFrame = true + presentationTimeUs = 3077395 +sample: + trackType = audio + dataHashCode = 1552967064 + size = 520 + isKeyFrame = true + presentationTimeUs = 3098729 +sample: + trackType = audio + dataHashCode = 1545651977 + size = 509 + isKeyFrame = true + presentationTimeUs = 3120062 +sample: + trackType = audio + dataHashCode = -1022783545 + size = 520 + isKeyFrame = true + presentationTimeUs = 3141395 +sample: + trackType = audio + dataHashCode = 1511042490 + size = 509 + isKeyFrame = true + presentationTimeUs = 3162729 +sample: + trackType = audio + dataHashCode = 1907789598 + size = 508 + isKeyFrame = true + presentationTimeUs = 3184062 +sample: + trackType = audio + dataHashCode = -1584969373 + size = 511 + isKeyFrame = true + presentationTimeUs = 3205395 +sample: + trackType = audio + dataHashCode = -1344243274 + size = 538 + isKeyFrame = true + presentationTimeUs = 3226729 +sample: + trackType = audio + dataHashCode = -1369956355 + size = 516 + isKeyFrame = true + presentationTimeUs = 3248062 +sample: + trackType = audio + dataHashCode = 1981575575 + size = 512 + isKeyFrame = true + presentationTimeUs = 3269395 +sample: + trackType = audio + dataHashCode = 157493664 + size = 515 + isKeyFrame = true + presentationTimeUs = 3290729 +sample: + trackType = audio + dataHashCode = 681462579 + size = 596 + isKeyFrame = true + presentationTimeUs = 3312062 +sample: + trackType = audio + dataHashCode = -2037388967 + size = 488 + isKeyFrame = true + presentationTimeUs = 3333395 +sample: + trackType = audio + dataHashCode = 1768160703 + size = 499 + isKeyFrame = true + presentationTimeUs = 3354729 +sample: + trackType = audio + dataHashCode = 1486254460 + size = 517 + isKeyFrame = true + presentationTimeUs = 3376062 +sample: + trackType = audio + dataHashCode = -976520037 + size = 496 + isKeyFrame = true + presentationTimeUs = 3397395 +sample: + trackType = audio + dataHashCode = 142951329 + size = 494 + isKeyFrame = true + presentationTimeUs = 3418729 +sample: + trackType = audio + dataHashCode = -150909598 + size = 524 + isKeyFrame = true + presentationTimeUs = 3440062 +sample: + trackType = audio + dataHashCode = -803007660 + size = 508 + isKeyFrame = true + presentationTimeUs = 3461395 +sample: + trackType = audio + dataHashCode = 139501797 + size = 501 + isKeyFrame = true + presentationTimeUs = 3482729 +sample: + trackType = audio + dataHashCode = -830201286 + size = 507 + isKeyFrame = true + presentationTimeUs = 3504062 +sample: + trackType = audio + dataHashCode = 530558899 + size = 517 + isKeyFrame = true + presentationTimeUs = 3525395 +sample: + trackType = audio + dataHashCode = -1895912457 + size = 503 + isKeyFrame = true + presentationTimeUs = 3546729 +sample: + trackType = audio + dataHashCode = 1604568548 + size = 512 + isKeyFrame = true + presentationTimeUs = 3568062 +sample: + trackType = audio + dataHashCode = -1454149180 + size = 507 + isKeyFrame = true + presentationTimeUs = 3589395 +sample: + trackType = audio + dataHashCode = -1456192499 + size = 508 + isKeyFrame = true + presentationTimeUs = 3610729 +sample: + trackType = audio + dataHashCode = -7743065 + size = 497 + isKeyFrame = true + presentationTimeUs = 3632062 +sample: + trackType = audio + dataHashCode = -1633106551 + size = 498 + isKeyFrame = true + presentationTimeUs = 3653395 +sample: + trackType = audio + dataHashCode = -1221292263 + size = 519 + isKeyFrame = true + presentationTimeUs = 3674729 +sample: + trackType = audio + dataHashCode = -957779524 + size = 510 + isKeyFrame = true + presentationTimeUs = 3696062 +sample: + trackType = audio + dataHashCode = -994487565 + size = 532 + isKeyFrame = true + presentationTimeUs = 3717395 +sample: + trackType = audio + dataHashCode = -752933445 + size = 501 + isKeyFrame = true + presentationTimeUs = 3738729 +sample: + trackType = audio + dataHashCode = 1976108805 + size = 521 + isKeyFrame = true + presentationTimeUs = 3760062 +sample: + trackType = audio + dataHashCode = -841348224 + size = 505 + isKeyFrame = true + presentationTimeUs = 3781395 +sample: + trackType = audio + dataHashCode = -1557717320 + size = 525 + isKeyFrame = true + presentationTimeUs = 3802729 +sample: + trackType = audio + dataHashCode = 805696551 + size = 504 + isKeyFrame = true + presentationTimeUs = 3824062 +sample: + trackType = audio + dataHashCode = 3092252 + size = 501 + isKeyFrame = true + presentationTimeUs = 3845395 +sample: + trackType = audio + dataHashCode = -1507474603 + size = 513 + isKeyFrame = true + presentationTimeUs = 3866729 +sample: + trackType = audio + dataHashCode = -1241924083 + size = 505 + isKeyFrame = true + presentationTimeUs = 3888062 +sample: + trackType = audio + dataHashCode = -47795961 + size = 494 + isKeyFrame = true + presentationTimeUs = 3909395 +sample: + trackType = audio + dataHashCode = -1666005455 + size = 518 + isKeyFrame = true + presentationTimeUs = 3930729 +sample: + trackType = audio + dataHashCode = 74648816 + size = 511 + isKeyFrame = true + presentationTimeUs = 3952062 +sample: + trackType = audio + dataHashCode = -63549914 + size = 505 + isKeyFrame = true + presentationTimeUs = 3973395 +sample: + trackType = audio + dataHashCode = 2005173599 + size = 506 + isKeyFrame = true + presentationTimeUs = 3994729 +sample: + trackType = audio + dataHashCode = -1923634 + size = 507 + isKeyFrame = true + presentationTimeUs = 4016062 +sample: + trackType = audio + dataHashCode = 785424814 + size = 503 + isKeyFrame = true + presentationTimeUs = 4037395 +sample: + trackType = audio + dataHashCode = 937231008 + size = 529 + isKeyFrame = true + presentationTimeUs = 4058729 +sample: + trackType = audio + dataHashCode = 1927947088 + size = 518 + isKeyFrame = true + presentationTimeUs = 4080062 +sample: + trackType = audio + dataHashCode = -927158609 + size = 520 + isKeyFrame = true + presentationTimeUs = 4101395 +sample: + trackType = audio + dataHashCode = 1600991660 + size = 508 + isKeyFrame = true + presentationTimeUs = 4122729 +sample: + trackType = audio + dataHashCode = -1545991020 + size = 540 + isKeyFrame = true + presentationTimeUs = 4144062 +sample: + trackType = audio + dataHashCode = 1893176911 + size = 508 + isKeyFrame = true + presentationTimeUs = 4165395 +sample: + trackType = audio + dataHashCode = 1730386959 + size = 514 + isKeyFrame = true + presentationTimeUs = 4186729 +sample: + trackType = audio + dataHashCode = -1703301523 + size = 515 + isKeyFrame = true + presentationTimeUs = 4208062 +sample: + trackType = audio + dataHashCode = 1247143255 + size = 521 + isKeyFrame = true + presentationTimeUs = 4229395 +sample: + trackType = audio + dataHashCode = -1330834266 + size = 513 + isKeyFrame = true + presentationTimeUs = 4250729 +sample: + trackType = audio + dataHashCode = 909809285 + size = 511 + isKeyFrame = true + presentationTimeUs = 4272062 +sample: + trackType = audio + dataHashCode = 150278867 + size = 511 + isKeyFrame = true + presentationTimeUs = 4293395 +sample: + trackType = audio + dataHashCode = 800297348 + size = 509 + isKeyFrame = true + presentationTimeUs = 4314729 +sample: + trackType = audio + dataHashCode = 1469095866 + size = 514 + isKeyFrame = true + presentationTimeUs = 4336062 +sample: + trackType = audio + dataHashCode = -2104038282 + size = 537 + isKeyFrame = true + presentationTimeUs = 4357395 +sample: + trackType = audio + dataHashCode = 236113592 + size = 504 + isKeyFrame = true + presentationTimeUs = 4378729 +sample: + trackType = audio + dataHashCode = 1867089506 + size = 504 + isKeyFrame = true + presentationTimeUs = 4400062 +sample: + trackType = audio + dataHashCode = 576601169 + size = 529 + isKeyFrame = true + presentationTimeUs = 4421395 +sample: + trackType = audio + dataHashCode = -678661314 + size = 506 + isKeyFrame = true + presentationTimeUs = 4442729 +sample: + trackType = audio + dataHashCode = -1868264645 + size = 503 + isKeyFrame = true + presentationTimeUs = 4464062 +sample: + trackType = audio + dataHashCode = 1199882243 + size = 511 + isKeyFrame = true + presentationTimeUs = 4485395 +sample: + trackType = audio + dataHashCode = 1556422822 + size = 518 + isKeyFrame = true + presentationTimeUs = 4506729 +sample: + trackType = audio + dataHashCode = 311437827 + size = 503 + isKeyFrame = true + presentationTimeUs = 4528062 +sample: + trackType = audio + dataHashCode = -1192194154 + size = 504 + isKeyFrame = true + presentationTimeUs = 4549395 +sample: + trackType = audio + dataHashCode = 276421377 + size = 508 + isKeyFrame = true + presentationTimeUs = 4570729 +sample: + trackType = audio + dataHashCode = -1015407951 + size = 503 + isKeyFrame = true + presentationTimeUs = 4592062 +sample: + trackType = audio + dataHashCode = -1791481656 + size = 515 + isKeyFrame = true + presentationTimeUs = 4613395 +sample: + trackType = audio + dataHashCode = 1722619480 + size = 512 + isKeyFrame = true + presentationTimeUs = 4634854 +sample: + trackType = audio + dataHashCode = 1488377759 + size = 515 + isKeyFrame = true + presentationTimeUs = 4656187 +sample: + trackType = audio + dataHashCode = 948301150 + size = 536 + isKeyFrame = true + presentationTimeUs = 4677520 +sample: + trackType = audio + dataHashCode = -1637445891 + size = 494 + isKeyFrame = true + presentationTimeUs = 4698854 +sample: + trackType = audio + dataHashCode = 1767801716 + size = 497 + isKeyFrame = true + presentationTimeUs = 4720187 +sample: + trackType = audio + dataHashCode = -974848973 + size = 501 + isKeyFrame = true + presentationTimeUs = 4741520 +sample: + trackType = audio + dataHashCode = -1652998431 + size = 502 + isKeyFrame = true + presentationTimeUs = 4762854 +sample: + trackType = audio + dataHashCode = -415953507 + size = 507 + isKeyFrame = true + presentationTimeUs = 4784187 +sample: + trackType = audio + dataHashCode = -1907883210 + size = 512 + isKeyFrame = true + presentationTimeUs = 4805520 +sample: + trackType = audio + dataHashCode = -729190639 + size = 514 + isKeyFrame = true + presentationTimeUs = 4826854 +sample: + trackType = audio + dataHashCode = -802352991 + size = 508 + isKeyFrame = true + presentationTimeUs = 4848187 +sample: + trackType = audio + dataHashCode = -1524792315 + size = 580 + isKeyFrame = true + presentationTimeUs = 4869520 +sample: + trackType = audio + dataHashCode = 60931497 + size = 521 + isKeyFrame = true + presentationTimeUs = 4890854 +sample: + trackType = audio + dataHashCode = -2043570840 + size = 507 + isKeyFrame = true + presentationTimeUs = 4912187 +sample: + trackType = audio + dataHashCode = -553974275 + size = 508 + isKeyFrame = true + presentationTimeUs = 4933520 +sample: + trackType = audio + dataHashCode = 334577363 + size = 506 + isKeyFrame = true + presentationTimeUs = 4954854 +sample: + trackType = audio + dataHashCode = 371331275 + size = 514 + isKeyFrame = true + presentationTimeUs = 4976187 +sample: + trackType = audio + dataHashCode = -631552417 + size = 527 + isKeyFrame = true + presentationTimeUs = 4997520 +sample: + trackType = audio + dataHashCode = 1003149572 + size = 508 + isKeyFrame = true + presentationTimeUs = 5018854 +sample: + trackType = audio + dataHashCode = -2129682854 + size = 514 + isKeyFrame = true + presentationTimeUs = 5040187 +sample: + trackType = audio + dataHashCode = 1730492141 + size = 499 + isKeyFrame = true + presentationTimeUs = 5061520 +sample: + trackType = audio + dataHashCode = 530636814 + size = 504 + isKeyFrame = true + presentationTimeUs = 5082854 +sample: + trackType = audio + dataHashCode = -1049951593 + size = 500 + isKeyFrame = true + presentationTimeUs = 5104187 +sample: + trackType = audio + dataHashCode = 767802131 + size = 517 + isKeyFrame = true + presentationTimeUs = 5125520 +sample: + trackType = audio + dataHashCode = -648769616 + size = 505 + isKeyFrame = true + presentationTimeUs = 5146854 +sample: + trackType = audio + dataHashCode = 1372041507 + size = 508 + isKeyFrame = true + presentationTimeUs = 5168187 +sample: + trackType = audio + dataHashCode = -395977660 + size = 509 + isKeyFrame = true + presentationTimeUs = 5189520 +sample: + trackType = audio + dataHashCode = 1558511585 + size = 507 + isKeyFrame = true + presentationTimeUs = 5210854 +sample: + trackType = audio + dataHashCode = -232178845 + size = 503 + isKeyFrame = true + presentationTimeUs = 5232187 +sample: + trackType = audio + dataHashCode = -271652698 + size = 507 + isKeyFrame = true + presentationTimeUs = 5253520 +sample: + trackType = audio + dataHashCode = -168302923 + size = 516 + isKeyFrame = true + presentationTimeUs = 5274854 +sample: + trackType = audio + dataHashCode = -956702230 + size = 509 + isKeyFrame = true + presentationTimeUs = 5296187 +sample: + trackType = audio + dataHashCode = 880406675 + size = 522 + isKeyFrame = true + presentationTimeUs = 5317520 +sample: + trackType = audio + dataHashCode = -1344363782 + size = 533 + isKeyFrame = true + presentationTimeUs = 5338854 +sample: + trackType = audio + dataHashCode = -402506906 + size = 502 + isKeyFrame = true + presentationTimeUs = 5360187 +sample: + trackType = audio + dataHashCode = -2077490806 + size = 506 + isKeyFrame = true + presentationTimeUs = 5381520 +sample: + trackType = audio + dataHashCode = -523808453 + size = 511 + isKeyFrame = true + presentationTimeUs = 5402854 +sample: + trackType = audio + dataHashCode = -2066890714 + size = 516 + isKeyFrame = true + presentationTimeUs = 5424187 +sample: + trackType = audio + dataHashCode = 642958395 + size = 503 + isKeyFrame = true + presentationTimeUs = 5445520 +sample: + trackType = audio + dataHashCode = -232748010 + size = 567 + isKeyFrame = true + presentationTimeUs = 5466854 +sample: + trackType = audio + dataHashCode = -1152427828 + size = 516 + isKeyFrame = true + presentationTimeUs = 5488187 +sample: + trackType = audio + dataHashCode = 1530794883 + size = 494 + isKeyFrame = true + presentationTimeUs = 5509520 +sample: + trackType = audio + dataHashCode = -1443275800 + size = 519 + isKeyFrame = true + presentationTimeUs = 5530854 +sample: + trackType = audio + dataHashCode = 895842236 + size = 500 + isKeyFrame = true + presentationTimeUs = 5552187 +sample: + trackType = audio + dataHashCode = -70170624 + size = 511 + isKeyFrame = true + presentationTimeUs = 5573520 +sample: + trackType = audio + dataHashCode = -935627181 + size = 522 + isKeyFrame = true + presentationTimeUs = 5594854 +sample: + trackType = audio + dataHashCode = -1823085091 + size = 502 + isKeyFrame = true + presentationTimeUs = 5616187 +sample: + trackType = audio + dataHashCode = -28143237 + size = 501 + isKeyFrame = true + presentationTimeUs = 5637520 +sample: + trackType = audio + dataHashCode = 1380217944 + size = 536 + isKeyFrame = true + presentationTimeUs = 5658854 +sample: + trackType = audio + dataHashCode = -556905170 + size = 507 + isKeyFrame = true + presentationTimeUs = 5680187 +sample: + trackType = audio + dataHashCode = 424312021 + size = 498 + isKeyFrame = true + presentationTimeUs = 5701520 +sample: + trackType = audio + dataHashCode = 1316596585 + size = 525 + isKeyFrame = true + presentationTimeUs = 5722854 +sample: + trackType = audio + dataHashCode = 428679927 + size = 505 + isKeyFrame = true + presentationTimeUs = 5744187 +sample: + trackType = audio + dataHashCode = 1236842567 + size = 495 + isKeyFrame = true + presentationTimeUs = 5765520 +sample: + trackType = audio + dataHashCode = -772172444 + size = 499 + isKeyFrame = true + presentationTimeUs = 5786854 +sample: + trackType = audio + dataHashCode = -1855746403 + size = 510 + isKeyFrame = true + presentationTimeUs = 5808187 +sample: + trackType = audio + dataHashCode = 787427662 + size = 512 + isKeyFrame = true + presentationTimeUs = 5829520 +sample: + trackType = audio + dataHashCode = 268332503 + size = 500 + isKeyFrame = true + presentationTimeUs = 5850854 +sample: + trackType = audio + dataHashCode = 1236337399 + size = 507 + isKeyFrame = true + presentationTimeUs = 5872187 +sample: + trackType = audio + dataHashCode = 565190590 + size = 506 + isKeyFrame = true + presentationTimeUs = 5893520 +sample: + trackType = audio + dataHashCode = -372946866 + size = 502 + isKeyFrame = true + presentationTimeUs = 5914854 +sample: + trackType = audio + dataHashCode = 913612137 + size = 503 + isKeyFrame = true + presentationTimeUs = 5936187 +sample: + trackType = audio + dataHashCode = 1644598599 + size = 530 + isKeyFrame = true + presentationTimeUs = 5957520 +sample: + trackType = audio + dataHashCode = 1508274987 + size = 517 + isKeyFrame = true + presentationTimeUs = 5978854 +sample: + trackType = audio + dataHashCode = -1198950188 + size = 517 + isKeyFrame = true + presentationTimeUs = 6000187 +sample: + trackType = audio + dataHashCode = 808244491 + size = 503 + isKeyFrame = true + presentationTimeUs = 6021520 +sample: + trackType = audio + dataHashCode = 1436171397 + size = 510 + isKeyFrame = true + presentationTimeUs = 6042854 +sample: + trackType = audio + dataHashCode = -200211718 + size = 509 + isKeyFrame = true + presentationTimeUs = 6064187 +sample: + trackType = audio + dataHashCode = -218207820 + size = 532 + isKeyFrame = true + presentationTimeUs = 6085520 +sample: + trackType = audio + dataHashCode = -1090562339 + size = 501 + isKeyFrame = true + presentationTimeUs = 6106854 +sample: + trackType = audio + dataHashCode = 1865186154 + size = 503 + isKeyFrame = true + presentationTimeUs = 6128187 +sample: + trackType = audio + dataHashCode = 1745461646 + size = 522 + isKeyFrame = true + presentationTimeUs = 6149520 +sample: + trackType = audio + dataHashCode = -1712777412 + size = 507 + isKeyFrame = true + presentationTimeUs = 6170854 +sample: + trackType = audio + dataHashCode = -74596264 + size = 522 + isKeyFrame = true + presentationTimeUs = 6192187 +sample: + trackType = audio + dataHashCode = 1573584152 + size = 520 + isKeyFrame = true + presentationTimeUs = 6213520 +sample: + trackType = audio + dataHashCode = -43013678 + size = 515 + isKeyFrame = true + presentationTimeUs = 6234854 +sample: + trackType = audio + dataHashCode = 2128353170 + size = 507 + isKeyFrame = true + presentationTimeUs = 6256187 +sample: + trackType = audio + dataHashCode = 1900838631 + size = 502 + isKeyFrame = true + presentationTimeUs = 6277520 +sample: + trackType = audio + dataHashCode = 2145950846 + size = 524 + isKeyFrame = true + presentationTimeUs = 6298854 +sample: + trackType = audio + dataHashCode = -1104232538 + size = 502 + isKeyFrame = true + presentationTimeUs = 6320187 +sample: + trackType = audio + dataHashCode = -485602176 + size = 509 + isKeyFrame = true + presentationTimeUs = 6341520 +sample: + trackType = audio + dataHashCode = 985483043 + size = 519 + isKeyFrame = true + presentationTimeUs = 6362854 +sample: + trackType = audio + dataHashCode = -1779540035 + size = 503 + isKeyFrame = true + presentationTimeUs = 6384187 +sample: + trackType = audio + dataHashCode = -204748419 + size = 496 + isKeyFrame = true + presentationTimeUs = 6405520 +sample: + trackType = audio + dataHashCode = 1347290364 + size = 505 + isKeyFrame = true + presentationTimeUs = 6426854 +sample: + trackType = audio + dataHashCode = -77950147 + size = 503 + isKeyFrame = true + presentationTimeUs = 6448187 +sample: + trackType = audio + dataHashCode = -1689738272 + size = 518 + isKeyFrame = true + presentationTimeUs = 6469520 +sample: + trackType = audio + dataHashCode = -11736151 + size = 509 + isKeyFrame = true + presentationTimeUs = 6491020 +sample: + trackType = audio + dataHashCode = -330148784 + size = 518 + isKeyFrame = true + presentationTimeUs = 6512354 +sample: + trackType = audio + dataHashCode = 50897497 + size = 507 + isKeyFrame = true + presentationTimeUs = 6533687 +sample: + trackType = audio + dataHashCode = 1983589043 + size = 505 + isKeyFrame = true + presentationTimeUs = 6555020 +sample: + trackType = audio + dataHashCode = 1740915103 + size = 511 + isKeyFrame = true + presentationTimeUs = 6576354 +sample: + trackType = audio + dataHashCode = -1674402251 + size = 519 + isKeyFrame = true + presentationTimeUs = 6597687 +sample: + trackType = audio + dataHashCode = -1650605797 + size = 517 + isKeyFrame = true + presentationTimeUs = 6619020 +sample: + trackType = audio + dataHashCode = -892280110 + size = 515 + isKeyFrame = true + presentationTimeUs = 6640354 +sample: + trackType = audio + dataHashCode = -1598343829 + size = 505 + isKeyFrame = true + presentationTimeUs = 6661687 +sample: + trackType = audio + dataHashCode = 2120935791 + size = 516 + isKeyFrame = true + presentationTimeUs = 6683020 +sample: + trackType = audio + dataHashCode = 718272674 + size = 509 + isKeyFrame = true + presentationTimeUs = 6704354 +sample: + trackType = audio + dataHashCode = -1706257542 + size = 512 + isKeyFrame = true + presentationTimeUs = 6725687 +sample: + trackType = audio + dataHashCode = 1309299491 + size = 518 + isKeyFrame = true + presentationTimeUs = 6747020 +sample: + trackType = audio + dataHashCode = 1291995814 + size = 515 + isKeyFrame = true + presentationTimeUs = 6768354 +sample: + trackType = audio + dataHashCode = -704161882 + size = 506 + isKeyFrame = true + presentationTimeUs = 6789687 +sample: + trackType = audio + dataHashCode = -1803278327 + size = 511 + isKeyFrame = true + presentationTimeUs = 6811020 +sample: + trackType = audio + dataHashCode = -263958855 + size = 518 + isKeyFrame = true + presentationTimeUs = 6832354 +sample: + trackType = audio + dataHashCode = -479827013 + size = 522 + isKeyFrame = true + presentationTimeUs = 6853687 +sample: + trackType = audio + dataHashCode = -1402847250 + size = 517 + isKeyFrame = true + presentationTimeUs = 6875020 +sample: + trackType = audio + dataHashCode = -120122717 + size = 522 + isKeyFrame = true + presentationTimeUs = 6896354 +sample: + trackType = audio + dataHashCode = 1258559088 + size = 538 + isKeyFrame = true + presentationTimeUs = 6917687 +sample: + trackType = audio + dataHashCode = -1178184009 + size = 515 + isKeyFrame = true + presentationTimeUs = 6939020 +sample: + trackType = audio + dataHashCode = 1824358444 + size = 489 + isKeyFrame = true + presentationTimeUs = 6960354 +sample: + trackType = audio + dataHashCode = -3970209 + size = 503 + isKeyFrame = true + presentationTimeUs = 6981687 +sample: + trackType = audio + dataHashCode = -1002784342 + size = 508 + isKeyFrame = true + presentationTimeUs = 7003020 +sample: + trackType = audio + dataHashCode = 486405129 + size = 504 + isKeyFrame = true + presentationTimeUs = 7024354 +sample: + trackType = audio + dataHashCode = 1932863520 + size = 509 + isKeyFrame = true + presentationTimeUs = 7045687 +sample: + trackType = audio + dataHashCode = -1019019891 + size = 501 + isKeyFrame = true + presentationTimeUs = 7067020 +sample: + trackType = audio + dataHashCode = -1734950122 + size = 510 + isKeyFrame = true + presentationTimeUs = 7088354 +sample: + trackType = audio + dataHashCode = 807095341 + size = 532 + isKeyFrame = true + presentationTimeUs = 7109687 +sample: + trackType = audio + dataHashCode = -1041274180 + size = 507 + isKeyFrame = true + presentationTimeUs = 7131020 +sample: + trackType = audio + dataHashCode = -637337163 + size = 507 + isKeyFrame = true + presentationTimeUs = 7152354 +sample: + trackType = audio + dataHashCode = -119624138 + size = 527 + isKeyFrame = true + presentationTimeUs = 7173687 +sample: + trackType = audio + dataHashCode = -556519826 + size = 507 + isKeyFrame = true + presentationTimeUs = 7195020 +sample: + trackType = audio + dataHashCode = -492500668 + size = 506 + isKeyFrame = true + presentationTimeUs = 7216354 +sample: + trackType = audio + dataHashCode = -2081018875 + size = 513 + isKeyFrame = true + presentationTimeUs = 7237687 +sample: + trackType = audio + dataHashCode = -2017109950 + size = 529 + isKeyFrame = true + presentationTimeUs = 7259020 +sample: + trackType = audio + dataHashCode = 1625572444 + size = 510 + isKeyFrame = true + presentationTimeUs = 7280354 +sample: + trackType = audio + dataHashCode = -1646289383 + size = 500 + isKeyFrame = true + presentationTimeUs = 7301687 +sample: + trackType = audio + dataHashCode = 257379954 + size = 511 + isKeyFrame = true + presentationTimeUs = 7323020 +sample: + trackType = audio + dataHashCode = 1493550264 + size = 519 + isKeyFrame = true + presentationTimeUs = 7344354 +sample: + trackType = audio + dataHashCode = -1453370500 + size = 512 + isKeyFrame = true + presentationTimeUs = 7365687 +sample: + trackType = audio + dataHashCode = 1144247557 + size = 514 + isKeyFrame = true + presentationTimeUs = 7387020 +sample: + trackType = audio + dataHashCode = -1193483660 + size = 555 + isKeyFrame = true + presentationTimeUs = 7408354 +sample: + trackType = audio + dataHashCode = -376622061 + size = 499 + isKeyFrame = true + presentationTimeUs = 7429687 +sample: + trackType = audio + dataHashCode = 1968555861 + size = 507 + isKeyFrame = true + presentationTimeUs = 7451020 +sample: + trackType = audio + dataHashCode = 573470856 + size = 518 + isKeyFrame = true + presentationTimeUs = 7472354 +sample: + trackType = audio + dataHashCode = 422923787 + size = 502 + isKeyFrame = true + presentationTimeUs = 7493687 +sample: + trackType = audio + dataHashCode = -1568454449 + size = 503 + isKeyFrame = true + presentationTimeUs = 7515020 +sample: + trackType = audio + dataHashCode = -788706138 + size = 518 + isKeyFrame = true + presentationTimeUs = 7536354 +sample: + trackType = audio + dataHashCode = 839626599 + size = 510 + isKeyFrame = true + presentationTimeUs = 7557687 +sample: + trackType = audio + dataHashCode = 1522473516 + size = 509 + isKeyFrame = true + presentationTimeUs = 7579020 +sample: + trackType = audio + dataHashCode = -187987642 + size = 523 + isKeyFrame = true + presentationTimeUs = 7600354 +sample: + trackType = audio + dataHashCode = -367771219 + size = 508 + isKeyFrame = true + presentationTimeUs = 7621687 +sample: + trackType = audio + dataHashCode = -1158108886 + size = 517 + isKeyFrame = true + presentationTimeUs = 7643020 +sample: + trackType = audio + dataHashCode = -582312353 + size = 523 + isKeyFrame = true + presentationTimeUs = 7664354 +sample: + trackType = audio + dataHashCode = 494085054 + size = 506 + isKeyFrame = true + presentationTimeUs = 7685687 +sample: + trackType = audio + dataHashCode = 274189565 + size = 500 + isKeyFrame = true + presentationTimeUs = 7707020 +sample: + trackType = audio + dataHashCode = 1226830488 + size = 520 + isKeyFrame = true + presentationTimeUs = 7728354 +sample: + trackType = audio + dataHashCode = -1872317518 + size = 509 + isKeyFrame = true + presentationTimeUs = 7749687 +sample: + trackType = audio + dataHashCode = -623897608 + size = 523 + isKeyFrame = true + presentationTimeUs = 7771020 +sample: + trackType = audio + dataHashCode = -193372299 + size = 505 + isKeyFrame = true + presentationTimeUs = 7792354 +sample: + trackType = audio + dataHashCode = 435326737 + size = 507 + isKeyFrame = true + presentationTimeUs = 7813687 +sample: + trackType = audio + dataHashCode = -319262252 + size = 510 + isKeyFrame = true + presentationTimeUs = 7835020 +sample: + trackType = audio + dataHashCode = 748801154 + size = 509 + isKeyFrame = true + presentationTimeUs = 7856354 +sample: + trackType = audio + dataHashCode = 2060983981 + size = 512 + isKeyFrame = true + presentationTimeUs = 7877687 +sample: + trackType = audio + dataHashCode = 765159595 + size = 523 + isKeyFrame = true + presentationTimeUs = 7899020 +sample: + trackType = audio + dataHashCode = 138270678 + size = 510 + isKeyFrame = true + presentationTimeUs = 7920354 +sample: + trackType = audio + dataHashCode = -1675311607 + size = 507 + isKeyFrame = true + presentationTimeUs = 7941687 +sample: + trackType = audio + dataHashCode = -1330921205 + size = 519 + isKeyFrame = true + presentationTimeUs = 7963020 +sample: + trackType = audio + dataHashCode = -1059170083 + size = 505 + isKeyFrame = true + presentationTimeUs = 7984354 +sample: + trackType = audio + dataHashCode = 1737373343 + size = 512 + isKeyFrame = true + presentationTimeUs = 8005687 +sample: + trackType = audio + dataHashCode = 447394496 + size = 511 + isKeyFrame = true + presentationTimeUs = 8027020 +sample: + trackType = audio + dataHashCode = 925414575 + size = 516 + isKeyFrame = true + presentationTimeUs = 8048354 +sample: + trackType = audio + dataHashCode = -186623100 + size = 522 + isKeyFrame = true + presentationTimeUs = 8069687 +sample: + trackType = audio + dataHashCode = 1940688111 + size = 511 + isKeyFrame = true + presentationTimeUs = 8091020 +sample: + trackType = audio + dataHashCode = 1891469863 + size = 515 + isKeyFrame = true + presentationTimeUs = 8112354 +sample: + trackType = audio + dataHashCode = -1768074493 + size = 524 + isKeyFrame = true + presentationTimeUs = 8133687 +sample: + trackType = audio + dataHashCode = 358299424 + size = 509 + isKeyFrame = true + presentationTimeUs = 8155020 +sample: + trackType = audio + dataHashCode = 881395628 + size = 503 + isKeyFrame = true + presentationTimeUs = 8176354 +sample: + trackType = audio + dataHashCode = 1359512748 + size = 517 + isKeyFrame = true + presentationTimeUs = 8197687 +sample: + trackType = audio + dataHashCode = 451738197 + size = 516 + isKeyFrame = true + presentationTimeUs = 8219020 +sample: + trackType = audio + dataHashCode = -1509590494 + size = 514 + isKeyFrame = true + presentationTimeUs = 8240354 +sample: + trackType = audio + dataHashCode = -1674101405 + size = 511 + isKeyFrame = true + presentationTimeUs = 8261687 +sample: + trackType = audio + dataHashCode = 464933265 + size = 503 + isKeyFrame = true + presentationTimeUs = 8283020 +sample: + trackType = audio + dataHashCode = -2145156632 + size = 498 + isKeyFrame = true + presentationTimeUs = 8304354 +sample: + trackType = audio + dataHashCode = 923373715 + size = 511 + isKeyFrame = true + presentationTimeUs = 8325687 +sample: + trackType = audio + dataHashCode = 1051809958 + size = 504 + isKeyFrame = true + presentationTimeUs = 8347020 +sample: + trackType = audio + dataHashCode = 2064631765 + size = 516 + isKeyFrame = true + presentationTimeUs = 8368354 +sample: + trackType = audio + dataHashCode = 242914279 + size = 511 + isKeyFrame = true + presentationTimeUs = 8389687 +sample: + trackType = audio + dataHashCode = -232957898 + size = 500 + isKeyFrame = true + presentationTimeUs = 8411020 +sample: + trackType = audio + dataHashCode = -1741837883 + size = 532 + isKeyFrame = true + presentationTimeUs = 8432354 +sample: + trackType = audio + dataHashCode = -1134668999 + size = 510 + isKeyFrame = true + presentationTimeUs = 8453687 +sample: + trackType = audio + dataHashCode = -513765663 + size = 517 + isKeyFrame = true + presentationTimeUs = 8475020 +sample: + trackType = audio + dataHashCode = 1487045348 + size = 508 + isKeyFrame = true + presentationTimeUs = 8496354 +sample: + trackType = audio + dataHashCode = 222716521 + size = 506 + isKeyFrame = true + presentationTimeUs = 8517687 +sample: + trackType = audio + dataHashCode = -148280321 + size = 517 + isKeyFrame = true + presentationTimeUs = 8539020 +sample: + trackType = audio + dataHashCode = 1931777196 + size = 505 + isKeyFrame = true + presentationTimeUs = 8560354 +sample: + trackType = audio + dataHashCode = -1421251060 + size = 504 + isKeyFrame = true + presentationTimeUs = 8581687 +sample: + trackType = audio + dataHashCode = -1238388600 + size = 509 + isKeyFrame = true + presentationTimeUs = 8603020 +sample: + trackType = audio + dataHashCode = 1137553215 + size = 528 + isKeyFrame = true + presentationTimeUs = 8624354 +sample: + trackType = audio + dataHashCode = -255445256 + size = 521 + isKeyFrame = true + presentationTimeUs = 8645687 +sample: + trackType = audio + dataHashCode = -268442746 + size = 505 + isKeyFrame = true + presentationTimeUs = 8667020 +sample: + trackType = audio + dataHashCode = 1421833332 + size = 502 + isKeyFrame = true + presentationTimeUs = 8688354 +sample: + trackType = audio + dataHashCode = 799867575 + size = 511 + isKeyFrame = true + presentationTimeUs = 8709687 +sample: + trackType = audio + dataHashCode = -182356123 + size = 522 + isKeyFrame = true + presentationTimeUs = 8731020 +sample: + trackType = audio + dataHashCode = 1112208902 + size = 521 + isKeyFrame = true + presentationTimeUs = 8752354 +sample: + trackType = audio + dataHashCode = -1785842190 + size = 513 + isKeyFrame = true + presentationTimeUs = 8773687 +sample: + trackType = audio + dataHashCode = 1647037206 + size = 517 + isKeyFrame = true + presentationTimeUs = 8795020 +sample: + trackType = audio + dataHashCode = -124500470 + size = 511 + isKeyFrame = true + presentationTimeUs = 8816354 +sample: + trackType = audio + dataHashCode = -1579097759 + size = 506 + isKeyFrame = true + presentationTimeUs = 8837687 +sample: + trackType = audio + dataHashCode = 1072373185 + size = 507 + isKeyFrame = true + presentationTimeUs = 8859020 +sample: + trackType = audio + dataHashCode = 1145547460 + size = 532 + isKeyFrame = true + presentationTimeUs = 8880354 +sample: + trackType = audio + dataHashCode = 1823857238 + size = 511 + isKeyFrame = true + presentationTimeUs = 8901687 +sample: + trackType = audio + dataHashCode = 1147997122 + size = 513 + isKeyFrame = true + presentationTimeUs = 8923020 +sample: + trackType = audio + dataHashCode = -227582411 + size = 504 + isKeyFrame = true + presentationTimeUs = 8944354 +sample: + trackType = audio + dataHashCode = 1734784290 + size = 513 + isKeyFrame = true + presentationTimeUs = 8965687 +sample: + trackType = audio + dataHashCode = -621303949 + size = 519 + isKeyFrame = true + presentationTimeUs = 8987020 +sample: + trackType = audio + dataHashCode = 1572393466 + size = 510 + isKeyFrame = true + presentationTimeUs = 9008354 +sample: + trackType = audio + dataHashCode = -1334738124 + size = 498 + isKeyFrame = true + presentationTimeUs = 9029687 +sample: + trackType = audio + dataHashCode = 443717061 + size = 506 + isKeyFrame = true + presentationTimeUs = 9051020 +sample: + trackType = audio + dataHashCode = 345145444 + size = 506 + isKeyFrame = true + presentationTimeUs = 9072354 +sample: + trackType = audio + dataHashCode = -41474839 + size = 519 + isKeyFrame = true + presentationTimeUs = 9093687 +sample: + trackType = audio + dataHashCode = -741130204 + size = 511 + isKeyFrame = true + presentationTimeUs = 9115020 +sample: + trackType = audio + dataHashCode = 2086296598 + size = 520 + isKeyFrame = true + presentationTimeUs = 9136354 +sample: + trackType = audio + dataHashCode = -1466927471 + size = 513 + isKeyFrame = true + presentationTimeUs = 9157687 +sample: + trackType = audio + dataHashCode = 1917255885 + size = 515 + isKeyFrame = true + presentationTimeUs = 9179020 +sample: + trackType = audio + dataHashCode = 1238467192 + size = 517 + isKeyFrame = true + presentationTimeUs = 9200354 +sample: + trackType = audio + dataHashCode = 1303467127 + size = 513 + isKeyFrame = true + presentationTimeUs = 9221687 +sample: + trackType = audio + dataHashCode = -1447986053 + size = 501 + isKeyFrame = true + presentationTimeUs = 9243020 +sample: + trackType = audio + dataHashCode = 870070082 + size = 500 + isKeyFrame = true + presentationTimeUs = 9264354 +sample: + trackType = audio + dataHashCode = 177304829 + size = 503 + isKeyFrame = true + presentationTimeUs = 9285687 +sample: + trackType = audio + dataHashCode = 164209712 + size = 491 + isKeyFrame = true + presentationTimeUs = 9307020 +sample: + trackType = audio + dataHashCode = 872620175 + size = 531 + isKeyFrame = true + presentationTimeUs = 9328354 +sample: + trackType = audio + dataHashCode = 1997609212 + size = 533 + isKeyFrame = true + presentationTimeUs = 9349687 +sample: + trackType = audio + dataHashCode = -1463572137 + size = 503 + isKeyFrame = true + presentationTimeUs = 9371020 +sample: + trackType = audio + dataHashCode = 29974150 + size = 497 + isKeyFrame = true + presentationTimeUs = 9392354 +sample: + trackType = audio + dataHashCode = 1388112663 + size = 517 + isKeyFrame = true + presentationTimeUs = 9413687 +sample: + trackType = audio + dataHashCode = -951251775 + size = 498 + isKeyFrame = true + presentationTimeUs = 9435020 +sample: + trackType = audio + dataHashCode = -1454397439 + size = 504 + isKeyFrame = true + presentationTimeUs = 9456354 +sample: + trackType = audio + dataHashCode = 1373021526 + size = 519 + isKeyFrame = true + presentationTimeUs = 9477687 +sample: + trackType = audio + dataHashCode = -266898427 + size = 542 + isKeyFrame = true + presentationTimeUs = 9499020 +sample: + trackType = audio + dataHashCode = -505962019 + size = 517 + isKeyFrame = true + presentationTimeUs = 9520354 +sample: + trackType = audio + dataHashCode = 692143427 + size = 515 + isKeyFrame = true + presentationTimeUs = 9541687 +sample: + trackType = audio + dataHashCode = 556799058 + size = 518 + isKeyFrame = true + presentationTimeUs = 9563020 +sample: + trackType = audio + dataHashCode = -916509951 + size = 511 + isKeyFrame = true + presentationTimeUs = 9584354 +sample: + trackType = audio + dataHashCode = 1900060143 + size = 523 + isKeyFrame = true + presentationTimeUs = 9605687 +sample: + trackType = audio + dataHashCode = -1559247068 + size = 501 + isKeyFrame = true + presentationTimeUs = 9627020 +sample: + trackType = audio + dataHashCode = -1562292790 + size = 512 + isKeyFrame = true + presentationTimeUs = 9648354 +sample: + trackType = audio + dataHashCode = -779104469 + size = 505 + isKeyFrame = true + presentationTimeUs = 9669687 +sample: + trackType = audio + dataHashCode = 889596105 + size = 515 + isKeyFrame = true + presentationTimeUs = 9691020 +sample: + trackType = audio + dataHashCode = -1002074861 + size = 520 + isKeyFrame = true + presentationTimeUs = 9712354 +sample: + trackType = audio + dataHashCode = 81248976 + size = 513 + isKeyFrame = true + presentationTimeUs = 9733687 +sample: + trackType = audio + dataHashCode = -833591360 + size = 493 + isKeyFrame = true + presentationTimeUs = 9755020 +sample: + trackType = audio + dataHashCode = -2070785804 + size = 508 + isKeyFrame = true + presentationTimeUs = 9776354 +sample: + trackType = audio + dataHashCode = 1700496115 + size = 512 + isKeyFrame = true + presentationTimeUs = 9797687 +sample: + trackType = audio + dataHashCode = -1558268896 + size = 509 + isKeyFrame = true + presentationTimeUs = 9819020 +sample: + trackType = audio + dataHashCode = -1429590354 + size = 514 + isKeyFrame = true + presentationTimeUs = 9840354 +sample: + trackType = audio + dataHashCode = 1129104184 + size = 510 + isKeyFrame = true + presentationTimeUs = 9861687 +sample: + trackType = audio + dataHashCode = -535488960 + size = 517 + isKeyFrame = true + presentationTimeUs = 9883020 +sample: + trackType = audio + dataHashCode = 1689918227 + size = 506 + isKeyFrame = true + presentationTimeUs = 9904354 +sample: + trackType = audio + dataHashCode = 919548958 + size = 505 + isKeyFrame = true + presentationTimeUs = 9925687 +sample: + trackType = audio + dataHashCode = 1397522501 + size = 505 + isKeyFrame = true + presentationTimeUs = 9947020 +sample: + trackType = audio + dataHashCode = -1364300598 + size = 511 + isKeyFrame = true + presentationTimeUs = 9968354 +sample: + trackType = audio + dataHashCode = -1609080798 + size = 521 + isKeyFrame = true + presentationTimeUs = 9989687 +sample: + trackType = audio + dataHashCode = -2010887834 + size = 511 + isKeyFrame = true + presentationTimeUs = 10011020 +sample: + trackType = audio + dataHashCode = -617804512 + size = 520 + isKeyFrame = true + presentationTimeUs = 10032354 +sample: + trackType = audio + dataHashCode = -2080005441 + size = 519 + isKeyFrame = true + presentationTimeUs = 10053687 +sample: + trackType = audio + dataHashCode = 1410512942 + size = 513 + isKeyFrame = true + presentationTimeUs = 10075020 +sample: + trackType = audio + dataHashCode = 1031695629 + size = 511 + isKeyFrame = true + presentationTimeUs = 10096354 +sample: + trackType = audio + dataHashCode = 1272566441 + size = 527 + isKeyFrame = true + presentationTimeUs = 10117687 +sample: + trackType = audio + dataHashCode = -1091153090 + size = 508 + isKeyFrame = true + presentationTimeUs = 10139020 +sample: + trackType = audio + dataHashCode = -1443099039 + size = 518 + isKeyFrame = true + presentationTimeUs = 10160354 +sample: + trackType = audio + dataHashCode = 2020025316 + size = 509 + isKeyFrame = true + presentationTimeUs = 10181687 +sample: + trackType = audio + dataHashCode = 1152206449 + size = 506 + isKeyFrame = true + presentationTimeUs = 10203020 +sample: + trackType = audio + dataHashCode = -2069370761 + size = 506 + isKeyFrame = true + presentationTimeUs = 10224354 +sample: + trackType = audio + dataHashCode = -1431420659 + size = 516 + isKeyFrame = true + presentationTimeUs = 10245687 +sample: + trackType = audio + dataHashCode = 909496721 + size = 613 + isKeyFrame = true + presentationTimeUs = 10267020 +sample: + trackType = audio + dataHashCode = -1422510856 + size = 487 + isKeyFrame = true + presentationTimeUs = 10288354 +sample: + trackType = audio + dataHashCode = 402200637 + size = 497 + isKeyFrame = true + presentationTimeUs = 10309687 +sample: + trackType = audio + dataHashCode = -1743049513 + size = 501 + isKeyFrame = true + presentationTimeUs = 10331020 +sample: + trackType = audio + dataHashCode = 1078605049 + size = 500 + isKeyFrame = true + presentationTimeUs = 10352354 +sample: + trackType = audio + dataHashCode = -222207016 + size = 507 + isKeyFrame = true + presentationTimeUs = 10373687 +sample: + trackType = audio + dataHashCode = 199997113 + size = 514 + isKeyFrame = true + presentationTimeUs = 10395020 +sample: + trackType = audio + dataHashCode = -1873453938 + size = 503 + isKeyFrame = true + presentationTimeUs = 10416354 +sample: + trackType = audio + dataHashCode = -1287237179 + size = 505 + isKeyFrame = true + presentationTimeUs = 10437687 +sample: + trackType = audio + dataHashCode = 1206215934 + size = 524 + isKeyFrame = true + presentationTimeUs = 10459020 +sample: + trackType = audio + dataHashCode = 1727174445 + size = 511 + isKeyFrame = true + presentationTimeUs = 10480354 +sample: + trackType = audio + dataHashCode = 1565527072 + size = 508 + isKeyFrame = true + presentationTimeUs = 10501687 +sample: + trackType = audio + dataHashCode = 1551776308 + size = 503 + isKeyFrame = true + presentationTimeUs = 10523020 +sample: + trackType = audio + dataHashCode = -1159020938 + size = 508 + isKeyFrame = true + presentationTimeUs = 10544354 +sample: + trackType = audio + dataHashCode = 1567547097 + size = 513 + isKeyFrame = true + presentationTimeUs = 10565687 +sample: + trackType = audio + dataHashCode = 973399781 + size = 534 + isKeyFrame = true + presentationTimeUs = 10587020 +sample: + trackType = audio + dataHashCode = 1628907787 + size = 507 + isKeyFrame = true + presentationTimeUs = 10608354 +sample: + trackType = audio + dataHashCode = 1570989140 + size = 513 + isKeyFrame = true + presentationTimeUs = 10629687 +sample: + trackType = audio + dataHashCode = 74347009 + size = 510 + isKeyFrame = true + presentationTimeUs = 10651020 +sample: + trackType = audio + dataHashCode = -1503689076 + size = 505 + isKeyFrame = true + presentationTimeUs = 10672354 +sample: + trackType = audio + dataHashCode = -1027657498 + size = 506 + isKeyFrame = true + presentationTimeUs = 10693687 +sample: + trackType = audio + dataHashCode = 1174765371 + size = 504 + isKeyFrame = true + presentationTimeUs = 10715020 +sample: + trackType = audio + dataHashCode = -36493289 + size = 510 + isKeyFrame = true + presentationTimeUs = 10736354 +sample: + trackType = audio + dataHashCode = 1903894287 + size = 514 + isKeyFrame = true + presentationTimeUs = 10757687 +sample: + trackType = audio + dataHashCode = 784373269 + size = 510 + isKeyFrame = true + presentationTimeUs = 10779020 +sample: + trackType = audio + dataHashCode = -1036523454 + size = 511 + isKeyFrame = true + presentationTimeUs = 10800354 +sample: + trackType = audio + dataHashCode = 43669289 + size = 506 + isKeyFrame = true + presentationTimeUs = 10821687 +sample: + trackType = audio + dataHashCode = -1120957837 + size = 514 + isKeyFrame = true + presentationTimeUs = 10843020 +sample: + trackType = audio + dataHashCode = 25536616 + size = 520 + isKeyFrame = true + presentationTimeUs = 10864354 +sample: + trackType = audio + dataHashCode = 401010605 + size = 514 + isKeyFrame = true + presentationTimeUs = 10885687 +sample: + trackType = audio + dataHashCode = -2023259422 + size = 502 + isKeyFrame = true + presentationTimeUs = 10907020 +sample: + trackType = audio + dataHashCode = -312660374 + size = 513 + isKeyFrame = true + presentationTimeUs = 10928354 +sample: + trackType = audio + dataHashCode = 1375983969 + size = 525 + isKeyFrame = true + presentationTimeUs = 10949687 +sample: + trackType = audio + dataHashCode = -113404266 + size = 509 + isKeyFrame = true + presentationTimeUs = 10971020 +sample: + trackType = audio + dataHashCode = -1403658645 + size = 503 + isKeyFrame = true + presentationTimeUs = 10992354 +sample: + trackType = audio + dataHashCode = 327906870 + size = 514 + isKeyFrame = true + presentationTimeUs = 11013687 +sample: + trackType = audio + dataHashCode = 1312918199 + size = 508 + isKeyFrame = true + presentationTimeUs = 11035020 +sample: + trackType = audio + dataHashCode = -1516803006 + size = 512 + isKeyFrame = true + presentationTimeUs = 11056354 +sample: + trackType = audio + dataHashCode = 1670600632 + size = 509 + isKeyFrame = true + presentationTimeUs = 11077687 +sample: + trackType = audio + dataHashCode = -292457242 + size = 529 + isKeyFrame = true + presentationTimeUs = 11099020 +sample: + trackType = audio + dataHashCode = -219002720 + size = 516 + isKeyFrame = true + presentationTimeUs = 11120354 +sample: + trackType = audio + dataHashCode = 472176788 + size = 509 + isKeyFrame = true + presentationTimeUs = 11141687 +sample: + trackType = audio + dataHashCode = -1401368215 + size = 505 + isKeyFrame = true + presentationTimeUs = 11163020 +sample: + trackType = audio + dataHashCode = -1787418084 + size = 528 + isKeyFrame = true + presentationTimeUs = 11184354 +sample: + trackType = audio + dataHashCode = 416814481 + size = 506 + isKeyFrame = true + presentationTimeUs = 11205687 +sample: + trackType = audio + dataHashCode = 735077409 + size = 518 + isKeyFrame = true + presentationTimeUs = 11227020 +sample: + trackType = audio + dataHashCode = 1639810446 + size = 509 + isKeyFrame = true + presentationTimeUs = 11248354 +sample: + trackType = audio + dataHashCode = -1908646161 + size = 504 + isKeyFrame = true + presentationTimeUs = 11269687 +sample: + trackType = audio + dataHashCode = 1537957153 + size = 497 + isKeyFrame = true + presentationTimeUs = 11291020 +sample: + trackType = audio + dataHashCode = 67527777 + size = 517 + isKeyFrame = true + presentationTimeUs = 11312354 +sample: + trackType = audio + dataHashCode = -1606686824 + size = 521 + isKeyFrame = true + presentationTimeUs = 11333687 +sample: + trackType = audio + dataHashCode = 892962103 + size = 510 + isKeyFrame = true + presentationTimeUs = 11355020 +sample: + trackType = audio + dataHashCode = 1165450578 + size = 506 + isKeyFrame = true + presentationTimeUs = 11376354 +sample: + trackType = audio + dataHashCode = -722905087 + size = 503 + isKeyFrame = true + presentationTimeUs = 11397687 +sample: + trackType = audio + dataHashCode = -631486996 + size = 514 + isKeyFrame = true + presentationTimeUs = 11419020 +sample: + trackType = audio + dataHashCode = -519717931 + size = 518 + isKeyFrame = true + presentationTimeUs = 11440354 +sample: + trackType = audio + dataHashCode = -1652407005 + size = 516 + isKeyFrame = true + presentationTimeUs = 11461687 +sample: + trackType = audio + dataHashCode = -1428999196 + size = 516 + isKeyFrame = true + presentationTimeUs = 11483020 +sample: + trackType = audio + dataHashCode = 509126139 + size = 526 + isKeyFrame = true + presentationTimeUs = 11504354 +sample: + trackType = audio + dataHashCode = -1215225516 + size = 504 + isKeyFrame = true + presentationTimeUs = 11525687 +sample: + trackType = audio + dataHashCode = -491280962 + size = 517 + isKeyFrame = true + presentationTimeUs = 11547020 +sample: + trackType = audio + dataHashCode = -1190686165 + size = 512 + isKeyFrame = true + presentationTimeUs = 11568354 +sample: + trackType = audio + dataHashCode = 1569318403 + size = 511 + isKeyFrame = true + presentationTimeUs = 11589687 +sample: + trackType = audio + dataHashCode = -89686643 + size = 521 + isKeyFrame = true + presentationTimeUs = 11611020 +sample: + trackType = audio + dataHashCode = -1631871928 + size = 507 + isKeyFrame = true + presentationTimeUs = 11632354 +sample: + trackType = audio + dataHashCode = -1191056120 + size = 499 + isKeyFrame = true + presentationTimeUs = 11653687 +sample: + trackType = audio + dataHashCode = 1691879761 + size = 500 + isKeyFrame = true + presentationTimeUs = 11675020 +sample: + trackType = audio + dataHashCode = 566332100 + size = 516 + isKeyFrame = true + presentationTimeUs = 11696354 +sample: + trackType = audio + dataHashCode = -110919987 + size = 505 + isKeyFrame = true + presentationTimeUs = 11717687 +sample: + trackType = audio + dataHashCode = -258721732 + size = 502 + isKeyFrame = true + presentationTimeUs = 11739020 +sample: + trackType = audio + dataHashCode = -1566732386 + size = 498 + isKeyFrame = true + presentationTimeUs = 11760354 +sample: + trackType = audio + dataHashCode = -532440785 + size = 518 + isKeyFrame = true + presentationTimeUs = 11781687 +sample: + trackType = audio + dataHashCode = -1513722117 + size = 511 + isKeyFrame = true + presentationTimeUs = 11803020 +sample: + trackType = audio + dataHashCode = -2061358967 + size = 512 + isKeyFrame = true + presentationTimeUs = 11824354 +sample: + trackType = audio + dataHashCode = 2008513466 + size = 524 + isKeyFrame = true + presentationTimeUs = 11845687 +sample: + trackType = audio + dataHashCode = -513103841 + size = 503 + isKeyFrame = true + presentationTimeUs = 11867020 +sample: + trackType = audio + dataHashCode = 1043940470 + size = 503 + isKeyFrame = true + presentationTimeUs = 11888354 +sample: + trackType = audio + dataHashCode = 681768866 + size = 522 + isKeyFrame = true + presentationTimeUs = 11909687 +sample: + trackType = audio + dataHashCode = 1206279649 + size = 509 + isKeyFrame = true + presentationTimeUs = 11931020 +sample: + trackType = audio + dataHashCode = 2089254225 + size = 509 + isKeyFrame = true + presentationTimeUs = 11952354 +sample: + trackType = audio + dataHashCode = -175460401 + size = 506 + isKeyFrame = true + presentationTimeUs = 11973687 +sample: + trackType = audio + dataHashCode = 1656061454 + size = 513 + isKeyFrame = true + presentationTimeUs = 11995020 +sample: + trackType = audio + dataHashCode = -1633147292 + size = 533 + isKeyFrame = true + presentationTimeUs = 12016354 +sample: + trackType = audio + dataHashCode = 165519275 + size = 518 + isKeyFrame = true + presentationTimeUs = 12037687 +sample: + trackType = audio + dataHashCode = 2033546767 + size = 507 + isKeyFrame = true + presentationTimeUs = 12059020 +sample: + trackType = audio + dataHashCode = 98323563 + size = 510 + isKeyFrame = true + presentationTimeUs = 12080354 +sample: + trackType = audio + dataHashCode = -9360707 + size = 509 + isKeyFrame = true + presentationTimeUs = 12101687 +sample: + trackType = audio + dataHashCode = -248819321 + size = 514 + isKeyFrame = true + presentationTimeUs = 12123020 +sample: + trackType = audio + dataHashCode = 385470596 + size = 528 + isKeyFrame = true + presentationTimeUs = 12144354 +sample: + trackType = audio + dataHashCode = 965514099 + size = 505 + isKeyFrame = true + presentationTimeUs = 12165687 +sample: + trackType = audio + dataHashCode = 442796129 + size = 510 + isKeyFrame = true + presentationTimeUs = 12187020 +sample: + trackType = audio + dataHashCode = 2134506819 + size = 516 + isKeyFrame = true + presentationTimeUs = 12208354 +sample: + trackType = audio + dataHashCode = -1659123560 + size = 528 + isKeyFrame = true + presentationTimeUs = 12229687 +sample: + trackType = audio + dataHashCode = 737516418 + size = 510 + isKeyFrame = true + presentationTimeUs = 12251020 +sample: + trackType = audio + dataHashCode = 1577264315 + size = 510 + isKeyFrame = true + presentationTimeUs = 12272354 +sample: + trackType = audio + dataHashCode = -300439177 + size = 509 + isKeyFrame = true + presentationTimeUs = 12293687 +sample: + trackType = audio + dataHashCode = 725055258 + size = 503 + isKeyFrame = true + presentationTimeUs = 12315020 +sample: + trackType = audio + dataHashCode = -2098233531 + size = 517 + isKeyFrame = true + presentationTimeUs = 12336354 +sample: + trackType = audio + dataHashCode = -1134492579 + size = 518 + isKeyFrame = true + presentationTimeUs = 12357687 +sample: + trackType = audio + dataHashCode = -1960842343 + size = 510 + isKeyFrame = true + presentationTimeUs = 12379020 +sample: + trackType = audio + dataHashCode = -2098966209 + size = 505 + isKeyFrame = true + presentationTimeUs = 12400354 +sample: + trackType = audio + dataHashCode = -965196311 + size = 513 + isKeyFrame = true + presentationTimeUs = 12421687 +sample: + trackType = audio + dataHashCode = 1331775072 + size = 509 + isKeyFrame = true + presentationTimeUs = 12443020 +sample: + trackType = audio + dataHashCode = -1834623833 + size = 505 + isKeyFrame = true + presentationTimeUs = 12464354 +sample: + trackType = audio + dataHashCode = 722472264 + size = 511 + isKeyFrame = true + presentationTimeUs = 12485687 +sample: + trackType = audio + dataHashCode = 620415738 + size = 508 + isKeyFrame = true + presentationTimeUs = 12507020 +sample: + trackType = audio + dataHashCode = 33931768 + size = 504 + isKeyFrame = true + presentationTimeUs = 12528354 +sample: + trackType = audio + dataHashCode = 800699278 + size = 508 + isKeyFrame = true + presentationTimeUs = 12549687 +sample: + trackType = audio + dataHashCode = 584185366 + size = 519 + isKeyFrame = true + presentationTimeUs = 12571020 +sample: + trackType = audio + dataHashCode = 1490843354 + size = 528 + isKeyFrame = true + presentationTimeUs = 12592354 +sample: + trackType = audio + dataHashCode = -720335181 + size = 511 + isKeyFrame = true + presentationTimeUs = 12613687 +sample: + trackType = audio + dataHashCode = 197135781 + size = 523 + isKeyFrame = true + presentationTimeUs = 12635020 +sample: + trackType = audio + dataHashCode = 294457020 + size = 511 + isKeyFrame = true + presentationTimeUs = 12656354 +sample: + trackType = audio + dataHashCode = 194307558 + size = 503 + isKeyFrame = true + presentationTimeUs = 12677687 +sample: + trackType = audio + dataHashCode = 1687202651 + size = 507 + isKeyFrame = true + presentationTimeUs = 12699020 +sample: + trackType = audio + dataHashCode = -1695580898 + size = 517 + isKeyFrame = true + presentationTimeUs = 12720354 +sample: + trackType = audio + dataHashCode = -1416688734 + size = 510 + isKeyFrame = true + presentationTimeUs = 12741687 +sample: + trackType = audio + dataHashCode = -239330254 + size = 511 + isKeyFrame = true + presentationTimeUs = 12763020 +sample: + trackType = audio + dataHashCode = 1449437418 + size = 509 + isKeyFrame = true + presentationTimeUs = 12784354 +sample: + trackType = audio + dataHashCode = -1480882788 + size = 508 + isKeyFrame = true + presentationTimeUs = 12805687 +sample: + trackType = audio + dataHashCode = -1628064098 + size = 511 + isKeyFrame = true + presentationTimeUs = 12827020 +sample: + trackType = audio + dataHashCode = 1717254647 + size = 514 + isKeyFrame = true + presentationTimeUs = 12848354 +sample: + trackType = audio + dataHashCode = -1317174771 + size = 503 + isKeyFrame = true + presentationTimeUs = 12869687 +sample: + trackType = audio + dataHashCode = 1001148219 + size = 510 + isKeyFrame = true + presentationTimeUs = 12891020 +sample: + trackType = audio + dataHashCode = 1259307086 + size = 511 + isKeyFrame = true + presentationTimeUs = 12912354 +sample: + trackType = audio + dataHashCode = -27251144 + size = 507 + isKeyFrame = true + presentationTimeUs = 12933687 +sample: + trackType = audio + dataHashCode = -129676969 + size = 509 + isKeyFrame = true + presentationTimeUs = 12955020 +sample: + trackType = audio + dataHashCode = 1228056327 + size = 523 + isKeyFrame = true + presentationTimeUs = 12976354 +sample: + trackType = audio + dataHashCode = -1301514722 + size = 501 + isKeyFrame = true + presentationTimeUs = 12997687 +sample: + trackType = audio + dataHashCode = 204329022 + size = 514 + isKeyFrame = true + presentationTimeUs = 13019020 +sample: + trackType = audio + dataHashCode = 204379389 + size = 504 + isKeyFrame = true + presentationTimeUs = 13040354 +sample: + trackType = audio + dataHashCode = 694913274 + size = 508 + isKeyFrame = true + presentationTimeUs = 13061687 +sample: + trackType = audio + dataHashCode = 289018778 + size = 513 + isKeyFrame = true + presentationTimeUs = 13083020 +sample: + trackType = audio + dataHashCode = -693167785 + size = 517 + isKeyFrame = true + presentationTimeUs = 13104354 +sample: + trackType = audio + dataHashCode = 253824480 + size = 510 + isKeyFrame = true + presentationTimeUs = 13125687 +sample: + trackType = audio + dataHashCode = -142385998 + size = 516 + isKeyFrame = true + presentationTimeUs = 13147020 +sample: + trackType = audio + dataHashCode = 917740295 + size = 506 + isKeyFrame = true + presentationTimeUs = 13168354 +sample: + trackType = audio + dataHashCode = -1795733204 + size = 504 + isKeyFrame = true + presentationTimeUs = 13189687 +sample: + trackType = audio + dataHashCode = 1282735099 + size = 518 + isKeyFrame = true + presentationTimeUs = 13211020 +sample: + trackType = audio + dataHashCode = -834522889 + size = 512 + isKeyFrame = true + presentationTimeUs = 13232354 +sample: + trackType = audio + dataHashCode = -1590936932 + size = 506 + isKeyFrame = true + presentationTimeUs = 13253687 +sample: + trackType = audio + dataHashCode = -697315454 + size = 529 + isKeyFrame = true + presentationTimeUs = 13275020 +sample: + trackType = audio + dataHashCode = -1563590541 + size = 514 + isKeyFrame = true + presentationTimeUs = 13296354 +sample: + trackType = audio + dataHashCode = -674722870 + size = 509 + isKeyFrame = true + presentationTimeUs = 13317687 +sample: + trackType = audio + dataHashCode = -272827525 + size = 510 + isKeyFrame = true + presentationTimeUs = 13339020 +sample: + trackType = audio + dataHashCode = 903683051 + size = 524 + isKeyFrame = true + presentationTimeUs = 13360354 +sample: + trackType = audio + dataHashCode = 57039157 + size = 509 + isKeyFrame = true + presentationTimeUs = 13381687 +sample: + trackType = audio + dataHashCode = 674330068 + size = 514 + isKeyFrame = true + presentationTimeUs = 13403020 +sample: + trackType = audio + dataHashCode = -1896569421 + size = 514 + isKeyFrame = true + presentationTimeUs = 13424354 +sample: + trackType = audio + dataHashCode = -837719592 + size = 502 + isKeyFrame = true + presentationTimeUs = 13445687 +sample: + trackType = audio + dataHashCode = 1269429850 + size = 507 + isKeyFrame = true + presentationTimeUs = 13467020 +sample: + trackType = audio + dataHashCode = -884799857 + size = 497 + isKeyFrame = true + presentationTimeUs = 13488354 +sample: + trackType = audio + dataHashCode = -1865947937 + size = 512 + isKeyFrame = true + presentationTimeUs = 13509687 +sample: + trackType = audio + dataHashCode = 1197648682 + size = 500 + isKeyFrame = true + presentationTimeUs = 13531020 +sample: + trackType = audio + dataHashCode = -320096195 + size = 509 + isKeyFrame = true + presentationTimeUs = 13552354 +sample: + trackType = audio + dataHashCode = -744850549 + size = 511 + isKeyFrame = true + presentationTimeUs = 13573687 +sample: + trackType = audio + dataHashCode = 1457899387 + size = 505 + isKeyFrame = true + presentationTimeUs = 13595020 +sample: + trackType = audio + dataHashCode = 168118808 + size = 519 + isKeyFrame = true + presentationTimeUs = 13616354 +sample: + trackType = audio + dataHashCode = 896298799 + size = 506 + isKeyFrame = true + presentationTimeUs = 13637687 +sample: + trackType = audio + dataHashCode = -1766408057 + size = 513 + isKeyFrame = true + presentationTimeUs = 13659020 +sample: + trackType = audio + dataHashCode = 988509435 + size = 517 + isKeyFrame = true + presentationTimeUs = 13680354 +sample: + trackType = audio + dataHashCode = 1031000863 + size = 529 + isKeyFrame = true + presentationTimeUs = 13701687 +sample: + trackType = audio + dataHashCode = 63390943 + size = 517 + isKeyFrame = true + presentationTimeUs = 13723020 +sample: + trackType = audio + dataHashCode = -747883422 + size = 517 + isKeyFrame = true + presentationTimeUs = 13744354 +sample: + trackType = audio + dataHashCode = -1574660470 + size = 526 + isKeyFrame = true + presentationTimeUs = 13765687 +sample: + trackType = audio + dataHashCode = 1371653176 + size = 515 + isKeyFrame = true + presentationTimeUs = 13787020 +sample: + trackType = audio + dataHashCode = -873513581 + size = 503 + isKeyFrame = true + presentationTimeUs = 13808354 +sample: + trackType = audio + dataHashCode = -1886763688 + size = 514 + isKeyFrame = true + presentationTimeUs = 13829687 +sample: + trackType = audio + dataHashCode = 1308763541 + size = 512 + isKeyFrame = true + presentationTimeUs = 13851020 +sample: + trackType = audio + dataHashCode = 490619935 + size = 505 + isKeyFrame = true + presentationTimeUs = 13872354 +sample: + trackType = audio + dataHashCode = -671375789 + size = 512 + isKeyFrame = true + presentationTimeUs = 13893687 +sample: + trackType = audio + dataHashCode = -1950105780 + size = 521 + isKeyFrame = true + presentationTimeUs = 13915020 +sample: + trackType = audio + dataHashCode = -1430221498 + size = 533 + isKeyFrame = true + presentationTimeUs = 13936354 +sample: + trackType = audio + dataHashCode = 529950036 + size = 505 + isKeyFrame = true + presentationTimeUs = 13957687 +sample: + trackType = audio + dataHashCode = 1705899587 + size = 497 + isKeyFrame = true + presentationTimeUs = 13979020 +sample: + trackType = audio + dataHashCode = 307383707 + size = 516 + isKeyFrame = true + presentationTimeUs = 14000354 +sample: + trackType = audio + dataHashCode = -1277231249 + size = 514 + isKeyFrame = true + presentationTimeUs = 14021687 +sample: + trackType = audio + dataHashCode = -1362617485 + size = 503 + isKeyFrame = true + presentationTimeUs = 14043020 +sample: + trackType = audio + dataHashCode = 1879828133 + size = 508 + isKeyFrame = true + presentationTimeUs = 14064354 +sample: + trackType = audio + dataHashCode = 1511541611 + size = 518 + isKeyFrame = true + presentationTimeUs = 14085687 +sample: + trackType = audio + dataHashCode = -1152798543 + size = 513 + isKeyFrame = true + presentationTimeUs = 14107020 +sample: + trackType = audio + dataHashCode = -1550518673 + size = 514 + isKeyFrame = true + presentationTimeUs = 14128354 +sample: + trackType = audio + dataHashCode = 1220642791 + size = 502 + isKeyFrame = true + presentationTimeUs = 14149687 +sample: + trackType = audio + dataHashCode = 200886483 + size = 499 + isKeyFrame = true + presentationTimeUs = 14171020 +sample: + trackType = audio + dataHashCode = 1602412633 + size = 511 + isKeyFrame = true + presentationTimeUs = 14192354 +sample: + trackType = audio + dataHashCode = 203368698 + size = 508 + isKeyFrame = true + presentationTimeUs = 14213687 +sample: + trackType = audio + dataHashCode = -1422104148 + size = 507 + isKeyFrame = true + presentationTimeUs = 14235020 +sample: + trackType = audio + dataHashCode = -1632487667 + size = 509 + isKeyFrame = true + presentationTimeUs = 14256354 +sample: + trackType = audio + dataHashCode = 103099024 + size = 507 + isKeyFrame = true + presentationTimeUs = 14277687 +sample: + trackType = audio + dataHashCode = -539027462 + size = 510 + isKeyFrame = true + presentationTimeUs = 14299020 +sample: + trackType = audio + dataHashCode = -409316325 + size = 499 + isKeyFrame = true + presentationTimeUs = 14320354 +sample: + trackType = audio + dataHashCode = -770015157 + size = 523 + isKeyFrame = true + presentationTimeUs = 14341687 +sample: + trackType = audio + dataHashCode = 1762455021 + size = 539 + isKeyFrame = true + presentationTimeUs = 14363020 +sample: + trackType = audio + dataHashCode = 366966981 + size = 520 + isKeyFrame = true + presentationTimeUs = 14384354 +sample: + trackType = audio + dataHashCode = -738234777 + size = 522 + isKeyFrame = true + presentationTimeUs = 14405687 +sample: + trackType = audio + dataHashCode = 1475595144 + size = 506 + isKeyFrame = true + presentationTimeUs = 14427020 +sample: + trackType = audio + dataHashCode = 1909516749 + size = 517 + isKeyFrame = true + presentationTimeUs = 14448354 +sample: + trackType = audio + dataHashCode = 737228641 + size = 514 + isKeyFrame = true + presentationTimeUs = 14469687 +sample: + trackType = audio + dataHashCode = 1218987360 + size = 512 + isKeyFrame = true + presentationTimeUs = 14491020 +sample: + trackType = audio + dataHashCode = -1737046117 + size = 509 + isKeyFrame = true + presentationTimeUs = 14512354 +sample: + trackType = audio + dataHashCode = 2109085930 + size = 503 + isKeyFrame = true + presentationTimeUs = 14533687 +sample: + trackType = audio + dataHashCode = 1529119099 + size = 509 + isKeyFrame = true + presentationTimeUs = 14555020 +sample: + trackType = audio + dataHashCode = -2063290376 + size = 504 + isKeyFrame = true + presentationTimeUs = 14576354 +sample: + trackType = audio + dataHashCode = 976596835 + size = 498 + isKeyFrame = true + presentationTimeUs = 14597687 +sample: + trackType = audio + dataHashCode = -874298809 + size = 523 + isKeyFrame = true + presentationTimeUs = 14619020 +sample: + trackType = audio + dataHashCode = 451526196 + size = 513 + isKeyFrame = true + presentationTimeUs = 14640354 +sample: + trackType = audio + dataHashCode = 138212209 + size = 505 + isKeyFrame = true + presentationTimeUs = 14661687 +sample: + trackType = audio + dataHashCode = 1303799552 + size = 516 + isKeyFrame = true + presentationTimeUs = 14683020 +sample: + trackType = audio + dataHashCode = -531777084 + size = 519 + isKeyFrame = true + presentationTimeUs = 14704354 +sample: + trackType = audio + dataHashCode = 499169636 + size = 510 + isKeyFrame = true + presentationTimeUs = 14725687 +sample: + trackType = audio + dataHashCode = -1404109995 + size = 512 + isKeyFrame = true + presentationTimeUs = 14747020 +sample: + trackType = audio + dataHashCode = 2002701568 + size = 519 + isKeyFrame = true + presentationTimeUs = 14768354 +sample: + trackType = audio + dataHashCode = 419103890 + size = 513 + isKeyFrame = true + presentationTimeUs = 14789687 +sample: + trackType = audio + dataHashCode = 2011516811 + size = 522 + isKeyFrame = true + presentationTimeUs = 14811020 +sample: + trackType = audio + dataHashCode = 1117765673 + size = 511 + isKeyFrame = true + presentationTimeUs = 14832354 +sample: + trackType = audio + dataHashCode = 209208750 + size = 509 + isKeyFrame = true + presentationTimeUs = 14853687 +sample: + trackType = audio + dataHashCode = -611796421 + size = 524 + isKeyFrame = true + presentationTimeUs = 14875020 +sample: + trackType = audio + dataHashCode = 986567908 + size = 507 + isKeyFrame = true + presentationTimeUs = 14896354 +sample: + trackType = audio + dataHashCode = 804317602 + size = 510 + isKeyFrame = true + presentationTimeUs = 14917687 +sample: + trackType = audio + dataHashCode = 169164407 + size = 525 + isKeyFrame = true + presentationTimeUs = 14939020 +sample: + trackType = audio + dataHashCode = -613204411 + size = 514 + isKeyFrame = true + presentationTimeUs = 14960354 +sample: + trackType = audio + dataHashCode = 2045589329 + size = 508 + isKeyFrame = true + presentationTimeUs = 14981687 +sample: + trackType = audio + dataHashCode = 144804073 + size = 506 + isKeyFrame = true + presentationTimeUs = 15003020 +sample: + trackType = audio + dataHashCode = -613236310 + size = 510 + isKeyFrame = true + presentationTimeUs = 15024354 +sample: + trackType = audio + dataHashCode = -1799332297 + size = 521 + isKeyFrame = true + presentationTimeUs = 15045687 +sample: + trackType = audio + dataHashCode = 567169396 + size = 501 + isKeyFrame = true + presentationTimeUs = 15067020 +sample: + trackType = audio + dataHashCode = 1891186379 + size = 512 + isKeyFrame = true + presentationTimeUs = 15088354 +sample: + trackType = audio + dataHashCode = -736398607 + size = 513 + isKeyFrame = true + presentationTimeUs = 15109687 +sample: + trackType = audio + dataHashCode = -13103341 + size = 512 + isKeyFrame = true + presentationTimeUs = 15131020 +sample: + trackType = audio + dataHashCode = -698389525 + size = 511 + isKeyFrame = true + presentationTimeUs = 15152354 +sample: + trackType = audio + dataHashCode = -809287685 + size = 514 + isKeyFrame = true + presentationTimeUs = 15173687 +sample: + trackType = audio + dataHashCode = 1903969708 + size = 513 + isKeyFrame = true + presentationTimeUs = 15195020 +sample: + trackType = audio + dataHashCode = 891941259 + size = 511 + isKeyFrame = true + presentationTimeUs = 15216354 +sample: + trackType = audio + dataHashCode = -1737553609 + size = 525 + isKeyFrame = true + presentationTimeUs = 15237687 +sample: + trackType = audio + dataHashCode = -1942499070 + size = 522 + isKeyFrame = true + presentationTimeUs = 15259020 +sample: + trackType = audio + dataHashCode = 196477028 + size = 511 + isKeyFrame = true + presentationTimeUs = 15280354 +sample: + trackType = audio + dataHashCode = 2027037606 + size = 506 + isKeyFrame = true + presentationTimeUs = 15301687 +sample: + trackType = audio + dataHashCode = 370488681 + size = 499 + isKeyFrame = true + presentationTimeUs = 15323020 +sample: + trackType = audio + dataHashCode = 2129919747 + size = 525 + isKeyFrame = true + presentationTimeUs = 15344354 +sample: + trackType = audio + dataHashCode = 647435836 + size = 530 + isKeyFrame = true + presentationTimeUs = 15365687 +sample: + trackType = audio + dataHashCode = -1001921667 + size = 510 + isKeyFrame = true + presentationTimeUs = 15387020 +sample: + trackType = audio + dataHashCode = 248850280 + size = 508 + isKeyFrame = true + presentationTimeUs = 15408354 +sample: + trackType = audio + dataHashCode = 323269853 + size = 497 + isKeyFrame = true + presentationTimeUs = 15429687 +sample: + trackType = audio + dataHashCode = 1070017290 + size = 510 + isKeyFrame = true + presentationTimeUs = 15451020 +sample: + trackType = audio + dataHashCode = -463414841 + size = 526 + isKeyFrame = true + presentationTimeUs = 15472354 +sample: + trackType = audio + dataHashCode = 1300138535 + size = 507 + isKeyFrame = true + presentationTimeUs = 15493687 +sample: + trackType = audio + dataHashCode = -1471524079 + size = 508 + isKeyFrame = true + presentationTimeUs = 15515020 sample: trackType = video dataHashCode = -1368267426 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_with_increasing_timestamps_320w_240h.mp4/trimOptimizedClippedAtKeyFrame.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_with_increasing_timestamps_320w_240h.mp4/trimOptimizedClippedAtKeyFrame.dump deleted file mode 100644 index 0732c24806..0000000000 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_with_increasing_timestamps_320w_240h.mp4/trimOptimizedClippedAtKeyFrame.dump +++ /dev/null @@ -1,560 +0,0 @@ -format video: - id = 1 - sampleMimeType = video/avc - codecs = avc1.42C015 - maxInputSize = 14839 - width = 320 - height = 240 - frameRate = 59.997425 - colorInfo: - colorSpace = 2 - colorRange = 1 - colorTransfer = 3 - lumaBitdepth = 8 - chromaBitdepth = 8 - metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] - initializationData: - data = length 31, hash 4B108214 - data = length 9, hash FBA158BB -container metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] -sample: - trackType = video - dataHashCode = 983000500 - size = 13539 - isKeyFrame = true - presentationTimeUs = 0 -sample: - trackType = video - dataHashCode = -1834230781 - size = 32 - isKeyFrame = false - presentationTimeUs = 16666 -sample: - trackType = video - dataHashCode = 521720738 - size = 1534 - isKeyFrame = false - presentationTimeUs = 33333 -sample: - trackType = video - dataHashCode = 722836039 - size = 123 - isKeyFrame = false - presentationTimeUs = 50000 -sample: - trackType = video - dataHashCode = -1702585381 - size = 2061 - isKeyFrame = false - presentationTimeUs = 66666 -sample: - trackType = video - dataHashCode = -365856396 - size = 147 - isKeyFrame = false - presentationTimeUs = 83333 -sample: - trackType = video - dataHashCode = 1258185334 - size = 2534 - isKeyFrame = false - presentationTimeUs = 100000 -sample: - trackType = video - dataHashCode = -179623006 - size = 87 - isKeyFrame = false - presentationTimeUs = 116666 -sample: - trackType = video - dataHashCode = -541393824 - size = 2762 - isKeyFrame = false - presentationTimeUs = 133333 -sample: - trackType = video - dataHashCode = -1912932514 - size = 57 - isKeyFrame = false - presentationTimeUs = 150000 -sample: - trackType = video - dataHashCode = 485634444 - size = 2833 - isKeyFrame = false - presentationTimeUs = 166666 -sample: - trackType = video - dataHashCode = 570625802 - size = 189 - isKeyFrame = false - presentationTimeUs = 183333 -sample: - trackType = video - dataHashCode = 1819668957 - size = 3153 - isKeyFrame = false - presentationTimeUs = 200000 -sample: - trackType = video - dataHashCode = 1004398066 - size = 104 - isKeyFrame = false - presentationTimeUs = 216666 -sample: - trackType = video - dataHashCode = 2087741113 - size = 2304 - isKeyFrame = false - presentationTimeUs = 233333 -sample: - trackType = video - dataHashCode = -419782502 - size = 222 - isKeyFrame = false - presentationTimeUs = 250000 -sample: - trackType = video - dataHashCode = -1867110345 - size = 2306 - isKeyFrame = false - presentationTimeUs = 266666 -sample: - trackType = video - dataHashCode = 1908323737 - size = 257 - isKeyFrame = false - presentationTimeUs = 283333 -sample: - trackType = video - dataHashCode = 884063337 - size = 2201 - isKeyFrame = false - presentationTimeUs = 300000 -sample: - trackType = video - dataHashCode = -1308458590 - size = 174 - isKeyFrame = false - presentationTimeUs = 316666 -sample: - trackType = video - dataHashCode = -1686938678 - size = 2524 - isKeyFrame = false - presentationTimeUs = 333333 -sample: - trackType = video - dataHashCode = -1372845971 - size = 171 - isKeyFrame = false - presentationTimeUs = 350000 -sample: - trackType = video - dataHashCode = 1130876644 - size = 2306 - isKeyFrame = false - presentationTimeUs = 366666 -sample: - trackType = video - dataHashCode = 1707671352 - size = 188 - isKeyFrame = false - presentationTimeUs = 383333 -sample: - trackType = video - dataHashCode = 300233313 - size = 2529 - isKeyFrame = false - presentationTimeUs = 400000 -sample: - trackType = video - dataHashCode = -1284013406 - size = 182 - isKeyFrame = false - presentationTimeUs = 416666 -sample: - trackType = video - dataHashCode = -2088617828 - size = 2047 - isKeyFrame = false - presentationTimeUs = 433333 -sample: - trackType = video - dataHashCode = 2116374999 - size = 259 - isKeyFrame = false - presentationTimeUs = 450000 -sample: - trackType = video - dataHashCode = -2123019940 - size = 2234 - isKeyFrame = false - presentationTimeUs = 466666 -sample: - trackType = video - dataHashCode = 1901454757 - size = 138 - isKeyFrame = false - presentationTimeUs = 483333 -sample: - trackType = video - dataHashCode = 1576638059 - size = 2088 - isKeyFrame = false - presentationTimeUs = 500000 -sample: - trackType = video - dataHashCode = 1120133924 - size = 151 - isKeyFrame = false - presentationTimeUs = 516666 -sample: - trackType = video - dataHashCode = 264118578 - size = 2235 - isKeyFrame = false - presentationTimeUs = 533333 -sample: - trackType = video - dataHashCode = 64254117 - size = 164 - isKeyFrame = false - presentationTimeUs = 550000 -sample: - trackType = video - dataHashCode = -1000078879 - size = 2231 - isKeyFrame = false - presentationTimeUs = 566666 -sample: - trackType = video - dataHashCode = 286919946 - size = 123 - isKeyFrame = false - presentationTimeUs = 583333 -sample: - trackType = video - dataHashCode = -320312658 - size = 2303 - isKeyFrame = false - presentationTimeUs = 600000 -sample: - trackType = video - dataHashCode = 1057750590 - size = 175 - isKeyFrame = false - presentationTimeUs = 616666 -sample: - trackType = video - dataHashCode = 1961415074 - size = 2165 - isKeyFrame = false - presentationTimeUs = 633333 -sample: - trackType = video - dataHashCode = 667267023 - size = 260 - isKeyFrame = false - presentationTimeUs = 650000 -sample: - trackType = video - dataHashCode = 979033489 - size = 1924 - isKeyFrame = false - presentationTimeUs = 666666 -sample: - trackType = video - dataHashCode = -1974473017 - size = 286 - isKeyFrame = false - presentationTimeUs = 683333 -sample: - trackType = video - dataHashCode = -962519103 - size = 1992 - isKeyFrame = false - presentationTimeUs = 700000 -sample: - trackType = video - dataHashCode = -1312094075 - size = 204 - isKeyFrame = false - presentationTimeUs = 716666 -sample: - trackType = video - dataHashCode = 2068151127 - size = 1826 - isKeyFrame = false - presentationTimeUs = 733333 -sample: - trackType = video - dataHashCode = -1531967506 - size = 284 - isKeyFrame = false - presentationTimeUs = 750000 -sample: - trackType = video - dataHashCode = -778066699 - size = 1940 - isKeyFrame = false - presentationTimeUs = 766666 -sample: - trackType = video - dataHashCode = -1219952117 - size = 129 - isKeyFrame = false - presentationTimeUs = 783333 -sample: - trackType = video - dataHashCode = -1218204223 - size = 1947 - isKeyFrame = false - presentationTimeUs = 800000 -sample: - trackType = video - dataHashCode = -1816247511 - size = 147 - isKeyFrame = false - presentationTimeUs = 816666 -sample: - trackType = video - dataHashCode = 299686318 - size = 2066 - isKeyFrame = false - presentationTimeUs = 833333 -sample: - trackType = video - dataHashCode = -1520242765 - size = 185 - isKeyFrame = false - presentationTimeUs = 850000 -sample: - trackType = video - dataHashCode = -1702498409 - size = 2159 - isKeyFrame = false - presentationTimeUs = 866666 -sample: - trackType = video - dataHashCode = 345202950 - size = 189 - isKeyFrame = false - presentationTimeUs = 883333 -sample: - trackType = video - dataHashCode = 220746796 - size = 2098 - isKeyFrame = false - presentationTimeUs = 900000 -sample: - trackType = video - dataHashCode = -32341189 - size = 159 - isKeyFrame = false - presentationTimeUs = 916666 -sample: - trackType = video - dataHashCode = -1838476361 - size = 1914 - isKeyFrame = false - presentationTimeUs = 933333 -sample: - trackType = video - dataHashCode = -1322093590 - size = 99 - isKeyFrame = false - presentationTimeUs = 950000 -sample: - trackType = video - dataHashCode = -1391064751 - size = 2168 - isKeyFrame = false - presentationTimeUs = 966666 -sample: - trackType = video - dataHashCode = 1479204931 - size = 129 - isKeyFrame = false - presentationTimeUs = 983333 -sample: - trackType = video - dataHashCode = 1131230500 - size = 2327 - isKeyFrame = false - presentationTimeUs = 1000000 -sample: - trackType = video - dataHashCode = -393815961 - size = 160 - isKeyFrame = false - presentationTimeUs = 1016666 -sample: - trackType = video - dataHashCode = -242739025 - size = 2136 - isKeyFrame = false - presentationTimeUs = 1033333 -sample: - trackType = video - dataHashCode = 65238903 - size = 163 - isKeyFrame = false - presentationTimeUs = 1050000 -sample: - trackType = video - dataHashCode = 1720840922 - size = 2043 - isKeyFrame = false - presentationTimeUs = 1066666 -sample: - trackType = video - dataHashCode = -1006231050 - size = 178 - isKeyFrame = false - presentationTimeUs = 1083333 -sample: - trackType = video - dataHashCode = 1742965952 - size = 2022 - isKeyFrame = false - presentationTimeUs = 1100000 -sample: - trackType = video - dataHashCode = -971065365 - size = 240 - isKeyFrame = false - presentationTimeUs = 1116666 -sample: - trackType = video - dataHashCode = 1757434551 - size = 1887 - isKeyFrame = false - presentationTimeUs = 1133333 -sample: - trackType = video - dataHashCode = 1501849116 - size = 252 - isKeyFrame = false - presentationTimeUs = 1150000 -sample: - trackType = video - dataHashCode = 825501977 - size = 1816 - isKeyFrame = false - presentationTimeUs = 1166666 -sample: - trackType = video - dataHashCode = -1616223509 - size = 246 - isKeyFrame = false - presentationTimeUs = 1183333 -sample: - trackType = video - dataHashCode = 457119646 - size = 1817 - isKeyFrame = false - presentationTimeUs = 1200000 -sample: - trackType = video - dataHashCode = -1382929639 - size = 146 - isKeyFrame = false - presentationTimeUs = 1216666 -sample: - trackType = video - dataHashCode = -1580853131 - size = 1929 - isKeyFrame = false - presentationTimeUs = 1233333 -sample: - trackType = video - dataHashCode = 1758706551 - size = 196 - isKeyFrame = false - presentationTimeUs = 1250000 -sample: - trackType = video - dataHashCode = 207289556 - size = 2154 - isKeyFrame = false - presentationTimeUs = 1266666 -sample: - trackType = video - dataHashCode = -981284942 - size = 182 - isKeyFrame = false - presentationTimeUs = 1283333 -sample: - trackType = video - dataHashCode = 855103964 - size = 2144 - isKeyFrame = false - presentationTimeUs = 1300000 -sample: - trackType = video - dataHashCode = 380479426 - size = 90 - isKeyFrame = false - presentationTimeUs = 1316666 -sample: - trackType = video - dataHashCode = -1677996152 - size = 2005 - isKeyFrame = false - presentationTimeUs = 1333333 -sample: - trackType = video - dataHashCode = 1516852008 - size = 156 - isKeyFrame = false - presentationTimeUs = 1350000 -sample: - trackType = video - dataHashCode = -1602805193 - size = 1772 - isKeyFrame = false - presentationTimeUs = 1366666 -sample: - trackType = video - dataHashCode = -1720426556 - size = 162 - isKeyFrame = false - presentationTimeUs = 1383333 -sample: - trackType = video - dataHashCode = -1392260423 - size = 1865 - isKeyFrame = false - presentationTimeUs = 1400000 -sample: - trackType = video - dataHashCode = -1842432151 - size = 151 - isKeyFrame = false - presentationTimeUs = 1416666 -sample: - trackType = video - dataHashCode = -537063215 - size = 1848 - isKeyFrame = false - presentationTimeUs = 1433333 -sample: - trackType = video - dataHashCode = 2089388394 - size = 206 - isKeyFrame = false - presentationTimeUs = 1450000 -sample: - trackType = video - dataHashCode = -1761777019 - size = 1934 - isKeyFrame = false - presentationTimeUs = 1466666 -sample: - trackType = video - dataHashCode = 235471194 - size = 119 - isKeyFrame = false - presentationTimeUs = 1483333 -released = true diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java index b25e133f95..d21cb4b960 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java @@ -16,6 +16,7 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Assertions.checkNotNull; +import static androidx.media3.common.util.Util.isRunningOnEmulator; import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.MP3_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT; @@ -26,8 +27,10 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREAS import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.createOpenGlObjects; import static androidx.media3.transformer.AndroidTestUtil.generateTextureFromBitmap; +import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; +import static org.junit.Assume.assumeTrue; import android.content.Context; import android.graphics.Bitmap; @@ -49,6 +52,7 @@ import androidx.media3.common.audio.ChannelMixingAudioProcessor; import androidx.media3.common.audio.ChannelMixingMatrix; import androidx.media3.common.audio.SonicAudioProcessor; import androidx.media3.common.util.GlUtil; +import androidx.media3.common.util.Util; import androidx.media3.datasource.DataSourceBitmapLoader; import androidx.media3.effect.Contrast; import androidx.media3.effect.DefaultGlObjectsProvider; @@ -437,6 +441,43 @@ public class TransformerEndToEndTest { assertThat(result.exportResult.durationMs).isAtMost(clippingEndMs - clippingStartMs); } + @Test + public void clippedMedia_trimOptimizationEnabled_completesWithOptimizationApplied() + throws Exception { + String testId = "clippedMedia_trimOptimizationEnabled_completesWithOptimizationApplied"; + if (!isRunningOnEmulator()) { + // The trim optimization is only guaranteed to work on emulator for this file. + recordTestSkipped(context, testId, /* reason= */ "Emulator only test"); + assumeTrue(false); + } + if (Util.SDK_INT == 26) { + // MediaCodec returns a segmentation fault fails at this SDK level on emulators. + recordTestSkipped(context, testId, /* reason= */ "SDK 26 not supported."); + assumeTrue(false); + } + Transformer transformer = + new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build(); + MediaItem mediaItem = + new MediaItem.Builder() + .setUri("asset:///media/mp4/crow_emulator_transformer_output.mp4") + .setClippingConfiguration( + new MediaItem.ClippingConfiguration.Builder() + .setStartPositionMs(500) + .setEndPositionMs(2500) + .build()) + .build(); + EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build(); + + ExportTestResult result = + new TransformerAndroidTestRunner.Builder(context, transformer) + .build() + .run(testId, editedMediaItem); + + assertThat(result.exportResult.optimizationResult) + .isEqualTo(ExportResult.OPTIMIZATION_SUCCEEDED); + assertThat(result.exportResult.durationMs).isAtMost(2000); + } + @Test public void videoEncoderFormatUnsupported_completesWithError() throws Exception { String testId = "videoEncoderFormatUnsupported_completesWithError"; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExportResult.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExportResult.java index 0ab2bb562d..9b5c30b12f 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExportResult.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExportResult.java @@ -256,6 +256,7 @@ public final class ExportResult { width = C.LENGTH_UNSET; videoFrameCount = 0; videoEncoderName = null; + optimizationResult = OPTIMIZATION_NONE; exportException = null; } } @@ -418,6 +419,7 @@ public final class ExportResult { .setWidth(width) .setVideoFrameCount(videoFrameCount) .setVideoEncoderName(videoEncoderName) + .setOptimizationResult(optimizationResult) .setExportException(exportException); } @@ -443,6 +445,7 @@ public final class ExportResult { && width == result.width && videoFrameCount == result.videoFrameCount && Objects.equals(videoEncoderName, result.videoEncoderName) + && optimizationResult == result.optimizationResult && Objects.equals(exportException, result.exportException); } @@ -461,6 +464,7 @@ public final class ExportResult { result = 31 * result + width; result = 31 * result + videoFrameCount; result = 31 * result + Objects.hashCode(videoEncoderName); + result = 31 * result + optimizationResult; result = 31 * result + Objects.hashCode(exportException); return result; } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java index 14c51eef40..8d32bae50b 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java @@ -19,7 +19,9 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Assertions.checkArgument; import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; +import static androidx.media3.common.util.Util.areEqual; import static androidx.media3.common.util.Util.contains; +import static androidx.media3.common.util.Util.usToMs; import static java.lang.Math.max; import static java.lang.annotation.ElementType.TYPE_USE; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -57,22 +59,21 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @Documented @Retention(RetentionPolicy.SOURCE) @Target(TYPE_USE) - @IntDef({MUXER_MODE_DEFAULT, MUXER_MODE_MUX_PARTIAL_VIDEO, MUXER_MODE_APPEND_VIDEO}) + @IntDef({MUXER_MODE_DEFAULT, MUXER_MODE_MUX_PARTIAL, MUXER_MODE_APPEND}) public @interface MuxerMode {} /** The default muxer mode. */ public static final int MUXER_MODE_DEFAULT = 0; /** - * Used for muxing a partial video. The video {@link TrackInfo} is kept the same when {@linkplain - * #changeToAppendVideoMode() transitioning} to {@link #MUXER_MODE_APPEND_VIDEO} after finishing - * muxing partial video. Only one video track can be {@link #addTrackFormat(Format) added} in this - * mode. + * Used for muxing a partial track(s). The {@link TrackInfo} is kept the same when {@linkplain + * #changeToAppendMode() transitioning} to {@link #MUXER_MODE_APPEND} after finishing muxing + * partial tracks. */ - public static final int MUXER_MODE_MUX_PARTIAL_VIDEO = 1; + public static final int MUXER_MODE_MUX_PARTIAL = 1; - /** Used for appending the remaining video samples with the previously muxed partial video. */ - public static final int MUXER_MODE_APPEND_VIDEO = 2; + /** Used for appending the remaining samples with the previously muxed partial file. */ + public static final int MUXER_MODE_APPEND = 2; private static final String TIMER_THREAD_NAME = "Muxer:Timer"; private static final String MUXER_TIMEOUT_ERROR_FORMAT_STRING = @@ -111,7 +112,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; private @MonotonicNonNull Muxer muxer; private @MuxerMode int muxerMode; + // Read by any thread, only written to on the transformerInternal thread. private volatile boolean muxedPartialVideo; + // Read by any thread, only written to on the transformerInternal thread. + private volatile boolean muxedPartialAudio; + private volatile int additionalRotationDegrees; private volatile int trackCount; @@ -122,14 +127,14 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; * @param muxerFactory A {@link Muxer.Factory} to create a {@link Muxer}. * @param listener A {@link MuxerWrapper.Listener}. * @param muxerMode The {@link MuxerMode}. The initial mode must be {@link #MUXER_MODE_DEFAULT} or - * {@link #MUXER_MODE_MUX_PARTIAL_VIDEO}. + * {@link #MUXER_MODE_MUX_PARTIAL}. */ public MuxerWrapper( String outputPath, Muxer.Factory muxerFactory, Listener listener, @MuxerMode int muxerMode) { this.outputPath = outputPath; this.muxerFactory = muxerFactory; this.listener = listener; - checkArgument(muxerMode == MUXER_MODE_DEFAULT || muxerMode == MUXER_MODE_MUX_PARTIAL_VIDEO); + checkArgument(muxerMode == MUXER_MODE_DEFAULT || muxerMode == MUXER_MODE_MUX_PARTIAL); this.muxerMode = muxerMode; trackTypeToInfo = new SparseArray<>(); previousTrackType = C.TRACK_TYPE_NONE; @@ -137,15 +142,15 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; } /** - * Changes {@link MuxerMode} to {@link #MUXER_MODE_APPEND_VIDEO}. + * Changes {@link MuxerMode} to {@link #MUXER_MODE_APPEND}. * - *

This method must be called only after partial video is muxed using {@link - * #MUXER_MODE_MUX_PARTIAL_VIDEO}. + *

This method must be called only after partial file is muxed using {@link + * #MUXER_MODE_MUX_PARTIAL}. */ - public void changeToAppendVideoMode() { - checkState(muxerMode == MUXER_MODE_MUX_PARTIAL_VIDEO); + public void changeToAppendMode() { + checkState(muxerMode == MUXER_MODE_MUX_PARTIAL); - muxerMode = MUXER_MODE_APPEND_VIDEO; + muxerMode = MUXER_MODE_APPEND; } /** @@ -181,14 +186,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; * before calling this method. */ public void setTrackCount(@IntRange(from = 1) int trackCount) { - if (muxerMode == MUXER_MODE_MUX_PARTIAL_VIDEO || muxerMode == MUXER_MODE_APPEND_VIDEO) { - checkArgument( - trackCount == 1, - "Only one video track can be added in MUXER_MODE_MUX_PARTIAL_VIDEO and" - + " MUXER_MODE_APPEND_VIDEO"); - if (muxerMode == MUXER_MODE_APPEND_VIDEO) { - return; - } + if (muxerMode == MUXER_MODE_APPEND) { + return; } checkState( trackTypeToInfo.size() == 0, @@ -219,11 +218,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; * *

{@link Muxer#addMetadata(Metadata)} is called if the {@link Format#metadata} is present. * - * @param format The {@link Format} to be added. In {@link #MUXER_MODE_APPEND_VIDEO} mode, the - * added {@link Format} must match the existing {@link Format} set when the muxer was in - * {@link #MUXER_MODE_MUX_PARTIAL_VIDEO} mode. + * @param format The {@link Format} to be added. In {@link #MUXER_MODE_APPEND} mode, the added + * {@link Format} must match the existing {@link Format} set when the muxer was in {@link + * #MUXER_MODE_MUX_PARTIAL} mode. * @throws IllegalArgumentException If the format is unsupported or if it does not match the - * existing format in {@link #MUXER_MODE_APPEND_VIDEO} mode. + * existing format in {@link #MUXER_MODE_APPEND} mode. * @throws IllegalStateException If the number of formats added exceeds the {@linkplain * #setTrackCount track count}, if {@link #setTrackCount(int)} has not been called or if there * is already a track of that {@link C.TrackType}. @@ -231,36 +230,43 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; * the track. */ public void addTrackFormat(Format format) throws Muxer.MuxerException { - if (muxerMode == MUXER_MODE_APPEND_VIDEO) { - checkState(contains(trackTypeToInfo, C.TRACK_TYPE_VIDEO)); - TrackInfo videoTrackInfo = trackTypeToInfo.get(C.TRACK_TYPE_VIDEO); - - // Ensure that video formats are the same. Some fields like codecs, averageBitrate, framerate, - // etc, don't match exactly in the Extractor output format and the Encoder output - // format but these fields can be ignored. - // TODO: b/308180225 - Compare Format.colorInfo as well. - Format existingFormat = videoTrackInfo.format; - checkArgument(Util.areEqual(existingFormat.sampleMimeType, format.sampleMimeType)); - checkArgument(existingFormat.width == format.width); - checkArgument(existingFormat.height == format.height); - checkArgument(existingFormat.initializationDataEquals(format)); - - checkNotNull(muxer); - resetAbortTimer(); - return; - } else if (muxerMode == MUXER_MODE_MUX_PARTIAL_VIDEO) { - checkArgument(MimeTypes.isVideo(format.sampleMimeType)); - } - - int trackCount = this.trackCount; - checkState(trackCount > 0, "The track count should be set before the formats are added."); - checkState(trackTypeToInfo.size() < trackCount, "All track formats have already been added."); @Nullable String sampleMimeType = format.sampleMimeType; @C.TrackType int trackType = MimeTypes.getTrackType(sampleMimeType); checkArgument( trackType == C.TRACK_TYPE_AUDIO || trackType == C.TRACK_TYPE_VIDEO, "Unsupported track format: " + sampleMimeType); + if (muxerMode == MUXER_MODE_APPEND) { + if (trackType == C.TRACK_TYPE_VIDEO) { + checkState(contains(trackTypeToInfo, C.TRACK_TYPE_VIDEO)); + TrackInfo videoTrackInfo = trackTypeToInfo.get(C.TRACK_TYPE_VIDEO); + // Ensure that video formats are the same. Some fields like codecs, averageBitrate, + // framerate, etc, don't match exactly in the Extractor output format and the Encoder output + // format but these fields can be ignored. + // TODO: b/308180225 - Compare Format.colorInfo as well. + Format existingFormat = videoTrackInfo.format; + checkArgument(areEqual(existingFormat.sampleMimeType, format.sampleMimeType)); + checkArgument(existingFormat.width == format.width); + checkArgument(existingFormat.height == format.height); + checkArgument(existingFormat.initializationDataEquals(format)); + } else if (trackType == C.TRACK_TYPE_AUDIO) { + checkState(contains(trackTypeToInfo, C.TRACK_TYPE_AUDIO)); + TrackInfo audioTrackInfo = trackTypeToInfo.get(C.TRACK_TYPE_AUDIO); + + Format existingFormat = audioTrackInfo.format; + checkArgument(areEqual(existingFormat.sampleMimeType, format.sampleMimeType)); + checkArgument(existingFormat.channelCount == format.channelCount); + checkArgument(existingFormat.sampleRate == format.sampleRate); + checkArgument(existingFormat.initializationDataEquals(format)); + } + checkNotNull(muxer); + resetAbortTimer(); + return; + } + + int trackCount = this.trackCount; + checkState(trackCount > 0, "The track count should be set before the formats are added."); + checkState(trackTypeToInfo.size() < trackCount, "All track formats have already been added."); checkState( !contains(trackTypeToInfo, trackType), "There is already a track of type " + trackType); @@ -362,8 +368,12 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; DebugTraceUtil.logEvent(DebugTraceUtil.EVENT_MUXER_TRACK_ENDED_AUDIO, trackInfo.timeUs); } - if (muxerMode == MUXER_MODE_MUX_PARTIAL_VIDEO) { - muxedPartialVideo = true; + if (muxerMode == MUXER_MODE_MUX_PARTIAL) { + if (trackType == C.TRACK_TYPE_VIDEO) { + muxedPartialVideo = true; + } else if (trackType == C.TRACK_TYPE_AUDIO) { + muxedPartialAudio = true; + } } else { trackTypeToInfo.delete(trackType); if (trackTypeToInfo.size() == 0) { @@ -371,8 +381,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; } } - if (muxerMode == MUXER_MODE_MUX_PARTIAL_VIDEO && muxedPartialVideo) { - listener.onEnded(Util.usToMs(maxEndedTrackTimeUs), getCurrentOutputSizeBytes()); + if (muxerMode == MUXER_MODE_MUX_PARTIAL + && muxedPartialVideo + && (muxedPartialAudio || trackCount == 1)) { + listener.onEnded(usToMs(maxEndedTrackTimeUs), getCurrentOutputSizeBytes()); if (abortScheduledFuture != null) { abortScheduledFuture.cancel(/* mayInterruptIfRunning= */ false); } @@ -380,26 +392,29 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; } if (isEnded) { - listener.onEnded(Util.usToMs(maxEndedTrackTimeUs), getCurrentOutputSizeBytes()); + listener.onEnded(usToMs(maxEndedTrackTimeUs), getCurrentOutputSizeBytes()); abortScheduledExecutorService.shutdownNow(); } } /** - * Returns whether all the tracks are {@linkplain #endTrack(int) ended} or a partial video is - * completely muxed using {@link #MUXER_MODE_MUX_PARTIAL_VIDEO}. + * Returns whether all the tracks are {@linkplain #endTrack(int) ended} or a partial file is + * completely muxed using {@link #MUXER_MODE_MUX_PARTIAL}. */ public boolean isEnded() { - return isEnded || (muxerMode == MUXER_MODE_MUX_PARTIAL_VIDEO && muxedPartialVideo); + return isEnded + || (muxerMode == MUXER_MODE_MUX_PARTIAL + && muxedPartialVideo + && (muxedPartialAudio || trackCount == 1)); } /** * Finishes writing the output and releases any resources associated with muxing. * - *

When this method is called in {@link #MUXER_MODE_MUX_PARTIAL_VIDEO} mode, the resources are - * not released and the {@link MuxerWrapper} can be reused after {@link #changeToAppendVideoMode() - * changing mode} to {@link #MUXER_MODE_APPEND_VIDEO} mode. In all other modes the {@link - * MuxerWrapper} cannot be used anymore once this method has been called. + *

When this method is called in {@link #MUXER_MODE_MUX_PARTIAL} mode, the resources are not + * released and the {@link MuxerWrapper} can be reused after {@link #changeToAppendMode() changing + * mode} to {@link #MUXER_MODE_APPEND}. In all other modes the {@link MuxerWrapper} cannot be used + * anymore once this method has been called. * * @param forCancellation Whether the reason for releasing the resources is the transformation * cancellation. @@ -407,7 +422,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; * and {@code forCancellation} is false. */ public void release(boolean forCancellation) throws Muxer.MuxerException { - if (muxerMode == MUXER_MODE_MUX_PARTIAL_VIDEO && !forCancellation) { + if (muxerMode == MUXER_MODE_MUX_PARTIAL && !forCancellation) { return; } isReady = false; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java index f76d9a9cae..6ba2e6527d 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java @@ -287,7 +287,7 @@ public final class Transformer { return this; } - // TODO: b/304476154 - Support audio and progress updates in trim optimization. + // TODO: b/304476154 - Support progress updates in trim optimization. /** * Sets whether to attempt to optimize trims from the start of the {@link EditedMediaItem} by * transcoding as little of the file as possible and transmuxing the rest. @@ -298,7 +298,6 @@ public final class Transformer { *

  • Only supported for single-asset (i.e. only one {@link EditedMediaItem} in the whole * {@link Composition}) exports of mp4 files. *
  • Not guaranteed to work with any effects. - *
  • Video track only (removes audio from the file). *
  • Progress updates will be unavailable. * * @@ -708,8 +707,8 @@ public final class Transformer { TRANSFORMER_STATE_PROCESS_REMAINING_VIDEO, TRANSFORMER_STATE_PROCESS_AUDIO, TRANSFORMER_STATE_COPY_OUTPUT, - TRANSFORMER_STATE_TRANSCODE_VIDEO_START, - TRANSFORMER_STATE_TRANSMUX_REMAINING_VIDEO + TRANSFORMER_STATE_PROCESS_MEDIA_START, + TRANSFORMER_STATE_REMUX_REMAINING_MEDIA }) private @interface TransformerState {} @@ -718,9 +717,11 @@ public final class Transformer { private static final int TRANSFORMER_STATE_PROCESS_REMAINING_VIDEO = 2; private static final int TRANSFORMER_STATE_PROCESS_AUDIO = 3; private static final int TRANSFORMER_STATE_COPY_OUTPUT = 4; - private static final int TRANSFORMER_STATE_TRANSCODE_VIDEO_START = 5; - private static final int TRANSFORMER_STATE_TRANSMUX_REMAINING_VIDEO = 6; + private static final int TRANSFORMER_STATE_PROCESS_MEDIA_START = 5; + private static final int TRANSFORMER_STATE_REMUX_REMAINING_MEDIA = 6; + // TODO: b/304476154 - Calculate duration based on sample rate from audio format. + private static final int MAX_ENCODED_AUDIO_BUFFER_DURATION_US = 25_000; private final Context context; private final TransformationRequest transformationRequest; private final ImmutableList audioProcessors; @@ -925,7 +926,7 @@ public final class Transformer { componentListener, /* initialTimestampOffsetUs= */ 0); } else { - transcodeVideoBeforeFirstSyncSampleAfterTrimStartTime(); + processMediaBeforeFirstSyncSampleAfterTrimStartTime(); } } @@ -1139,7 +1140,7 @@ public final class Transformer { checkNotNull(outputFilePath), muxerFactory, componentListener, - MuxerWrapper.MUXER_MODE_MUX_PARTIAL_VIDEO); + MuxerWrapper.MUXER_MODE_MUX_PARTIAL); startInternal( TransmuxTranscodeHelper.createVideoOnlyComposition( @@ -1169,7 +1170,7 @@ public final class Transformer { resumeMetadata); checkNotNull(remuxingMuxerWrapper); - remuxingMuxerWrapper.changeToAppendVideoMode(); + remuxingMuxerWrapper.changeToAppendMode(); startInternal( videoOnlyComposition, @@ -1218,11 +1219,12 @@ public final class Transformer { applicationHandler::post); } - private void transcodeVideoBeforeFirstSyncSampleAfterTrimStartTime() { - transformerState = TRANSFORMER_STATE_TRANSCODE_VIDEO_START; + private void processMediaBeforeFirstSyncSampleAfterTrimStartTime() { + transformerState = TRANSFORMER_STATE_PROCESS_MEDIA_START; MediaItem firstMediaItem = checkNotNull(composition).sequences.get(0).editedMediaItems.get(0).mediaItem; long trimStartTimeUs = firstMediaItem.clippingConfiguration.startPositionUs; + long trimEndTimeUs = firstMediaItem.clippingConfiguration.endPositionUs; getMp4MetadataInfoFuture = TransmuxTranscodeHelper.getMp4MetadataInfo( context, @@ -1233,16 +1235,21 @@ public final class Transformer { new FutureCallback() { @Override public void onSuccess(Mp4MetadataInfo mp4MetadataInfo) { - if (mp4MetadataInfo.firstSyncSampleTimestampUsAfterTimeUs == C.TIME_UNSET) { + if (mp4MetadataInfo.firstSyncSampleTimestampUsAfterTimeUs == C.TIME_UNSET + || (trimEndTimeUs != C.TIME_END_OF_SOURCE + && trimEndTimeUs < mp4MetadataInfo.firstSyncSampleTimestampUsAfterTimeUs)) { exportResultBuilder.setOptimizationResult(OPTIMIZATION_FAILED_NO_VIDEO_TRACK_TO_TRIM); processFullInput(); return; } - if (mp4MetadataInfo.firstSyncSampleTimestampUsAfterTimeUs == trimStartTimeUs) { + // Ensure there is an audio sample to mux between the two clip times to prevent + // Transformer from hanging because it received an audio track but no audio samples. + if (mp4MetadataInfo.firstSyncSampleTimestampUsAfterTimeUs - trimStartTimeUs + < MAX_ENCODED_AUDIO_BUFFER_DURATION_US) { Transformer.this.composition = buildNewCompositionWithClipTimes( composition, - trimStartTimeUs, + mp4MetadataInfo.firstSyncSampleTimestampUsAfterTimeUs, firstMediaItem.clippingConfiguration.endPositionUs, mp4MetadataInfo.durationUs, /* startsAtKeyFrame= */ true); @@ -1266,7 +1273,7 @@ public final class Transformer { checkNotNull(outputFilePath), muxerFactory, componentListener, - MuxerWrapper.MUXER_MODE_MUX_PARTIAL_VIDEO); + MuxerWrapper.MUXER_MODE_MUX_PARTIAL); startInternal( trancodeComposition, remuxingMuxerWrapper, @@ -1283,8 +1290,8 @@ public final class Transformer { applicationHandler::post); } - private void transmuxRemainingVideo() { - transformerState = TRANSFORMER_STATE_TRANSMUX_REMAINING_VIDEO; + private void remuxRemainingMedia() { + transformerState = TRANSFORMER_STATE_REMUX_REMAINING_MEDIA; // TODO: b/304476154 - check original file format against transcode file format here to fail // fast if necessary. MediaItem firstMediaItem = @@ -1300,7 +1307,7 @@ public final class Transformer { mp4MetadataInfo.durationUs, /* startsAtKeyFrame= */ true); checkNotNull(remuxingMuxerWrapper); - remuxingMuxerWrapper.changeToAppendVideoMode(); + remuxingMuxerWrapper.changeToAppendMode(); startInternal( transmuxComposition, remuxingMuxerWrapper, @@ -1410,9 +1417,9 @@ public final class Transformer { processAudio(); } else if (transformerState == TRANSFORMER_STATE_PROCESS_AUDIO) { copyOutput(); - } else if (transformerState == TRANSFORMER_STATE_TRANSCODE_VIDEO_START) { - transmuxRemainingVideo(); - } else if (transformerState == TRANSFORMER_STATE_TRANSMUX_REMAINING_VIDEO) { + } else if (transformerState == TRANSFORMER_STATE_PROCESS_MEDIA_START) { + remuxRemainingMedia(); + } else if (transformerState == TRANSFORMER_STATE_REMUX_REMAINING_MEDIA) { exportResultBuilder.setOptimizationResult(ExportResult.OPTIMIZATION_SUCCEEDED); onExportCompletedWithSuccess(); } else { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransmuxTranscodeHelper.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransmuxTranscodeHelper.java index ba6e7bb0d3..696e0ab73d 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransmuxTranscodeHelper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransmuxTranscodeHelper.java @@ -101,8 +101,6 @@ import java.util.List; .buildUpon() .setMediaItem(mediaItem) .setDurationUs(mediaDurationUs) - // TODO: b/304476154 - Support audio in trim optimization. - .setRemoveAudio(true) .build(); return oldComposition diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java index 56effd1d13..57db7ca0cb 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java @@ -196,14 +196,12 @@ public final class MediaItemExportTest { ExportResult exportResult = TransformerTestRunner.runLooper(transformer); assertThat(exportResult.optimizationResult).isEqualTo(ExportResult.OPTIMIZATION_NONE); - // TODO: b/304476154 - When trim optimization supports audio, remove trim optimization specific - // file and use the pre-existing clipped file made from normal export path. DumpFileAsserts.assertOutput( context, muxerFactory.getCreatedMuxer(), getDumpFileName( /* originalFileName= */ FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S, - /* modifications...= */ "trimOptimizedClippedAtKeyFrame")); + /* modifications...= */ "clipped")); } @Test diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/MuxerWrapperTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/MuxerWrapperTest.java index ab6731b1df..d83e8ed8da 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/MuxerWrapperTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/MuxerWrapperTest.java @@ -17,7 +17,7 @@ package androidx.media3.transformer; import static androidx.media3.common.MimeTypes.AUDIO_AAC; import static androidx.media3.common.MimeTypes.VIDEO_H264; -import static androidx.media3.transformer.MuxerWrapper.MUXER_MODE_MUX_PARTIAL_VIDEO; +import static androidx.media3.transformer.MuxerWrapper.MUXER_MODE_MUX_PARTIAL; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; @@ -66,7 +66,7 @@ public class MuxerWrapperTest { } @Test - public void changeToAppendVideoMode_afterDefaultMode_throws() throws Exception { + public void changeToAppendMode_afterDefaultMode_throws() throws Exception { muxerWrapper = new MuxerWrapper( temporaryFolder.newFile().getPath(), @@ -74,86 +74,62 @@ public class MuxerWrapperTest { new NoOpMuxerListenerImpl(), MuxerWrapper.MUXER_MODE_DEFAULT); - assertThrows(IllegalStateException.class, muxerWrapper::changeToAppendVideoMode); + assertThrows(IllegalStateException.class, muxerWrapper::changeToAppendMode); } @Test - public void setTrackCount_toTwoInMuxPartialVideoMode_throws() throws Exception { + public void addTrackFormat_withSameVideoFormatInAppendMode_doesNotThrow() throws Exception { muxerWrapper = new MuxerWrapper( temporaryFolder.newFile().getPath(), new DefaultMuxer.Factory(), new NoOpMuxerListenerImpl(), - MUXER_MODE_MUX_PARTIAL_VIDEO); + MUXER_MODE_MUX_PARTIAL); - assertThrows(IllegalArgumentException.class, () -> muxerWrapper.setTrackCount(2)); - } - - @Test - public void setTrackCount_toTwoInAppendVideoMode_throws() throws Exception { - muxerWrapper = - new MuxerWrapper( - temporaryFolder.newFile().getPath(), - new DefaultMuxer.Factory(), - new NoOpMuxerListenerImpl(), - MUXER_MODE_MUX_PARTIAL_VIDEO); muxerWrapper.setTrackCount(1); muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT); muxerWrapper.writeSample( C.TRACK_TYPE_VIDEO, FAKE_SAMPLE, /* isKeyFrame= */ true, /* presentationTimeUs= */ 0); muxerWrapper.endTrack(C.TRACK_TYPE_VIDEO); - muxerWrapper.changeToAppendVideoMode(); - - assertThrows(IllegalArgumentException.class, () -> muxerWrapper.setTrackCount(2)); - } - - @Test - public void addTrackFormat_withAudioFormatInMuxPartialVideoMode_throws() throws Exception { - muxerWrapper = - new MuxerWrapper( - temporaryFolder.newFile().getPath(), - new DefaultMuxer.Factory(), - new NoOpMuxerListenerImpl(), - MUXER_MODE_MUX_PARTIAL_VIDEO); + muxerWrapper.changeToAppendMode(); muxerWrapper.setTrackCount(1); - assertThrows( - IllegalArgumentException.class, () -> muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT)); + muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT); } @Test - public void addTrackFormat_withSameVideoFormatInAppendVideoMode_doesNotThrow() throws Exception { + public void addTrackFormat_withSameAudioFormatInAppendMode_doesNotThrow() throws Exception { muxerWrapper = new MuxerWrapper( temporaryFolder.newFile().getPath(), new DefaultMuxer.Factory(), new NoOpMuxerListenerImpl(), - MUXER_MODE_MUX_PARTIAL_VIDEO); + MUXER_MODE_MUX_PARTIAL); + muxerWrapper.setTrackCount(1); + muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT); + muxerWrapper.writeSample( + C.TRACK_TYPE_AUDIO, FAKE_SAMPLE, /* isKeyFrame= */ true, /* presentationTimeUs= */ 0); + muxerWrapper.endTrack(C.TRACK_TYPE_AUDIO); + muxerWrapper.changeToAppendMode(); + muxerWrapper.setTrackCount(1); + + muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT); + } + + @Test + public void addTrackFormat_withDifferentVideoFormatInAppendMode_throws() throws Exception { + muxerWrapper = + new MuxerWrapper( + temporaryFolder.newFile().getPath(), + new DefaultMuxer.Factory(), + new NoOpMuxerListenerImpl(), + MUXER_MODE_MUX_PARTIAL); muxerWrapper.setTrackCount(1); muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT); muxerWrapper.writeSample( C.TRACK_TYPE_VIDEO, FAKE_SAMPLE, /* isKeyFrame= */ true, /* presentationTimeUs= */ 0); muxerWrapper.endTrack(C.TRACK_TYPE_VIDEO); - muxerWrapper.changeToAppendVideoMode(); - muxerWrapper.setTrackCount(1); - - muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT); - } - - @Test - public void addTrackFormat_withDifferentVideoFormatInAppendVideoMode_throws() throws Exception { - muxerWrapper = - new MuxerWrapper( - temporaryFolder.newFile().getPath(), - new DefaultMuxer.Factory(), - new NoOpMuxerListenerImpl(), - MUXER_MODE_MUX_PARTIAL_VIDEO); - muxerWrapper.setTrackCount(1); - muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT); - muxerWrapper.writeSample( - C.TRACK_TYPE_VIDEO, FAKE_SAMPLE, /* isKeyFrame= */ true, /* presentationTimeUs= */ 0); - muxerWrapper.endTrack(C.TRACK_TYPE_VIDEO); - muxerWrapper.changeToAppendVideoMode(); + muxerWrapper.changeToAppendMode(); muxerWrapper.setTrackCount(1); Format differentVideoFormat = FAKE_VIDEO_TRACK_FORMAT.buildUpon().setHeight(5000).build(); @@ -161,6 +137,27 @@ public class MuxerWrapperTest { IllegalArgumentException.class, () -> muxerWrapper.addTrackFormat(differentVideoFormat)); } + @Test + public void addTrackFormat_withDifferentAudioFormatInAppendMode_throws() throws Exception { + muxerWrapper = + new MuxerWrapper( + temporaryFolder.newFile().getPath(), + new DefaultMuxer.Factory(), + new NoOpMuxerListenerImpl(), + MUXER_MODE_MUX_PARTIAL); + muxerWrapper.setTrackCount(1); + muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT); + muxerWrapper.writeSample( + C.TRACK_TYPE_AUDIO, FAKE_SAMPLE, /* isKeyFrame= */ true, /* presentationTimeUs= */ 0); + muxerWrapper.endTrack(C.TRACK_TYPE_AUDIO); + muxerWrapper.changeToAppendMode(); + muxerWrapper.setTrackCount(1); + Format differentAudioFormat = FAKE_AUDIO_TRACK_FORMAT.buildUpon().setSampleRate(48000).build(); + + assertThrows( + IllegalArgumentException.class, () -> muxerWrapper.addTrackFormat(differentAudioFormat)); + } + @Test public void isEnded_afterPartialVideoMuxed_returnsTrue() throws Exception { muxerWrapper = @@ -168,7 +165,7 @@ public class MuxerWrapperTest { temporaryFolder.newFile().getPath(), new DefaultMuxer.Factory(), new NoOpMuxerListenerImpl(), - MUXER_MODE_MUX_PARTIAL_VIDEO); + MUXER_MODE_MUX_PARTIAL); muxerWrapper.setTrackCount(1); muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT); muxerWrapper.writeSample( @@ -179,19 +176,44 @@ public class MuxerWrapperTest { } @Test - public void isEnded_afterStartingAppendVideo_returnsFalse() throws Exception { + public void isEnded_afterPartialAudioAndVideoMuxed_returnsTrue() throws Exception { muxerWrapper = new MuxerWrapper( temporaryFolder.newFile().getPath(), new DefaultMuxer.Factory(), new NoOpMuxerListenerImpl(), - MUXER_MODE_MUX_PARTIAL_VIDEO); + MUXER_MODE_MUX_PARTIAL); + + muxerWrapper.setTrackCount(2); + muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT); + muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT); + muxerWrapper.writeSample( + C.TRACK_TYPE_VIDEO, FAKE_SAMPLE, /* isKeyFrame= */ true, /* presentationTimeUs= */ 0); + muxerWrapper.endTrack(C.TRACK_TYPE_VIDEO); + + assertThat(muxerWrapper.isEnded()).isFalse(); + + muxerWrapper.writeSample( + C.TRACK_TYPE_AUDIO, FAKE_SAMPLE, /* isKeyFrame= */ true, /* presentationTimeUs= */ 0); + muxerWrapper.endTrack(C.TRACK_TYPE_AUDIO); + + assertThat(muxerWrapper.isEnded()).isTrue(); + } + + @Test + public void isEnded_afterEnteringAppendMode_returnsFalse() throws Exception { + muxerWrapper = + new MuxerWrapper( + temporaryFolder.newFile().getPath(), + new DefaultMuxer.Factory(), + new NoOpMuxerListenerImpl(), + MUXER_MODE_MUX_PARTIAL); muxerWrapper.setTrackCount(1); muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT); muxerWrapper.writeSample( C.TRACK_TYPE_VIDEO, FAKE_SAMPLE, /* isKeyFrame= */ true, /* presentationTimeUs= */ 0); muxerWrapper.endTrack(C.TRACK_TYPE_VIDEO); - muxerWrapper.changeToAppendVideoMode(); + muxerWrapper.changeToAppendMode(); muxerWrapper.setTrackCount(1); muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);