Remove deprecated setOutputMimeType

This is to prepare Muxer to become public

PiperOrigin-RevId: 481893842
This commit is contained in:
kimvde 2022-10-18 12:26:36 +00:00 committed by Marc Baechinger
parent b6bd35860c
commit bd9181e6ba
19 changed files with 50 additions and 365 deletions

View File

@ -34,25 +34,18 @@ public final class DefaultMuxer implements Muxer {
}
@Override
public Muxer create(String path, String outputMimeType) throws IOException {
return new DefaultMuxer(muxerFactory.create(path, outputMimeType));
public Muxer create(String path) throws IOException {
return new DefaultMuxer(muxerFactory.create(path));
}
@Override
public Muxer create(ParcelFileDescriptor parcelFileDescriptor, String outputMimeType)
throws IOException {
return new DefaultMuxer(muxerFactory.create(parcelFileDescriptor, outputMimeType));
public Muxer create(ParcelFileDescriptor parcelFileDescriptor) throws IOException {
return new DefaultMuxer(muxerFactory.create(parcelFileDescriptor));
}
@Override
public boolean supportsOutputMimeType(String mimeType) {
return muxerFactory.supportsOutputMimeType(mimeType);
}
@Override
public ImmutableList<String> getSupportedSampleMimeTypes(
@C.TrackType int trackType, String containerMimeType) {
return muxerFactory.getSupportedSampleMimeTypes(trackType, containerMimeType);
public ImmutableList<String> getSupportedSampleMimeTypes(@C.TrackType int trackType) {
return muxerFactory.getSupportedSampleMimeTypes(trackType);
}
}

View File

@ -33,7 +33,6 @@ import com.google.android.exoplayer2.util.MediaFormatUtil;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.ByteBuffer;
@ -42,70 +41,42 @@ import java.nio.ByteBuffer;
/* package */ final class FrameworkMuxer implements Muxer {
// MediaMuxer supported sample formats are documented in MediaMuxer.addTrack(MediaFormat).
private static final ImmutableMap<String, ImmutableList<String>>
SUPPORTED_CONTAINER_TO_VIDEO_SAMPLE_MIME_TYPES =
ImmutableMap.of(
MimeTypes.VIDEO_MP4,
Util.SDK_INT >= 24
? ImmutableList.of(
MimeTypes.VIDEO_H263,
MimeTypes.VIDEO_H264,
MimeTypes.VIDEO_MP4V,
MimeTypes.VIDEO_H265)
: ImmutableList.of(
MimeTypes.VIDEO_H263, MimeTypes.VIDEO_H264, MimeTypes.VIDEO_MP4V),
MimeTypes.VIDEO_WEBM,
Util.SDK_INT >= 24
? ImmutableList.of(MimeTypes.VIDEO_VP8, MimeTypes.VIDEO_VP9)
: ImmutableList.of(MimeTypes.VIDEO_VP8));
private static final ImmutableList<String> SUPPORTED_VIDEO_SAMPLE_MIME_TYPES =
Util.SDK_INT >= 24
? ImmutableList.of(
MimeTypes.VIDEO_H263,
MimeTypes.VIDEO_H264,
MimeTypes.VIDEO_MP4V,
MimeTypes.VIDEO_H265)
: ImmutableList.of(MimeTypes.VIDEO_H263, MimeTypes.VIDEO_H264, MimeTypes.VIDEO_MP4V);
private static final ImmutableMap<String, ImmutableList<String>>
SUPPORTED_CONTAINER_TO_AUDIO_SAMPLE_MIME_TYPES =
ImmutableMap.of(
MimeTypes.VIDEO_MP4,
ImmutableList.of(MimeTypes.AUDIO_AAC, MimeTypes.AUDIO_AMR_NB, MimeTypes.AUDIO_AMR_WB),
MimeTypes.VIDEO_WEBM,
ImmutableList.of(MimeTypes.AUDIO_VORBIS));
private static final ImmutableList<String> SUPPORTED_AUDIO_SAMPLE_MIME_TYPES =
ImmutableList.of(MimeTypes.AUDIO_AAC, MimeTypes.AUDIO_AMR_NB, MimeTypes.AUDIO_AMR_WB);
/** {@link Muxer.Factory} for {@link FrameworkMuxer}. */
public static final class Factory implements Muxer.Factory {
@Override
public FrameworkMuxer create(String path, String outputMimeType) throws IOException {
MediaMuxer mediaMuxer = new MediaMuxer(path, mimeTypeToMuxerOutputFormat(outputMimeType));
public FrameworkMuxer create(String path) throws IOException {
MediaMuxer mediaMuxer = new MediaMuxer(path, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
return new FrameworkMuxer(mediaMuxer);
}
@RequiresApi(26)
@Override
public FrameworkMuxer create(ParcelFileDescriptor parcelFileDescriptor, String outputMimeType)
throws IOException {
public FrameworkMuxer create(ParcelFileDescriptor parcelFileDescriptor) throws IOException {
MediaMuxer mediaMuxer =
new MediaMuxer(
parcelFileDescriptor.getFileDescriptor(),
mimeTypeToMuxerOutputFormat(outputMimeType));
MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
return new FrameworkMuxer(mediaMuxer);
}
@Override
public boolean supportsOutputMimeType(String mimeType) {
try {
mimeTypeToMuxerOutputFormat(mimeType);
} catch (IllegalArgumentException e) {
return false;
}
return true;
}
@Override
public ImmutableList<String> getSupportedSampleMimeTypes(
@C.TrackType int trackType, String containerMimeType) {
// MediaMuxer supported sample formats are documented in MediaMuxer.addTrack(MediaFormat).
public ImmutableList<String> getSupportedSampleMimeTypes(@C.TrackType int trackType) {
if (trackType == C.TRACK_TYPE_VIDEO) {
return SUPPORTED_CONTAINER_TO_VIDEO_SAMPLE_MIME_TYPES.getOrDefault(
containerMimeType, ImmutableList.of());
return SUPPORTED_VIDEO_SAMPLE_MIME_TYPES;
} else if (trackType == C.TRACK_TYPE_AUDIO) {
return SUPPORTED_CONTAINER_TO_AUDIO_SAMPLE_MIME_TYPES.getOrDefault(
containerMimeType, ImmutableList.of());
return SUPPORTED_AUDIO_SAMPLE_MIME_TYPES;
}
return ImmutableList.of();
}
@ -212,25 +183,6 @@ import java.nio.ByteBuffer;
}
}
/**
* Converts a {@linkplain MimeTypes MIME type} into a {@linkplain MediaMuxer.OutputFormat
* MediaMuxer output format}.
*
* @param mimeType The {@linkplain MimeTypes MIME type} to convert.
* @return The corresponding {@linkplain MediaMuxer.OutputFormat MediaMuxer output format}.
* @throws IllegalArgumentException If the {@linkplain MimeTypes MIME type} is not supported as
* output format.
*/
private static int mimeTypeToMuxerOutputFormat(String mimeType) {
if (mimeType.equals(MimeTypes.VIDEO_MP4)) {
return MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4;
} else if (SDK_INT >= 21 && mimeType.equals(MimeTypes.VIDEO_WEBM)) {
return MediaMuxer.OutputFormat.MUXER_OUTPUT_WEBM;
} else {
throw new IllegalArgumentException("Unsupported output MIME type: " + mimeType);
}
}
// Accesses MediaMuxer state via reflection to ensure that muxer resources can be released even
// if stopping fails.
@SuppressLint("PrivateApi")

View File

@ -26,13 +26,12 @@ import java.nio.ByteBuffer;
/**
* Abstracts media muxing operations.
*
* <p>Query whether {@linkplain Factory#supportsOutputMimeType(String) container MIME type} and
* {@linkplain Factory#getSupportedSampleMimeTypes(int, String)} sample MIME types} are supported
* and {@linkplain #addTrack(Format) add all tracks}, then {@linkplain #writeSampleData(int,
* ByteBuffer, boolean, long) write sample data} to mux samples. Once any sample data has been
* written, it is not possible to add tracks. After writing all sample data, {@linkplain
* #release(boolean) release} the instance to finish writing to the output and return any resources
* to the system.
* <p>Query whether {@linkplain Factory#getSupportedSampleMimeTypes(int)} sample MIME types} are
* supported and {@linkplain #addTrack(Format) add all tracks}, then {@linkplain
* #writeSampleData(int, ByteBuffer, boolean, long) write sample data} to mux samples. Once any
* sample data has been written, it is not possible to add tracks. After writing all sample data,
* {@linkplain #release(boolean) release} the instance to finish writing to the output and return
* any resources to the system.
*/
/* package */ interface Muxer {
@ -55,11 +54,10 @@ import java.nio.ByteBuffer;
* Returns a new muxer writing to a file.
*
* @param path The path to the output file.
* @param outputMimeType The container {@linkplain MimeTypes MIME type} of the output file.
* @throws IllegalArgumentException If the path is invalid or the MIME type is not supported.
* @throws IllegalArgumentException If the path is invalid.
* @throws IOException If an error occurs opening the output file for writing.
*/
Muxer create(String path, String outputMimeType) throws IOException;
Muxer create(String path) throws IOException;
/**
* Returns a new muxer writing to a file descriptor.
@ -68,25 +66,16 @@ import java.nio.ByteBuffer;
* output. The file referenced by this ParcelFileDescriptor should not be used before the
* muxer is released. It is the responsibility of the caller to close the
* ParcelFileDescriptor. This can be done after this method returns.
* @param outputMimeType The {@linkplain MimeTypes MIME type} of the output.
* @throws IllegalArgumentException If the file descriptor is invalid or the MIME type is not
* supported.
* @throws IllegalArgumentException If the file descriptor is invalid.
* @throws IOException If an error occurs opening the output file descriptor for writing.
*/
Muxer create(ParcelFileDescriptor parcelFileDescriptor, String outputMimeType)
throws IOException;
/**
* Returns whether the {@linkplain MimeTypes MIME type} provided is a supported output format.
*/
boolean supportsOutputMimeType(String mimeType);
Muxer create(ParcelFileDescriptor parcelFileDescriptor) throws IOException;
/**
* Returns the supported sample {@linkplain MimeTypes MIME types} for the given {@link
* C.TrackType} and container {@linkplain MimeTypes MIME type}.
* C.TrackType}.
*/
ImmutableList<String> getSupportedSampleMimeTypes(
@C.TrackType int trackType, String containerMimeType);
ImmutableList<String> getSupportedSampleMimeTypes(@C.TrackType int trackType);
}
/**

View File

@ -51,7 +51,6 @@ import java.nio.ByteBuffer;
private final SparseIntArray trackTypeToSampleCount;
private final SparseLongArray trackTypeToTimeUs;
private final SparseLongArray trackTypeToBytesWritten;
private final String containerMimeType;
private int trackCount;
private int trackFormatCount;
@ -59,10 +58,9 @@ import java.nio.ByteBuffer;
private @C.TrackType int previousTrackType;
private long minTrackTimeUs;
public MuxerWrapper(Muxer muxer, Muxer.Factory muxerFactory, String containerMimeType) {
public MuxerWrapper(Muxer muxer, Muxer.Factory muxerFactory) {
this.muxer = muxer;
this.muxerFactory = muxerFactory;
this.containerMimeType = containerMimeType;
trackTypeToIndex = new SparseIntArray();
trackTypeToSampleCount = new SparseIntArray();
@ -97,7 +95,7 @@ import java.nio.ByteBuffer;
* track type}.
*/
public ImmutableList<String> getSupportedSampleMimeTypes(@C.TrackType int trackType) {
return muxerFactory.getSupportedSampleMimeTypes(trackType, containerMimeType);
return muxerFactory.getSupportedSampleMimeTypes(trackType);
}
/**

View File

@ -106,7 +106,6 @@ public final class Transformer {
private Muxer.Factory muxerFactory;
private boolean removeAudio;
private boolean removeVideo;
private String containerMimeType;
private TransformationRequest transformationRequest;
private ImmutableList<Effect> videoEffects;
private FrameProcessor.Factory frameProcessorFactory;
@ -131,7 +130,6 @@ public final class Transformer {
encoderFactory = new DefaultEncoderFactory.Builder(this.context).build();
decoderFactory = new DefaultDecoderFactory(this.context);
debugViewProvider = DebugViewProvider.NONE;
containerMimeType = MimeTypes.VIDEO_MP4;
transformationRequest = new TransformationRequest.Builder().build();
videoEffects = ImmutableList.of();
frameProcessorFactory = new GlEffectsFrameProcessor.Factory();
@ -144,7 +142,6 @@ public final class Transformer {
this.muxerFactory = transformer.muxerFactory;
this.removeAudio = transformer.removeAudio;
this.removeVideo = transformer.removeVideo;
this.containerMimeType = transformer.containerMimeType;
this.transformationRequest = transformer.transformationRequest;
this.videoEffects = transformer.videoEffects;
this.frameProcessorFactory = transformer.frameProcessorFactory;
@ -276,17 +273,6 @@ public final class Transformer {
return this;
}
/**
* @deprecated This feature will be removed in a following release and the MIME type of the
* output will always be MP4.
*/
@CanIgnoreReturnValue
@Deprecated
public Builder setOutputMimeType(String outputMimeType) {
this.containerMimeType = outputMimeType;
return this;
}
/**
* @deprecated Use {@link #addListener(Listener)}, {@link #removeListener(Listener)} or {@link
* #removeAllListeners()} instead.
@ -454,9 +440,6 @@ public final class Transformer {
}
mediaSourceFactory = new DefaultMediaSourceFactory(context, defaultExtractorsFactory);
}
checkState(
muxerFactory.supportsOutputMimeType(containerMimeType),
"Unsupported container MIME type: " + containerMimeType);
if (transformationRequest.audioMimeType != null) {
checkSampleMimeType(transformationRequest.audioMimeType);
}
@ -469,7 +452,6 @@ public final class Transformer {
muxerFactory,
removeAudio,
removeVideo,
containerMimeType,
transformationRequest,
videoEffects,
frameProcessorFactory,
@ -484,13 +466,9 @@ public final class Transformer {
private void checkSampleMimeType(String sampleMimeType) {
checkState(
muxerFactory
.getSupportedSampleMimeTypes(
MimeTypes.getTrackType(sampleMimeType), containerMimeType)
.getSupportedSampleMimeTypes(MimeTypes.getTrackType(sampleMimeType))
.contains(sampleMimeType),
"Unsupported sample MIME type "
+ sampleMimeType
+ " for container MIME type "
+ containerMimeType);
"Unsupported sample MIME type " + sampleMimeType);
}
}
@ -582,7 +560,6 @@ public final class Transformer {
private final Muxer.Factory muxerFactory;
private final boolean removeAudio;
private final boolean removeVideo;
private final String containerMimeType;
private final TransformationRequest transformationRequest;
private final ImmutableList<Effect> videoEffects;
private final FrameProcessor.Factory frameProcessorFactory;
@ -606,7 +583,6 @@ public final class Transformer {
Muxer.Factory muxerFactory,
boolean removeAudio,
boolean removeVideo,
String containerMimeType,
TransformationRequest transformationRequest,
ImmutableList<Effect> videoEffects,
FrameProcessor.Factory frameProcessorFactory,
@ -622,7 +598,6 @@ public final class Transformer {
this.muxerFactory = muxerFactory;
this.removeAudio = removeAudio;
this.removeVideo = removeVideo;
this.containerMimeType = containerMimeType;
this.transformationRequest = transformationRequest;
this.videoEffects = videoEffects;
this.frameProcessorFactory = frameProcessorFactory;
@ -711,7 +686,7 @@ public final class Transformer {
}
this.outputPath = path;
this.outputParcelFileDescriptor = null;
startTransformation(mediaItem, muxerFactory.create(path, containerMimeType));
startTransformation(mediaItem, muxerFactory.create(path));
}
/**
@ -741,7 +716,7 @@ public final class Transformer {
throws IOException {
this.outputParcelFileDescriptor = parcelFileDescriptor;
this.outputPath = null;
startTransformation(mediaItem, muxerFactory.create(parcelFileDescriptor, containerMimeType));
startTransformation(mediaItem, muxerFactory.create(parcelFileDescriptor));
}
private void startTransformation(MediaItem mediaItem, Muxer muxer) {
@ -749,7 +724,7 @@ public final class Transformer {
if (player != null) {
throw new IllegalStateException("There is already a transformation in progress.");
}
MuxerWrapper muxerWrapper = new MuxerWrapper(muxer, muxerFactory, containerMimeType);
MuxerWrapper muxerWrapper = new MuxerWrapper(muxer, muxerFactory);
this.muxerWrapper = muxerWrapper;
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
trackSelector.setParameters(

View File

@ -35,11 +35,9 @@ public final class TestMuxer implements Muxer, Dumper.Dumpable {
private final List<Dumper.Dumpable> dumpables;
/** Creates a new test muxer. */
public TestMuxer(String path, String outputMimeType, Muxer.Factory muxerFactory)
throws IOException {
muxer = muxerFactory.create(path, outputMimeType);
public TestMuxer(String path, Muxer.Factory muxerFactory) throws IOException {
muxer = muxerFactory.create(path);
dumpables = new ArrayList<>();
dumpables.add(dumper -> dumper.add("containerMimeType", outputMimeType));
}
// Muxer implementation.

View File

@ -29,15 +29,6 @@ import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class TransformerBuilderTest {
@Test
public void setOutputMimeType_unsupportedMimeType_throws() {
Context context = ApplicationProvider.getApplicationContext();
assertThrows(
IllegalStateException.class,
() -> new Transformer.Builder(context).setOutputMimeType(MimeTypes.VIDEO_UNKNOWN).build());
}
@Test
public void build_removeAudioAndVideo_throws() {
Context context = ApplicationProvider.getApplicationContext();

View File

@ -863,28 +863,20 @@ public final class TransformerEndToEndTest {
}
@Override
public Muxer create(String path, String outputMimeType) throws IOException {
testMuxer = new TestMuxer(path, outputMimeType, defaultMuxerFactory);
public Muxer create(String path) throws IOException {
testMuxer = new TestMuxer(path, defaultMuxerFactory);
return testMuxer;
}
@Override
public Muxer create(ParcelFileDescriptor parcelFileDescriptor, String outputMimeType)
throws IOException {
testMuxer =
new TestMuxer("FD:" + parcelFileDescriptor.getFd(), outputMimeType, defaultMuxerFactory);
public Muxer create(ParcelFileDescriptor parcelFileDescriptor) throws IOException {
testMuxer = new TestMuxer("FD:" + parcelFileDescriptor.getFd(), defaultMuxerFactory);
return testMuxer;
}
@Override
public boolean supportsOutputMimeType(String mimeType) {
return true;
}
@Override
public ImmutableList<String> getSupportedSampleMimeTypes(
@C.TrackType int trackType, String containerMimeType) {
return defaultMuxerFactory.getSupportedSampleMimeTypes(trackType, containerMimeType);
public ImmutableList<String> getSupportedSampleMimeTypes(@C.TrackType int trackType) {
return defaultMuxerFactory.getSupportedSampleMimeTypes(trackType);
}
}
}

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 1

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
sampleMimeType = audio/3gpp
maxInputSize = 61

View File

@ -1,193 +0,0 @@
containerMimeType = video/mp4
format 0:
id = 1
sampleMimeType = video/avc
codecs = avc1.640034
width = 1080
height = 720
selectionFlags = 1
language = und
initializationData:
data = length 30, hash F6F3D010
data = length 10, hash 7A0D0F2B
sample:
trackIndex = 0
dataHashCode = -252482306
size = 36477
isKeyFrame = true
presentationTimeUs = 67000
sample:
trackIndex = 0
dataHashCode = 67864034
size = 5341
isKeyFrame = false
presentationTimeUs = 134000
sample:
trackIndex = 0
dataHashCode = 897273234
size = 596
isKeyFrame = false
presentationTimeUs = 100000
sample:
trackIndex = 0
dataHashCode = -1549870586
size = 7704
isKeyFrame = false
presentationTimeUs = 267000
sample:
trackIndex = 0
dataHashCode = 672384813
size = 989
isKeyFrame = false
presentationTimeUs = 200000
sample:
trackIndex = 0
dataHashCode = -988996493
size = 721
isKeyFrame = false
presentationTimeUs = 167000
sample:
trackIndex = 0
dataHashCode = 1711151377
size = 519
isKeyFrame = false
presentationTimeUs = 234000
sample:
trackIndex = 0
dataHashCode = -506806036
size = 6160
isKeyFrame = false
presentationTimeUs = 400000
sample:
trackIndex = 0
dataHashCode = 1902167649
size = 953
isKeyFrame = false
presentationTimeUs = 334000
sample:
trackIndex = 0
dataHashCode = 2054873212
size = 620
isKeyFrame = false
presentationTimeUs = 300000
sample:
trackIndex = 0
dataHashCode = 1556608231
size = 405
isKeyFrame = false
presentationTimeUs = 367000
sample:
trackIndex = 0
dataHashCode = -1648978019
size = 4852
isKeyFrame = false
presentationTimeUs = 500000
sample:
trackIndex = 0
dataHashCode = -484808327
size = 547
isKeyFrame = false
presentationTimeUs = 467000
sample:
trackIndex = 0
dataHashCode = -20706048
size = 570
isKeyFrame = false
presentationTimeUs = 434000
sample:
trackIndex = 0
dataHashCode = 2085064574
size = 5525
isKeyFrame = false
presentationTimeUs = 634000
sample:
trackIndex = 0
dataHashCode = -637074022
size = 1082
isKeyFrame = false
presentationTimeUs = 567000
sample:
trackIndex = 0
dataHashCode = -1824027029
size = 807
isKeyFrame = false
presentationTimeUs = 534000
sample:
trackIndex = 0
dataHashCode = -1701945306
size = 744
isKeyFrame = false
presentationTimeUs = 600000
sample:
trackIndex = 0
dataHashCode = -952425536
size = 4732
isKeyFrame = false
presentationTimeUs = 767000
sample:
trackIndex = 0
dataHashCode = -1978031576
size = 1004
isKeyFrame = false
presentationTimeUs = 700000
sample:
trackIndex = 0
dataHashCode = -2128215508
size = 794
isKeyFrame = false
presentationTimeUs = 667000
sample:
trackIndex = 0
dataHashCode = -259850011
size = 645
isKeyFrame = false
presentationTimeUs = 734000
sample:
trackIndex = 0
dataHashCode = 1920983928
size = 2684
isKeyFrame = false
presentationTimeUs = 900000
sample:
trackIndex = 0
dataHashCode = 1100642337
size = 787
isKeyFrame = false
presentationTimeUs = 834000
sample:
trackIndex = 0
dataHashCode = 1544917830
size = 649
isKeyFrame = false
presentationTimeUs = 800000
sample:
trackIndex = 0
dataHashCode = -116205995
size = 509
isKeyFrame = false
presentationTimeUs = 867000
sample:
trackIndex = 0
dataHashCode = 696343585
size = 1226
isKeyFrame = false
presentationTimeUs = 1034000
sample:
trackIndex = 0
dataHashCode = -644371190
size = 898
isKeyFrame = false
presentationTimeUs = 967000
sample:
trackIndex = 0
dataHashCode = -1606273467
size = 476
isKeyFrame = false
presentationTimeUs = 934000
sample:
trackIndex = 0
dataHashCode = -571265861
size = 486
isKeyFrame = false
presentationTimeUs = 1000000
released = true

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 1

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
peakBitrate = 200000
id = 2

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
id = 1
sampleMimeType = video/avc

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
peakBitrate = 200000
id = 2

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
id = 1
sampleMimeType = video/avc

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 6

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 2

View File

@ -1,4 +1,3 @@
containerMimeType = video/mp4
format 0:
averageBitrate = 192181
peakBitrate = 192181