Commit bbd7bd8d by sheenachhabra Committed by Tofunmi Adigun-Hameed

Add support for passing creation time via InAppMuxer

PiperOrigin-RevId: 538175466
(cherry picked from commit 6dc8e060c958a2f36dd8d7d1b2f67585082a2a22)
parent df80690e
Showing with 324 additions and 73 deletions
/*
* Copyright 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.container;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.metadata.Metadata;
import com.google.common.primitives.Longs;
/** Stores creation time. */
public final class CreationTime implements Metadata.Entry {
public final long timestampMs;
/**
* Creates an instance.
*
* @param timestampMs The creation time UTC in milliseconds since the Unix epoch.
*/
public CreationTime(long timestampMs) {
this.timestampMs = timestampMs;
}
private CreationTime(Parcel in) {
this.timestampMs = in.readLong();
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof CreationTime)) {
return false;
}
return timestampMs == ((CreationTime) obj).timestampMs;
}
@Override
public int hashCode() {
return Longs.hashCode(timestampMs);
}
@Override
public String toString() {
long unsetCreationTime = -2_082_844_800_000L;
return "Creation time: " + (timestampMs == unsetCreationTime ? "unset" : timestampMs);
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(timestampMs);
}
public static final Parcelable.Creator<CreationTime> CREATOR =
new Parcelable.Creator<CreationTime>() {
@Override
public CreationTime createFromParcel(Parcel in) {
return new CreationTime(in);
}
@Override
public CreationTime[] newArray(int size) {
return new CreationTime[size];
}
};
}
...@@ -25,6 +25,7 @@ import android.content.Context; ...@@ -25,6 +25,7 @@ import android.content.Context;
import android.net.Uri; import android.net.Uri;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.container.CreationTime;
import com.google.android.exoplayer2.metadata.mp4.MdtaMetadataEntry; import com.google.android.exoplayer2.metadata.mp4.MdtaMetadataEntry;
import com.google.android.exoplayer2.metadata.mp4.MotionPhotoMetadata; import com.google.android.exoplayer2.metadata.mp4.MotionPhotoMetadata;
import com.google.android.exoplayer2.metadata.mp4.SlowMotionData; import com.google.android.exoplayer2.metadata.mp4.SlowMotionData;
...@@ -160,6 +161,7 @@ public class MetadataRetrieverTest { ...@@ -160,6 +161,7 @@ public class MetadataRetrieverTest {
new SlowMotionData.Segment( new SlowMotionData.Segment(
/* startTimeMs= */ 1255, /* endTimeMs= */ 1970, /* speedDivisor= */ 8)); /* startTimeMs= */ 1255, /* endTimeMs= */ 1970, /* speedDivisor= */ 8));
SlowMotionData expectedSlowMotionData = new SlowMotionData(segments); SlowMotionData expectedSlowMotionData = new SlowMotionData(segments);
CreationTime expectedCreationTime = new CreationTime(/* timestampMs= */ 1604060090000L);
MdtaMetadataEntry expectedMdtaEntry = MdtaMetadataEntry expectedMdtaEntry =
new MdtaMetadataEntry( new MdtaMetadataEntry(
KEY_ANDROID_CAPTURE_FPS, KEY_ANDROID_CAPTURE_FPS,
...@@ -174,14 +176,17 @@ public class MetadataRetrieverTest { ...@@ -174,14 +176,17 @@ public class MetadataRetrieverTest {
assertThat(trackGroups.length).isEqualTo(2); // Video and audio assertThat(trackGroups.length).isEqualTo(2); // Video and audio
// Audio // Audio
assertThat(trackGroups.get(0).getFormat(0).metadata.length()).isEqualTo(2); assertThat(trackGroups.get(0).getFormat(0).metadata.length()).isEqualTo(3);
assertThat(trackGroups.get(0).getFormat(0).metadata.get(0)).isEqualTo(expectedSmtaEntry); assertThat(trackGroups.get(0).getFormat(0).metadata.get(0)).isEqualTo(expectedSmtaEntry);
assertThat(trackGroups.get(0).getFormat(0).metadata.get(1)).isEqualTo(expectedSlowMotionData); assertThat(trackGroups.get(0).getFormat(0).metadata.get(1)).isEqualTo(expectedSlowMotionData);
assertThat(trackGroups.get(0).getFormat(0).metadata.get(2)).isEqualTo(expectedCreationTime);
// Video // Video
assertThat(trackGroups.get(1).getFormat(0).metadata.length()).isEqualTo(3); assertThat(trackGroups.get(1).getFormat(0).metadata.length()).isEqualTo(4);
assertThat(trackGroups.get(1).getFormat(0).metadata.get(0)).isEqualTo(expectedMdtaEntry); assertThat(trackGroups.get(1).getFormat(0).metadata.get(0)).isEqualTo(expectedMdtaEntry);
assertThat(trackGroups.get(1).getFormat(0).metadata.get(1)).isEqualTo(expectedSmtaEntry); assertThat(trackGroups.get(1).getFormat(0).metadata.get(1)).isEqualTo(expectedSmtaEntry);
assertThat(trackGroups.get(1).getFormat(0).metadata.get(2)).isEqualTo(expectedSlowMotionData); assertThat(trackGroups.get(1).getFormat(0).metadata.get(2)).isEqualTo(expectedSlowMotionData);
assertThat(trackGroups.get(1).getFormat(0).metadata.get(3)).isEqualTo(expectedCreationTime);
} }
@Test @Test
......
...@@ -29,6 +29,7 @@ import com.google.android.exoplayer2.audio.AacUtil; ...@@ -29,6 +29,7 @@ import com.google.android.exoplayer2.audio.AacUtil;
import com.google.android.exoplayer2.audio.Ac3Util; import com.google.android.exoplayer2.audio.Ac3Util;
import com.google.android.exoplayer2.audio.Ac4Util; import com.google.android.exoplayer2.audio.Ac4Util;
import com.google.android.exoplayer2.audio.OpusUtil; import com.google.android.exoplayer2.audio.OpusUtil;
import com.google.android.exoplayer2.container.CreationTime;
import com.google.android.exoplayer2.container.Mp4LocationData; import com.google.android.exoplayer2.container.Mp4LocationData;
import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.drm.DrmInitData;
import com.google.android.exoplayer2.extractor.ExtractorUtil; import com.google.android.exoplayer2.extractor.ExtractorUtil;
...@@ -79,6 +80,19 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -79,6 +80,19 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
} }
} }
/** Stores data retrieved from the mvhd atom. */
public static final class MvhdInfo {
/** The metadata. */
public final Metadata metadata;
/** The movie timescale. */
public final long timescale;
public MvhdInfo(Metadata metadata, long timescale) {
this.metadata = metadata;
this.timescale = timescale;
}
}
private static final String TAG = "AtomParsers"; private static final String TAG = "AtomParsers";
@SuppressWarnings("ConstantCaseForConstants") @SuppressWarnings("ConstantCaseForConstants")
...@@ -206,6 +220,35 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -206,6 +220,35 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
} }
/** /**
* Parses a mvhd atom (defined in ISO/IEC 14496-12), returning the timescale for the movie.
*
* @param mvhd Contents of the mvhd atom to be parsed.
* @return An object containing the parsed data.
*/
public static MvhdInfo parseMvhd(ParsableByteArray mvhd) {
mvhd.setPosition(Atom.HEADER_SIZE);
int fullAtom = mvhd.readInt();
int version = Atom.parseFullAtomVersion(fullAtom);
long creationTimestampSeconds;
if (version == 0) {
creationTimestampSeconds = mvhd.readUnsignedInt();
mvhd.skipBytes(4); // modification_time
} else {
creationTimestampSeconds = mvhd.readLong();
mvhd.skipBytes(8); // modification_time
}
// Convert creation time from MP4 format to Unix epoch timestamp in Ms.
// Time delta between January 1, 1904 (MP4 format) and January 1, 1970 (Unix epoch).
// Includes leap year.
int timeDeltaSeconds = (66 * 365 + 17) * (24 * 60 * 60);
long unixTimestampMs = (creationTimestampSeconds - timeDeltaSeconds) * 1000;
long timescale = mvhd.readUnsignedInt();
return new MvhdInfo(new Metadata(new CreationTime(unixTimestampMs)), timescale);
}
/**
* Parses a metadata meta atom if it contains metadata with handler 'mdta'. * Parses a metadata meta atom if it contains metadata with handler 'mdta'.
* *
* @param meta The metadata atom to decode. * @param meta The metadata atom to decode.
...@@ -318,7 +361,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -318,7 +361,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
if (duration == C.TIME_UNSET) { if (duration == C.TIME_UNSET) {
duration = tkhdData.duration; duration = tkhdData.duration;
} }
long movieTimescale = parseMvhd(mvhd.data); long movieTimescale = parseMvhd(mvhd.data).timescale;
long durationUs; long durationUs;
if (duration == C.TIME_UNSET) { if (duration == C.TIME_UNSET) {
durationUs = C.TIME_UNSET; durationUs = C.TIME_UNSET;
...@@ -836,22 +879,9 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -836,22 +879,9 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
} }
/** /**
* Parses a mvhd atom (defined in ISO/IEC 14496-12), returning the timescale for the movie.
*
* @param mvhd Contents of the mvhd atom to be parsed.
* @return Timescale for the movie.
*/
private static long parseMvhd(ParsableByteArray mvhd) {
mvhd.setPosition(Atom.HEADER_SIZE);
int fullAtom = mvhd.readInt();
int version = Atom.parseFullAtomVersion(fullAtom);
mvhd.skipBytes(version == 0 ? 8 : 16);
return mvhd.readUnsignedInt();
}
/**
* Parses a tkhd atom (defined in ISO/IEC 14496-12). * Parses a tkhd atom (defined in ISO/IEC 14496-12).
* *
* @param tkhd Contents of the tkhd atom to be parsed.
* @return An object containing the parsed data. * @return An object containing the parsed data.
*/ */
private static TkhdData parseTkhd(ParsableByteArray tkhd) { private static TkhdData parseTkhd(ParsableByteArray tkhd) {
......
...@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.extractor.mp4; ...@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.extractor.mp4;
import static com.google.android.exoplayer2.extractor.mp4.AtomParsers.parseTraks; import static com.google.android.exoplayer2.extractor.mp4.AtomParsers.parseTraks;
import static com.google.android.exoplayer2.extractor.mp4.Sniffer.BRAND_HEIC; import static com.google.android.exoplayer2.extractor.mp4.Sniffer.BRAND_HEIC;
import static com.google.android.exoplayer2.extractor.mp4.Sniffer.BRAND_QUICKTIME; import static com.google.android.exoplayer2.extractor.mp4.Sniffer.BRAND_QUICKTIME;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.max; import static java.lang.Math.max;
import static java.lang.Math.min; import static java.lang.Math.min;
...@@ -509,6 +510,9 @@ public final class Mp4Extractor implements Extractor, SeekMap { ...@@ -509,6 +510,9 @@ public final class Mp4Extractor implements Extractor, SeekMap {
mdtaMetadata = AtomParsers.parseMdtaFromMeta(meta); mdtaMetadata = AtomParsers.parseMdtaFromMeta(meta);
} }
Metadata mvhdMetadata =
AtomParsers.parseMvhd(checkNotNull(moov.getLeafAtomOfType(Atom.TYPE_mvhd)).data).metadata;
boolean ignoreEditLists = (flags & FLAG_WORKAROUND_IGNORE_EDIT_LISTS) != 0; boolean ignoreEditLists = (flags & FLAG_WORKAROUND_IGNORE_EDIT_LISTS) != 0;
List<TrackSampleTable> trackSampleTables = List<TrackSampleTable> trackSampleTables =
parseTraks( parseTraks(
...@@ -560,7 +564,8 @@ public final class Mp4Extractor implements Extractor, SeekMap { ...@@ -560,7 +564,8 @@ public final class Mp4Extractor implements Extractor, SeekMap {
formatBuilder, formatBuilder,
smtaMetadata, smtaMetadata,
slowMotionMetadataEntries.isEmpty() ? null : new Metadata(slowMotionMetadataEntries), slowMotionMetadataEntries.isEmpty() ? null : new Metadata(slowMotionMetadataEntries),
xyzMetadata); xyzMetadata,
mvhdMetadata);
mp4Track.trackOutput.format(formatBuilder.build()); mp4Track.trackOutput.format(formatBuilder.build());
if (track.type == C.TRACK_TYPE_VIDEO && firstVideoTrackIndex == C.INDEX_UNSET) { if (track.type == C.TRACK_TYPE_VIDEO && firstVideoTrackIndex == C.INDEX_UNSET) {
......
...@@ -81,6 +81,7 @@ public class Mp4MuxerEndToEndTest { ...@@ -81,6 +81,7 @@ public class Mp4MuxerEndToEndTest {
try { try {
mp4Muxer = new Mp4Muxer.Builder(outputStream).build(); mp4Muxer = new Mp4Muxer.Builder(outputStream).build();
mp4Muxer.setModificationTime(/* timestampMs= */ 500_000_000L);
feedInputDataToMuxer(mp4Muxer, inputFile); feedInputDataToMuxer(mp4Muxer, inputFile);
} finally { } finally {
if (mp4Muxer != null) { if (mp4Muxer != null) {
...@@ -97,6 +98,7 @@ public class Mp4MuxerEndToEndTest { ...@@ -97,6 +98,7 @@ public class Mp4MuxerEndToEndTest {
@Test @Test
public void createMp4File_muxerNotClosed_createsPartiallyWrittenValidFile() throws IOException { public void createMp4File_muxerNotClosed_createsPartiallyWrittenValidFile() throws IOException {
Mp4Muxer mp4Muxer = new Mp4Muxer.Builder(outputStream).build(); Mp4Muxer mp4Muxer = new Mp4Muxer.Builder(outputStream).build();
mp4Muxer.setModificationTime(/* timestampMs= */ 500_000_000L);
feedInputDataToMuxer(mp4Muxer, H265_HDR10_MP4); feedInputDataToMuxer(mp4Muxer, H265_HDR10_MP4);
// Muxer not closed. // Muxer not closed.
......
...@@ -1101,11 +1101,14 @@ import java.util.Locale; ...@@ -1101,11 +1101,14 @@ import java.util.Locale;
return BoxUtils.wrapIntoBox("esds", contents); return BoxUtils.wrapIntoBox("esds", contents);
} }
/** Convert UNIX timestamps to the format used by MP4 files. */ /** Convert Unix epoch timestamps to the format used by MP4 files. */
private static int toMp4Time(long unixTimeMs) { private static int toMp4Time(long unixTimeMs) {
// Jan 1, 1904, including leap years. // Time delta between January 1, 1904 (MP4 format) and January 1, 1970 (Unix epoch).
long delta = (66 * 365 + 17) * (24 * 60 * 60); // Includes leap year.
return (int) (unixTimeMs / 1000L + delta); long timeDeltaSeconds = (66 * 365 + 17) * (24 * 60 * 60);
// The returned value is a positive (when read as unsigned) integer.
return (int) (unixTimeMs / 1000L + timeDeltaSeconds);
} }
/** Packs a three-letter language code into a short, packing 3x5 bits. */ /** Packs a three-letter language code into a short, packing 3x5 bits. */
......
...@@ -189,10 +189,10 @@ public final class Mp4Muxer { ...@@ -189,10 +189,10 @@ public final class Mp4Muxer {
/** /**
* Sets the file modification time. * Sets the file modification time.
* *
* @param modificationDateUnixMs The modification time, in milliseconds since epoch. * @param timestampMs The modification time UTC in milliseconds since the Unix epoch.
*/ */
public void setModificationTime(long modificationDateUnixMs) { public void setModificationTime(long timestampMs) {
metadataCollector.setModificationTime(modificationDateUnixMs); metadataCollector.setModificationTime(timestampMs);
} }
/** /**
......
...@@ -74,6 +74,7 @@ public class Mp4MuxerEndToEndTest { ...@@ -74,6 +74,7 @@ public class Mp4MuxerEndToEndTest {
public void createMp4File_withSameTracksOffset_matchesExpected() throws IOException { public void createMp4File_withSameTracksOffset_matchesExpected() throws IOException {
Context context = ApplicationProvider.getApplicationContext(); Context context = ApplicationProvider.getApplicationContext();
Mp4Muxer mp4Muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer mp4Muxer = new Mp4Muxer.Builder(outputFileStream).build();
mp4Muxer.setModificationTime(/* timestampMs= */ 500_000_000L);
Pair<ByteBuffer, BufferInfo> track1Sample1 = Pair<ByteBuffer, BufferInfo> track1Sample1 =
MuxerTestUtil.getFakeSampleAndSampleInfo(/* presentationTimeUs= */ 100L); MuxerTestUtil.getFakeSampleAndSampleInfo(/* presentationTimeUs= */ 100L);
...@@ -115,6 +116,7 @@ public class Mp4MuxerEndToEndTest { ...@@ -115,6 +116,7 @@ public class Mp4MuxerEndToEndTest {
public void createMp4File_withDifferentTracksOffset_matchesExpected() throws IOException { public void createMp4File_withDifferentTracksOffset_matchesExpected() throws IOException {
Context context = ApplicationProvider.getApplicationContext(); Context context = ApplicationProvider.getApplicationContext();
Mp4Muxer mp4Muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer mp4Muxer = new Mp4Muxer.Builder(outputFileStream).build();
mp4Muxer.setModificationTime(/* timestampMs= */ 500_000_000L);
Pair<ByteBuffer, BufferInfo> track1Sample1 = Pair<ByteBuffer, BufferInfo> track1Sample1 =
MuxerTestUtil.getFakeSampleAndSampleInfo(/* presentationTimeUs= */ 0L); MuxerTestUtil.getFakeSampleAndSampleInfo(/* presentationTimeUs= */ 0L);
......
...@@ -65,7 +65,7 @@ public class Mp4MuxerMetadataTest { ...@@ -65,7 +65,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
} finally { } finally {
...@@ -86,7 +86,7 @@ public class Mp4MuxerMetadataTest { ...@@ -86,7 +86,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
...@@ -109,7 +109,7 @@ public class Mp4MuxerMetadataTest { ...@@ -109,7 +109,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
...@@ -132,7 +132,7 @@ public class Mp4MuxerMetadataTest { ...@@ -132,7 +132,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
...@@ -155,7 +155,7 @@ public class Mp4MuxerMetadataTest { ...@@ -155,7 +155,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
muxer.setLocation(33.0f, -120f); muxer.setLocation(33.0f, -120f);
...@@ -177,7 +177,7 @@ public class Mp4MuxerMetadataTest { ...@@ -177,7 +177,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
} finally { } finally {
...@@ -198,7 +198,7 @@ public class Mp4MuxerMetadataTest { ...@@ -198,7 +198,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
muxer.setCaptureFps(120.0f); muxer.setCaptureFps(120.0f);
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
...@@ -220,7 +220,7 @@ public class Mp4MuxerMetadataTest { ...@@ -220,7 +220,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
muxer.addMetadata("SomeStringKey", "Some Random String"); muxer.addMetadata("SomeStringKey", "Some Random String");
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
...@@ -244,7 +244,7 @@ public class Mp4MuxerMetadataTest { ...@@ -244,7 +244,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
muxer.addMetadata("SomeStringKey", 10.0f); muxer.addMetadata("SomeStringKey", 10.0f);
TrackToken token = muxer.addTrack(/* sortKey= */ 0, format); TrackToken token = muxer.addTrack(/* sortKey= */ 0, format);
muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second);
...@@ -266,7 +266,7 @@ public class Mp4MuxerMetadataTest { ...@@ -266,7 +266,7 @@ public class Mp4MuxerMetadataTest {
Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build(); Mp4Muxer muxer = new Mp4Muxer.Builder(outputFileStream).build();
try { try {
muxer.setModificationTime(5000000); muxer.setModificationTime(/* timestampMs= */ 5_000_000L);
Context context = ApplicationProvider.getApplicationContext(); Context context = ApplicationProvider.getApplicationContext();
byte[] xmpBytes = TestUtil.getByteArray(context, XMP_SAMPLE_DATA); byte[] xmpBytes = TestUtil.getByteArray(context, XMP_SAMPLE_DATA);
ByteBuffer xmp = ByteBuffer.wrap(xmpBytes); ByteBuffer xmp = ByteBuffer.wrap(xmpBytes);
......
...@@ -21,6 +21,7 @@ import static com.google.android.exoplayer2.muxer.Mp4Muxer.SUPPORTED_VIDEO_SAMPL ...@@ -21,6 +21,7 @@ import static com.google.android.exoplayer2.muxer.Mp4Muxer.SUPPORTED_VIDEO_SAMPL
import android.media.MediaCodec.BufferInfo; import android.media.MediaCodec.BufferInfo;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.container.CreationTime;
import com.google.android.exoplayer2.container.Mp4LocationData; import com.google.android.exoplayer2.container.Mp4LocationData;
import com.google.android.exoplayer2.container.XmpData; import com.google.android.exoplayer2.container.XmpData;
import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.Metadata;
...@@ -181,6 +182,7 @@ public final class InAppMuxer implements Muxer { ...@@ -181,6 +182,7 @@ public final class InAppMuxer implements Muxer {
// LINT.IfChange(added_metadata) // LINT.IfChange(added_metadata)
if (entry instanceof Mp4LocationData if (entry instanceof Mp4LocationData
|| entry instanceof XmpData || entry instanceof XmpData
|| entry instanceof CreationTime
|| (entry instanceof MdtaMetadataEntry || (entry instanceof MdtaMetadataEntry
&& ((MdtaMetadataEntry) entry) && ((MdtaMetadataEntry) entry)
.key.equals(MdtaMetadataEntry.KEY_ANDROID_CAPTURE_FPS))) { .key.equals(MdtaMetadataEntry.KEY_ANDROID_CAPTURE_FPS))) {
...@@ -220,6 +222,9 @@ public final class InAppMuxer implements Muxer { ...@@ -220,6 +222,9 @@ public final class InAppMuxer implements Muxer {
((Mp4LocationData) entry).latitude, ((Mp4LocationData) entry).longitude); ((Mp4LocationData) entry).latitude, ((Mp4LocationData) entry).longitude);
} else if (entry instanceof XmpData) { } else if (entry instanceof XmpData) {
mp4Muxer.addXmp(ByteBuffer.wrap(((XmpData) entry).data)); mp4Muxer.addXmp(ByteBuffer.wrap(((XmpData) entry).data));
} else if (entry instanceof CreationTime) {
// TODO: b/285281716 - Use creation time specific API.
mp4Muxer.setModificationTime(((CreationTime) entry).timestampMs);
} else if (entry instanceof MdtaMetadataEntry) { } else if (entry instanceof MdtaMetadataEntry) {
MdtaMetadataEntry mdtaMetadataEntry = (MdtaMetadataEntry) entry; MdtaMetadataEntry mdtaMetadataEntry = (MdtaMetadataEntry) entry;
if (mdtaMetadataEntry.key.equals(MdtaMetadataEntry.KEY_ANDROID_CAPTURE_FPS)) { if (mdtaMetadataEntry.key.equals(MdtaMetadataEntry.KEY_ANDROID_CAPTURE_FPS)) {
......
...@@ -23,6 +23,7 @@ import android.net.Uri; ...@@ -23,6 +23,7 @@ import android.net.Uri;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.container.CreationTime;
import com.google.android.exoplayer2.container.Mp4LocationData; import com.google.android.exoplayer2.container.Mp4LocationData;
import com.google.android.exoplayer2.container.XmpData; import com.google.android.exoplayer2.container.XmpData;
import com.google.android.exoplayer2.extractor.mp4.Mp4Extractor; import com.google.android.exoplayer2.extractor.mp4.Mp4Extractor;
...@@ -60,7 +61,7 @@ public class TransformerWithInAppMuxerEndToEndTest { ...@@ -60,7 +61,7 @@ public class TransformerWithInAppMuxerEndToEndTest {
} }
@Test @Test
public void transmux_withLocationMetadata_outputMatchedExpected() throws Exception { public void transmux_withLocationMetadata_outputMatchesExpected() throws Exception {
Muxer.Factory inAppMuxerFactory = Muxer.Factory inAppMuxerFactory =
new InAppMuxer.Factory( new InAppMuxer.Factory(
DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS, DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS,
...@@ -111,7 +112,7 @@ public class TransformerWithInAppMuxerEndToEndTest { ...@@ -111,7 +112,7 @@ public class TransformerWithInAppMuxerEndToEndTest {
} }
@Test @Test
public void transmux_withCaptureFps_outputMatchedExpected() throws Exception { public void transmux_withCaptureFps_outputMatchesExpected() throws Exception {
Muxer.Factory inAppMuxerFactory = Muxer.Factory inAppMuxerFactory =
new InAppMuxer.Factory( new InAppMuxer.Factory(
DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS, DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS,
...@@ -141,4 +142,29 @@ public class TransformerWithInAppMuxerEndToEndTest { ...@@ -141,4 +142,29 @@ public class TransformerWithInAppMuxerEndToEndTest {
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
context, fakeExtractorOutput, TestUtil.getDumpFileName(H264_MP4 + ".with_capture_fps")); context, fakeExtractorOutput, TestUtil.getDumpFileName(H264_MP4 + ".with_capture_fps"));
} }
@Test
public void transmux_withCreationTime_outputMatchesExpected() throws Exception {
Muxer.Factory inAppMuxerFactory =
new InAppMuxer.Factory(
DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS,
metadataEntries ->
metadataEntries.add(new CreationTime(/* timestampMs= */ 2_000_000_000_000L)));
Transformer transformer =
new Transformer.Builder(context)
.setClock(new FakeClock(/* isAutoAdvancing= */ true))
.setMuxerFactory(inAppMuxerFactory)
.build();
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_FILE_ASSET_DIRECTORY + H264_MP4));
transformer.start(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer);
FakeExtractorOutput fakeExtractorOutput =
com.google.android.exoplayer2.testutil.TestUtil.extractAllSamplesFromFilePath(
new Mp4Extractor(), checkNotNull(outputPath));
// [Creation time: 2_000_000_000_000] in track metadata dump.
DumpFileAsserts.assertOutput(
context, fakeExtractorOutput, TestUtil.getDumpFileName(H264_MP4 + ".with_creation_time"));
}
} }
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 180 width = 180
height = 120 height = 120
pixelWidthHeightRatio = 0.5 pixelWidthHeightRatio = 0.5
metadata = entries=[Creation time: unset]
initializationData: initializationData:
data = length 32, hash 1F3D6E87 data = length 32, hash 1F3D6E87
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 180 width = 180
height = 120 height = 120
pixelWidthHeightRatio = 0.5 pixelWidthHeightRatio = 0.5
metadata = entries=[Creation time: unset]
initializationData: initializationData:
data = length 32, hash 1F3D6E87 data = length 32, hash 1F3D6E87
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 180 width = 180
height = 120 height = 120
pixelWidthHeightRatio = 0.5 pixelWidthHeightRatio = 0.5
metadata = entries=[Creation time: unset]
initializationData: initializationData:
data = length 32, hash 1F3D6E87 data = length 32, hash 1F3D6E87
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 180 width = 180
height = 120 height = 120
pixelWidthHeightRatio = 0.5 pixelWidthHeightRatio = 0.5
metadata = entries=[Creation time: unset]
initializationData: initializationData:
data = length 32, hash 1F3D6E87 data = length 32, hash 1F3D6E87
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -17,7 +17,7 @@ track 0: ...@@ -17,7 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[xyz: latitude=40.68, longitude=-74.5] metadata = entries=[xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -153,7 +153,7 @@ track 1: ...@@ -153,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -17,7 +17,7 @@ track 0: ...@@ -17,7 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[xyz: latitude=40.68, longitude=-74.5] metadata = entries=[xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -153,7 +153,7 @@ track 1: ...@@ -153,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -17,7 +17,7 @@ track 0: ...@@ -17,7 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[xyz: latitude=40.68, longitude=-74.5] metadata = entries=[xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -153,7 +153,7 @@ track 1: ...@@ -153,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -17,7 +17,7 @@ track 0: ...@@ -17,7 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[xyz: latitude=40.68, longitude=-74.5] metadata = entries=[xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -153,7 +153,7 @@ track 1: ...@@ -153,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -17,7 +17,7 @@ track 0: ...@@ -17,7 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[xyz: latitude=40.68, longitude=-74.5] metadata = entries=[xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -153,7 +153,7 @@ track 1: ...@@ -153,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 3 colorTransfer = 3
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1635264810000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 3 colorTransfer = 3
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1635264810000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 3 colorTransfer = 3
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1635264810000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 3 colorTransfer = 3
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1635264810000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 3 colorTransfer = 3
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1635264810000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1581574441000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1581574441000]
sample 0: sample 0:
time = 96000 time = 96000
flags = 1 flags = 1
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1581574441000]
sample 0: sample 0:
time = 192000 time = 192000
flags = 1 flags = 1
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1581574441000]
sample 0: sample 0:
time = 256000 time = 256000
flags = 536870913 flags = 536870913
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1581574441000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1578288075000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1578288075000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1578288075000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1578288075000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1578288075000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -22,7 +22,7 @@ track 0: ...@@ -22,7 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.android.capture.fps, value=240.0] metadata = entries=[mdta: key=com.android.capture.fps, value=240.0, Creation time: unset]
initializationData: initializationData:
data = length 22, hash 4CF81805 data = length 22, hash 4CF81805
data = length 9, hash FBAFBA1C data = length 9, hash FBAFBA1C
......
...@@ -22,7 +22,7 @@ track 0: ...@@ -22,7 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.android.capture.fps, value=240.0] metadata = entries=[mdta: key=com.android.capture.fps, value=240.0, Creation time: unset]
initializationData: initializationData:
data = length 22, hash 4CF81805 data = length 22, hash 4CF81805
data = length 9, hash FBAFBA1C data = length 9, hash FBAFBA1C
......
...@@ -22,7 +22,7 @@ track 0: ...@@ -22,7 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.android.capture.fps, value=240.0] metadata = entries=[mdta: key=com.android.capture.fps, value=240.0, Creation time: unset]
initializationData: initializationData:
data = length 22, hash 4CF81805 data = length 22, hash 4CF81805
data = length 9, hash FBAFBA1C data = length 9, hash FBAFBA1C
......
...@@ -22,7 +22,7 @@ track 0: ...@@ -22,7 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.android.capture.fps, value=240.0] metadata = entries=[mdta: key=com.android.capture.fps, value=240.0, Creation time: unset]
initializationData: initializationData:
data = length 22, hash 4CF81805 data = length 22, hash 4CF81805
data = length 9, hash FBAFBA1C data = length 9, hash FBAFBA1C
......
...@@ -22,7 +22,7 @@ track 0: ...@@ -22,7 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.android.capture.fps, value=240.0] metadata = entries=[mdta: key=com.android.capture.fps, value=240.0, Creation time: unset]
initializationData: initializationData:
data = length 22, hash 4CF81805 data = length 22, hash 4CF81805
data = length 9, hash FBAFBA1C data = length 9, hash FBAFBA1C
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1633006610000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1633006610000]
sample 0: sample 0:
time = 106666 time = 106666
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1633006610000]
sample 0: sample 0:
time = 213333 time = 213333
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1633006610000]
sample 0: sample 0:
time = 320000 time = 320000
flags = 1 flags = 1
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1633006610000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579241726000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579241726000]
sample 0: sample 0:
time = 576000 time = 576000
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579241726000]
sample 0: sample 0:
time = 1152000 time = 1152000
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579241726000]
sample 0: sample 0:
time = 1696000 time = 1696000
flags = 536870913 flags = 536870913
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579241726000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579242140000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579242140000]
sample 0: sample 0:
time = 672000 time = 672000
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579242140000]
sample 0: sample 0:
time = 1344000 time = 1344000
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579242140000]
sample 0: sample 0:
time = 2016000 time = 2016000
flags = 536870913 flags = 536870913
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
channelCount = 6 channelCount = 6
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[Creation time: 1579242140000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -152,7 +153,7 @@ track 1: ...@@ -152,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -152,7 +153,7 @@ track 1: ...@@ -152,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -152,7 +153,7 @@ track 1: ...@@ -152,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -152,7 +153,7 @@ track 1: ...@@ -152,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -152,7 +153,7 @@ track 1: ...@@ -152,7 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Creation time: 1464714095000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -18,6 +18,7 @@ track 0: ...@@ -18,6 +18,7 @@ track 0:
encoderDelay = 3072 encoderDelay = 3072
encoderPadding = 255 encoderPadding = 255
language = und language = und
metadata = entries=[Creation time: 1619054108000]
initializationData: initializationData:
data = length 26, hash 4E58F6C7 data = length 26, hash 4E58F6C7
sample 0: sample 0:
......
...@@ -16,7 +16,7 @@ track 0: ...@@ -16,7 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.29.100], Creation time: unset]
initializationData: initializationData:
data = length 19, hash 86852AE2 data = length 19, hash 86852AE2
data = length 8, hash 72CBCBF5 data = length 8, hash 72CBCBF5
......
...@@ -16,7 +16,7 @@ track 0: ...@@ -16,7 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.29.100], Creation time: unset]
initializationData: initializationData:
data = length 19, hash 86852AE2 data = length 19, hash 86852AE2
data = length 8, hash 72CBCBF5 data = length 8, hash 72CBCBF5
......
...@@ -16,7 +16,7 @@ track 0: ...@@ -16,7 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.29.100], Creation time: unset]
initializationData: initializationData:
data = length 19, hash 86852AE2 data = length 19, hash 86852AE2
data = length 8, hash 72CBCBF5 data = length 8, hash 72CBCBF5
......
...@@ -16,7 +16,7 @@ track 0: ...@@ -16,7 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.29.100], Creation time: unset]
initializationData: initializationData:
data = length 19, hash 86852AE2 data = length 19, hash 86852AE2
data = length 8, hash 72CBCBF5 data = length 8, hash 72CBCBF5
......
...@@ -16,7 +16,7 @@ track 0: ...@@ -16,7 +16,7 @@ track 0:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.29.100], Creation time: unset]
initializationData: initializationData:
data = length 19, hash 86852AE2 data = length 19, hash 86852AE2
data = length 8, hash 72CBCBF5 data = length 8, hash 72CBCBF5
......
...@@ -23,6 +23,7 @@ track 0: ...@@ -23,6 +23,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 7 colorTransfer = 7
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 526, hash 7B3FC433 data = length 526, hash 7B3FC433
sample 0: sample 0:
...@@ -74,6 +75,7 @@ track 1: ...@@ -74,6 +75,7 @@ track 1:
sampleRate = 44100 sampleRate = 44100
encoderPadding = 2204 encoderPadding = 2204
language = und language = und
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 2, hash 5FF data = length 2, hash 5FF
sample 0: sample 0:
......
...@@ -23,6 +23,7 @@ track 0: ...@@ -23,6 +23,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 7 colorTransfer = 7
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 526, hash 7B3FC433 data = length 526, hash 7B3FC433
sample 0: sample 0:
...@@ -74,6 +75,7 @@ track 1: ...@@ -74,6 +75,7 @@ track 1:
sampleRate = 44100 sampleRate = 44100
encoderPadding = 2204 encoderPadding = 2204
language = und language = und
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 2, hash 5FF data = length 2, hash 5FF
sample 0: sample 0:
......
...@@ -23,6 +23,7 @@ track 0: ...@@ -23,6 +23,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 7 colorTransfer = 7
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 526, hash 7B3FC433 data = length 526, hash 7B3FC433
sample 0: sample 0:
...@@ -74,6 +75,7 @@ track 1: ...@@ -74,6 +75,7 @@ track 1:
sampleRate = 44100 sampleRate = 44100
encoderPadding = 2204 encoderPadding = 2204
language = und language = und
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 2, hash 5FF data = length 2, hash 5FF
sample 0: sample 0:
......
...@@ -23,6 +23,7 @@ track 0: ...@@ -23,6 +23,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 7 colorTransfer = 7
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 526, hash 7B3FC433 data = length 526, hash 7B3FC433
sample 0: sample 0:
...@@ -74,6 +75,7 @@ track 1: ...@@ -74,6 +75,7 @@ track 1:
sampleRate = 44100 sampleRate = 44100
encoderPadding = 2204 encoderPadding = 2204
language = und language = und
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 2, hash 5FF data = length 2, hash 5FF
sample 0: sample 0:
......
...@@ -23,6 +23,7 @@ track 0: ...@@ -23,6 +23,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 7 colorTransfer = 7
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 526, hash 7B3FC433 data = length 526, hash 7B3FC433
sample 0: sample 0:
...@@ -74,6 +75,7 @@ track 1: ...@@ -74,6 +75,7 @@ track 1:
sampleRate = 44100 sampleRate = 44100
encoderPadding = 2204 encoderPadding = 2204
language = und language = und
metadata = entries=[Creation time: 1621959711000]
initializationData: initializationData:
data = length 2, hash 5FF data = length 2, hash 5FF
sample 0: sample 0:
......
...@@ -21,6 +21,7 @@ track 0: ...@@ -21,6 +21,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 6 colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35 hdrStaticInfo = length 25, hash 423AFC35
metadata = entries=[Creation time: unset]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
...@@ -274,7 +275,7 @@ track 1: ...@@ -274,7 +275,7 @@ track 1:
channelCount = 2 channelCount = 2
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.76.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Creation time: unset]
initializationData: initializationData:
data = length 16, hash CAA21BBF data = length 16, hash CAA21BBF
sample 0: sample 0:
......
...@@ -21,6 +21,7 @@ track 0: ...@@ -21,6 +21,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 6 colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35 hdrStaticInfo = length 25, hash 423AFC35
metadata = entries=[Creation time: unset]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
...@@ -274,7 +275,7 @@ track 1: ...@@ -274,7 +275,7 @@ track 1:
channelCount = 2 channelCount = 2
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.76.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Creation time: unset]
initializationData: initializationData:
data = length 16, hash CAA21BBF data = length 16, hash CAA21BBF
sample 0: sample 0:
......
...@@ -21,6 +21,7 @@ track 0: ...@@ -21,6 +21,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 6 colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35 hdrStaticInfo = length 25, hash 423AFC35
metadata = entries=[Creation time: unset]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
...@@ -274,7 +275,7 @@ track 1: ...@@ -274,7 +275,7 @@ track 1:
channelCount = 2 channelCount = 2
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.76.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Creation time: unset]
initializationData: initializationData:
data = length 16, hash CAA21BBF data = length 16, hash CAA21BBF
sample 0: sample 0:
......
...@@ -21,6 +21,7 @@ track 0: ...@@ -21,6 +21,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 6 colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35 hdrStaticInfo = length 25, hash 423AFC35
metadata = entries=[Creation time: unset]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
...@@ -274,7 +275,7 @@ track 1: ...@@ -274,7 +275,7 @@ track 1:
channelCount = 2 channelCount = 2
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.76.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Creation time: unset]
initializationData: initializationData:
data = length 16, hash CAA21BBF data = length 16, hash CAA21BBF
sample 0: sample 0:
......
...@@ -21,6 +21,7 @@ track 0: ...@@ -21,6 +21,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 6 colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35 hdrStaticInfo = length 25, hash 423AFC35
metadata = entries=[Creation time: unset]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
...@@ -274,7 +275,7 @@ track 1: ...@@ -274,7 +275,7 @@ track 1:
channelCount = 2 channelCount = 2
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[TSSE: description=null: values=[Lavf58.76.100]] metadata = entries=[TSSE: description=null: values=[Lavf58.76.100], Creation time: unset]
initializationData: initializationData:
data = length 16, hash CAA21BBF data = length 16, hash CAA21BBF
sample 0: sample 0:
......
...@@ -13,6 +13,7 @@ track 0: ...@@ -13,6 +13,7 @@ track 0:
id = 1 id = 1
sampleMimeType = application/meta sampleMimeType = application/meta
maxInputSize = 161 maxInputSize = 161
metadata = entries=[Creation time: 500000000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
...@@ -38,6 +39,7 @@ track 1: ...@@ -38,6 +39,7 @@ track 1:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = ``` language = ```
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 2, hash 560 data = length 2, hash 560
sample 0: sample 0:
...@@ -68,6 +70,7 @@ track 2: ...@@ -68,6 +70,7 @@ track 2:
colorRange = 1 colorRange = 1
colorTransfer = 3 colorTransfer = 3
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 85, hash 6F3CAA16 data = length 85, hash 6F3CAA16
sample 0: sample 0:
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 6 colorTransfer = 6
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 99, hash 99842E5A data = length 99, hash 99842E5A
sample 0: sample 0:
...@@ -545,6 +546,7 @@ track 1: ...@@ -545,6 +546,7 @@ track 1:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = ``` language = ```
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 2, hash 560 data = length 2, hash 560
sample 0: sample 0:
......
...@@ -21,6 +21,7 @@ track 0: ...@@ -21,6 +21,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 5000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 5000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 5000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 5000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
...@@ -49,6 +50,7 @@ track 1: ...@@ -49,6 +50,7 @@ track 1:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -21,7 +21,7 @@ track 0: ...@@ -21,7 +21,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.android.capture.fps, value=120.0] metadata = entries=[mdta: key=com.android.capture.fps, value=120.0, Creation time: 5000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -21,7 +21,7 @@ track 0: ...@@ -21,7 +21,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[xyz: latitude=33.0, longitude=-120.0] metadata = entries=[xyz: latitude=33.0, longitude=-120.0, Creation time: 5000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -21,6 +21,7 @@ track 0: ...@@ -21,6 +21,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 5000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
...@@ -49,6 +50,7 @@ track 1: ...@@ -49,6 +50,7 @@ track 1:
colorRange = 1 colorRange = 1
colorTransfer = -1 colorTransfer = -1
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 28, hash 410B510 data = length 28, hash 410B510
data = length 9, hash FBADD682 data = length 9, hash FBADD682
......
...@@ -22,6 +22,7 @@ track 0: ...@@ -22,6 +22,7 @@ track 0:
colorRange = 2 colorRange = 2
colorTransfer = 6 colorTransfer = 6
hdrStaticInfo = length 0, hash 0 hdrStaticInfo = length 0, hash 0
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 99, hash 99842E5A data = length 99, hash 99842E5A
sample 0: sample 0:
...@@ -413,6 +414,7 @@ track 1: ...@@ -413,6 +414,7 @@ track 1:
channelCount = 2 channelCount = 2
sampleRate = 48000 sampleRate = 48000
language = ``` language = ```
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 2, hash 560 data = length 2, hash 560
sample 0: sample 0:
......
...@@ -17,6 +17,7 @@ track 0: ...@@ -17,6 +17,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 32.113037 frameRate = 32.113037
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
...@@ -152,6 +153,7 @@ track 1: ...@@ -152,6 +153,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 2, hash 5F7 data = length 2, hash 5F7
sample 0: sample 0:
......
...@@ -16,6 +16,7 @@ track 0: ...@@ -16,6 +16,7 @@ track 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 31.004547 frameRate = 31.004547
metadata = entries=[Creation time: 500000000]
sample 0: sample 0:
time = 0 time = 0
flags = 1 flags = 1
...@@ -149,6 +150,7 @@ track 1: ...@@ -149,6 +150,7 @@ track 1:
channelCount = 1 channelCount = 1
sampleRate = 44100 sampleRate = 44100
language = und language = und
metadata = entries=[Creation time: 500000000]
initializationData: initializationData:
data = length 5, hash 2B7623A data = length 5, hash 2B7623A
sample 0: sample 0:
......
...@@ -6,19 +6,19 @@ format 0: ...@@ -6,19 +6,19 @@ format 0:
width = 1080 width = 1080
height = 720 height = 720
frameRate = 29.970028 frameRate = 29.970028
metadata = entries=[xyz: latitude=40.68, longitude=-74.5] metadata = entries=[xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
container metadata = entries=[xyz: latitude=40.68, longitude=-74.5] container metadata = entries=[xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
format 1: format 1:
averageBitrate = 131072 averageBitrate = 131072
sampleMimeType = audio/mp4a-latm sampleMimeType = audio/mp4a-latm
channelCount = 1 channelCount = 1
sampleRate = 48000 sampleRate = 48000
pcmEncoding = 2 pcmEncoding = 2
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5] metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
container metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5] container metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Creation time: 1464714095000]
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1868041800 dataHashCode = 1868041800
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment