Compare commits

...

6 Commits

Author SHA1 Message Date
Googler
10fd1ee270 Minor cleanup to separate content progress provider interface
PiperOrigin-RevId: 740901722
2025-03-26 14:23:11 -07:00
sheenachhabra
87e0d7b95a Add setForceAudioTrack method on EditedMediaItemSequence
PiperOrigin-RevId: 740808813
2025-03-26 10:04:14 -07:00
ibaker
0d60c5bf25 MP4: Parse alternate_group and expose it in Format.metadata
Issue: androidx/media#2242
PiperOrigin-RevId: 740794206
2025-03-26 09:21:21 -07:00
ibaker
96bb777484 Add VideoFrameMetadataListener calls to FakeVideoRenderer
This change also tightens `FakeVideoRenderer` to only 'handle' buffers
that are close to the current playback position.

This condition controls whether the renderer fires `onVideoSizeChanged`
and `onRenderedFirstFrame`, both of which should only be fired once the
frame has been 'released' to the screen, which in a real renderer
happens much closer to 'current position' than the existing 250ms of
`FakeRenderer.SOURCE_READAHEAD_US`.

A later change uses `VideoFrameMetadataListener` to test ExoPlayer
behaviour in scrubbing mode.

PiperOrigin-RevId: 740763283
2025-03-26 07:44:38 -07:00
Copybara-Service
95fbecd076 Merge pull request #2260 from MGaetan89:audiomanagercompat_log
PiperOrigin-RevId: 740752418
2025-03-26 07:06:39 -07:00
Gaëtan Muller
14b4a9ff32 Use the existing TAG constant in AudioManagerCompat
This also addresses the `Private field 'TAG' is never used` warning.
2025-03-26 11:13:33 +00:00
249 changed files with 675 additions and 302 deletions

View File

@ -11,6 +11,9 @@
variable bitrate metadata when falling back to constant bitrate seeking
due to `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)`
([#2194](https://github.com/androidx/media/issues/2194)).
* MP4: Parse `alternate_group` from the `tkhd` box and expose it as an
`Mp4AlternateGroupData` entry in each track's `Format.metadata`
([#2242](https://github.com/androidx/media/issues/2242)).
* DataSource:
* Audio:
* Allow constant power upmixing/downmixing in DefaultAudioMixer.

View File

@ -220,10 +220,7 @@ public final class AudioManagerCompat {
try {
return audioManager.getStreamVolume(streamType);
} catch (RuntimeException e) {
Log.w(
"AudioManagerCompat",
"Could not retrieve stream volume for stream type " + streamType,
e);
Log.w(TAG, "Could not retrieve stream volume for stream type " + streamType, e);
return audioManager.getStreamMaxVolume(streamType);
}
}

View File

@ -0,0 +1,54 @@
/*
* Copyright 2025 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 androidx.media3.container;
import androidx.annotation.Nullable;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.UnstableApi;
/** Stores MP4 {@code alternate_group} info parsed from a {@code tkhd} box. */
@UnstableApi
public final class Mp4AlternateGroupData implements Metadata.Entry {
public final int alternateGroup;
public Mp4AlternateGroupData(int alternateGroup) {
this.alternateGroup = alternateGroup;
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Mp4AlternateGroupData)) {
return false;
}
Mp4AlternateGroupData other = (Mp4AlternateGroupData) obj;
return alternateGroup == other.alternateGroup;
}
@Override
public int hashCode() {
return alternateGroup;
}
@Override
public String toString() {
return "Mp4AlternateGroup: " + alternateGroup;
}
}

View File

@ -143,6 +143,8 @@ import java.util.Objects;
private final Timeline.Period period;
private final Handler handler;
private final ComponentListener componentListener;
private final ContentPlaybackAdapter contentPlaybackAdapter;
private final VideoAdPlayerImpl videoAdPlayerImpl;
private final List<EventListener> eventListeners;
private final List<VideoAdPlayer.VideoAdPlayerCallback> adCallbacks;
private final Runnable updateAdProgressRunnable;
@ -262,6 +264,8 @@ import java.util.Objects;
period = new Timeline.Period();
handler = Util.createHandler(getImaLooper(), /* callback= */ null);
componentListener = new ComponentListener();
contentPlaybackAdapter = new ContentPlaybackAdapter();
videoAdPlayerImpl = new VideoAdPlayerImpl();
eventListeners = new ArrayList<>();
adCallbacks = new ArrayList<>(/* initialCapacity= */ 1);
if (configuration.applicationVideoAdPlayerCallback != null) {
@ -281,10 +285,10 @@ import java.util.Objects;
adLoadTimeoutRunnable = this::handleAdLoadTimeout;
if (adViewGroup != null) {
adDisplayContainer =
imaFactory.createAdDisplayContainer(adViewGroup, /* player= */ componentListener);
imaFactory.createAdDisplayContainer(adViewGroup, /* player= */ videoAdPlayerImpl);
} else {
adDisplayContainer =
imaFactory.createAudioAdDisplayContainer(context, /* player= */ componentListener);
imaFactory.createAudioAdDisplayContainer(context, /* player= */ videoAdPlayerImpl);
}
if (configuration.companionAdSlots != null) {
adDisplayContainer.setCompanionSlots(configuration.companionAdSlots);
@ -578,7 +582,7 @@ import java.util.Objects;
if (configuration.vastLoadTimeoutMs != TIMEOUT_UNSET) {
request.setVastLoadTimeout(configuration.vastLoadTimeoutMs);
}
request.setContentProgressProvider(componentListener);
request.setContentProgressProvider(contentPlaybackAdapter);
adsLoader.requestAds(request);
return adsLoader;
}
@ -1353,42 +1357,7 @@ import java.util.Objects;
}
}
private final class ComponentListener
implements AdsLoadedListener,
ContentProgressProvider,
AdEventListener,
AdErrorListener,
VideoAdPlayer {
// AdsLoader.AdsLoadedListener implementation.
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
AdsManager adsManager = adsManagerLoadedEvent.getAdsManager();
if (!Objects.equals(pendingAdRequestContext, adsManagerLoadedEvent.getUserRequestContext())) {
adsManager.destroy();
return;
}
pendingAdRequestContext = null;
AdTagLoader.this.adsManager = adsManager;
adsManager.addAdErrorListener(this);
if (configuration.applicationAdErrorListener != null) {
adsManager.addAdErrorListener(configuration.applicationAdErrorListener);
}
adsManager.addAdEventListener(this);
if (configuration.applicationAdEventListener != null) {
adsManager.addAdEventListener(configuration.applicationAdEventListener);
}
try {
adPlaybackState =
new AdPlaybackState(adsId, getAdGroupTimesUsForCuePoints(adsManager.getAdCuePoints()));
updateAdPlaybackState();
} catch (RuntimeException e) {
maybeNotifyInternalError("onAdsManagerLoaded", e);
}
}
// ContentProgressProvider implementation.
private final class ContentPlaybackAdapter implements ContentProgressProvider {
@Override
public VideoProgressUpdate getContentProgress() {
@ -1419,6 +1388,38 @@ import java.util.Objects;
return videoProgressUpdate;
}
}
private final class ComponentListener
implements AdsLoadedListener, AdEventListener, AdErrorListener {
// AdsLoader.AdsLoadedListener implementation.
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
AdsManager adsManager = adsManagerLoadedEvent.getAdsManager();
if (!Objects.equals(pendingAdRequestContext, adsManagerLoadedEvent.getUserRequestContext())) {
adsManager.destroy();
return;
}
pendingAdRequestContext = null;
AdTagLoader.this.adsManager = adsManager;
adsManager.addAdErrorListener(this);
if (configuration.applicationAdErrorListener != null) {
adsManager.addAdErrorListener(configuration.applicationAdErrorListener);
}
adsManager.addAdEventListener(this);
if (configuration.applicationAdEventListener != null) {
adsManager.addAdEventListener(configuration.applicationAdEventListener);
}
try {
adPlaybackState =
new AdPlaybackState(adsId, getAdGroupTimesUsForCuePoints(adsManager.getAdCuePoints()));
updateAdPlaybackState();
} catch (RuntimeException e) {
maybeNotifyInternalError("onAdsManagerLoaded", e);
}
}
// AdEvent.AdEventListener implementation.
@ -1460,8 +1461,9 @@ import java.util.Objects;
}
maybeNotifyPendingAdLoadError();
}
}
// VideoAdPlayer implementation.
class VideoAdPlayerImpl implements VideoAdPlayer {
@Override
public void addCallback(VideoAdPlayerCallback videoAdPlayerCallback) {

View File

@ -37,6 +37,7 @@ import androidx.media3.common.util.ParsableByteArray;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
import androidx.media3.container.DolbyVisionConfig;
import androidx.media3.container.Mp4AlternateGroupData;
import androidx.media3.container.Mp4Box;
import androidx.media3.container.Mp4Box.LeafBox;
import androidx.media3.container.Mp4LocationData;
@ -380,21 +381,38 @@ public final class BoxParser {
}
}
}
return stsdData.format == null
? null
: new Track(
tkhdData.id,
trackType,
mdhdData.timescale,
movieTimescale,
durationUs,
mdhdData.mediaDurationUs,
stsdData.format,
stsdData.requiredSampleTransformation,
stsdData.trackEncryptionBoxes,
stsdData.nalUnitLengthFieldLength,
editListDurations,
editListMediaTimes);
if (stsdData.format == null) {
return null;
}
Format format;
if (tkhdData.alternateGroup != 0) {
Mp4AlternateGroupData alternateGroupEntry =
new Mp4AlternateGroupData(tkhdData.alternateGroup);
format =
stsdData
.format
.buildUpon()
.setMetadata(
stsdData.format.metadata != null
? stsdData.format.metadata.copyWithAppendedEntries(alternateGroupEntry)
: new Metadata(alternateGroupEntry))
.build();
} else {
format = stsdData.format;
}
return new Track(
tkhdData.id,
trackType,
mdhdData.timescale,
movieTimescale,
durationUs,
mdhdData.mediaDurationUs,
format,
stsdData.requiredSampleTransformation,
stsdData.trackEncryptionBoxes,
stsdData.nalUnitLengthFieldLength,
editListDurations,
editListMediaTimes);
}
/**
@ -913,7 +931,9 @@ public final class BoxParser {
}
}
tkhd.skipBytes(16);
tkhd.skipBytes(10);
int alternateGroup = tkhd.readUnsignedShort();
tkhd.skipBytes(4);
int a00 = tkhd.readInt();
int a01 = tkhd.readInt();
tkhd.skipBytes(4);
@ -933,7 +953,7 @@ public final class BoxParser {
rotationDegrees = 0;
}
return new TkhdData(trackId, duration, rotationDegrees);
return new TkhdData(trackId, duration, alternateGroup, rotationDegrees);
}
/**
@ -2543,11 +2563,13 @@ public final class BoxParser {
private final int id;
private final long duration;
private final int alternateGroup;
private final int rotationDegrees;
public TkhdData(int id, long duration, int rotationDegrees) {
public TkhdData(int id, long duration, int alternateGroup, int rotationDegrees) {
this.id = id;
this.duration = duration;
this.alternateGroup = alternateGroup;
this.rotationDegrees = rotationDegrees;
}
}

View File

@ -84,13 +84,22 @@ import com.google.common.collect.ImmutableList;
private MetadataUtil() {}
/** Updates a {@link Format.Builder} to include metadata from the provided sources. */
/**
* Updates a {@link Format.Builder} to include metadata from the provided sources.
*
* @param trackType The {@link C.TrackType} of the track.
* @param mdtaMetadata The {@link Metadata} from the {@code mdta} box if present, otherwise null.
* @param formatBuilder A {@link Format.Builder} to append the metadata too.
* @param existingMetadata The {@link Format#metadata} from {@code formatBuilder}.
* @param additionalMetadata Additional metadata to append.
*/
public static void setFormatMetadata(
int trackType,
@C.TrackType int trackType,
@Nullable Metadata mdtaMetadata,
Format.Builder formatBuilder,
@Nullable Metadata existingMetadata,
@NullableType Metadata... additionalMetadata) {
Metadata formatMetadata = new Metadata();
Metadata formatMetadata = existingMetadata != null ? existingMetadata : new Metadata();
if (mdtaMetadata != null) {
for (int i = 0; i < mdtaMetadata.length(); i++) {

View File

@ -775,6 +775,7 @@ public final class Mp4Extractor implements Extractor, SeekMap {
track.type,
mdtaMetadata,
formatBuilder,
track.format.metadata,
slowMotionMetadataEntries.isEmpty() ? null : new Metadata(slowMotionMetadataEntries),
udtaMetadata,
mvhdMetadata);

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], Mp4Timestamp: creation time=3790610215, modification time=3790610215, timescale=30000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -162,7 +162,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
metadata = entries=[Mp4AlternateGroup: 1, TSSE: description=null: values=[Lavf56.1.0], xyz: latitude=40.68, longitude=-74.5, Mp4Timestamp: creation time=3547558895, modification time=3547558895, timescale=1000]
initializationData:
data = length 2, hash 5F7
sample 0:

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 96000
flags = 1

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 192000
flags = 1

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 256000
flags = 536870913

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 96000
flags = 1

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 192000
flags = 1

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 256000
flags = 536870913

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -20,7 +20,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3664419241, modification time=3664419241, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 96000
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 192000
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 256000
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 96000
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 192000
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 256000
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -19,6 +19,7 @@ track 0:
channelCount = 6
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3661132875, modification time=3661132875, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 240000
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 480000
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 720000
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 240000
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 480000
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 720000
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 2
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 426666
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 426666
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 426666
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 426666
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -18,7 +18,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
metadata = entries=[Mp4AlternateGroup: 2, Mp4Timestamp: creation time=3785281997, modification time=3785281997, timescale=600]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 426666
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 426666
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 426666
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 426666
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -17,6 +17,7 @@ track 0:
channelCount = 21
sampleRate = 48000
language = und
metadata = entries=[Mp4AlternateGroup: 2]
sample 0:
time = 0
flags = 1

View File

@ -153,6 +153,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -153,6 +153,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -153,6 +153,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -153,6 +153,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -161,6 +161,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -161,6 +161,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -161,6 +161,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -161,6 +161,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -161,6 +161,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -161,6 +161,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -161,6 +161,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

View File

@ -161,6 +161,7 @@ track 1:
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[Mp4AlternateGroup: 1]
initializationData:
data = length 5, hash 2B7623A
sample 0:

Some files were not shown because too many files have changed in this diff Show More