Allow creating fragmented MP4 file via demo app

PiperOrigin-RevId: 594435072
This commit is contained in:
sheenachhabra 2023-12-29 04:36:14 -08:00 committed by Copybara-Service
parent 27ae6d974e
commit 846ace16aa
4 changed files with 29 additions and 2 deletions

View File

@ -78,6 +78,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
public static final String ENABLE_FALLBACK = "enable_fallback"; public static final String ENABLE_FALLBACK = "enable_fallback";
public static final String ENABLE_DEBUG_PREVIEW = "enable_debug_preview"; public static final String ENABLE_DEBUG_PREVIEW = "enable_debug_preview";
public static final String ABORT_SLOW_EXPORT = "abort_slow_export"; public static final String ABORT_SLOW_EXPORT = "abort_slow_export";
public static final String PRODUCE_FRAGMENTED_MP4 = "produce_fragmented_mp4";
public static final String HDR_MODE = "hdr_mode"; public static final String HDR_MODE = "hdr_mode";
public static final String AUDIO_EFFECTS_SELECTIONS = "audio_effects_selections"; public static final String AUDIO_EFFECTS_SELECTIONS = "audio_effects_selections";
public static final String VIDEO_EFFECTS_SELECTIONS = "video_effects_selections"; public static final String VIDEO_EFFECTS_SELECTIONS = "video_effects_selections";
@ -230,6 +231,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
private @MonotonicNonNull CheckBox enableFallbackCheckBox; private @MonotonicNonNull CheckBox enableFallbackCheckBox;
private @MonotonicNonNull CheckBox enableDebugPreviewCheckBox; private @MonotonicNonNull CheckBox enableDebugPreviewCheckBox;
private @MonotonicNonNull CheckBox abortSlowExportCheckBox; private @MonotonicNonNull CheckBox abortSlowExportCheckBox;
private @MonotonicNonNull CheckBox produceFragmentedMp4CheckBox;
private @MonotonicNonNull Spinner hdrModeSpinner; private @MonotonicNonNull Spinner hdrModeSpinner;
private @MonotonicNonNull Button selectAudioEffectsButton; private @MonotonicNonNull Button selectAudioEffectsButton;
private @MonotonicNonNull Button selectVideoEffectsButton; private @MonotonicNonNull Button selectVideoEffectsButton;
@ -345,6 +347,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
enableDebugPreviewCheckBox = findViewById(R.id.enable_debug_preview_checkbox); enableDebugPreviewCheckBox = findViewById(R.id.enable_debug_preview_checkbox);
abortSlowExportCheckBox = findViewById(R.id.abort_slow_export_checkbox); abortSlowExportCheckBox = findViewById(R.id.abort_slow_export_checkbox);
produceFragmentedMp4CheckBox = findViewById(R.id.produce_fragmented_mp4_checkbox);
ArrayAdapter<String> hdrModeAdapter = ArrayAdapter<String> hdrModeAdapter =
new ArrayAdapter<>(/* context= */ this, R.layout.spinner_item); new ArrayAdapter<>(/* context= */ this, R.layout.spinner_item);
@ -409,6 +412,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
"enableFallbackCheckBox", "enableFallbackCheckBox",
"enableDebugPreviewCheckBox", "enableDebugPreviewCheckBox",
"abortSlowExportCheckBox", "abortSlowExportCheckBox",
"produceFragmentedMp4CheckBox",
"hdrModeSpinner", "hdrModeSpinner",
"audioEffectsSelections", "audioEffectsSelections",
"videoEffectsSelections" "videoEffectsSelections"
@ -450,6 +454,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
bundle.putBoolean(ENABLE_FALLBACK, enableFallbackCheckBox.isChecked()); bundle.putBoolean(ENABLE_FALLBACK, enableFallbackCheckBox.isChecked());
bundle.putBoolean(ENABLE_DEBUG_PREVIEW, enableDebugPreviewCheckBox.isChecked()); bundle.putBoolean(ENABLE_DEBUG_PREVIEW, enableDebugPreviewCheckBox.isChecked());
bundle.putBoolean(ABORT_SLOW_EXPORT, abortSlowExportCheckBox.isChecked()); bundle.putBoolean(ABORT_SLOW_EXPORT, abortSlowExportCheckBox.isChecked());
bundle.putBoolean(PRODUCE_FRAGMENTED_MP4, produceFragmentedMp4CheckBox.isChecked());
String selectedhdrMode = String.valueOf(hdrModeSpinner.getSelectedItem()); String selectedhdrMode = String.valueOf(hdrModeSpinner.getSelectedItem());
bundle.putInt(HDR_MODE, checkNotNull(HDR_MODE_DESCRIPTIONS.get(selectedhdrMode))); bundle.putInt(HDR_MODE, checkNotNull(HDR_MODE_DESCRIPTIONS.get(selectedhdrMode)));
bundle.putBooleanArray(AUDIO_EFFECTS_SELECTIONS, audioEffectsSelections); bundle.putBooleanArray(AUDIO_EFFECTS_SELECTIONS, audioEffectsSelections);

View File

@ -87,6 +87,8 @@ import androidx.media3.transformer.EditedMediaItemSequence;
import androidx.media3.transformer.Effects; import androidx.media3.transformer.Effects;
import androidx.media3.transformer.ExportException; import androidx.media3.transformer.ExportException;
import androidx.media3.transformer.ExportResult; import androidx.media3.transformer.ExportResult;
import androidx.media3.transformer.InAppMuxer;
import androidx.media3.transformer.Muxer;
import androidx.media3.transformer.ProgressHolder; import androidx.media3.transformer.ProgressHolder;
import androidx.media3.transformer.Transformer; import androidx.media3.transformer.Transformer;
import androidx.media3.ui.AspectRatioFrameLayout; import androidx.media3.ui.AspectRatioFrameLayout;
@ -320,11 +322,21 @@ public final class TransformerActivity extends AppCompatActivity {
.setEnableFallback(bundle.getBoolean(ConfigurationActivity.ENABLE_FALLBACK)) .setEnableFallback(bundle.getBoolean(ConfigurationActivity.ENABLE_FALLBACK))
.build()); .build());
long maxDelayBetweenSamplesMs = DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS;
if (!bundle.getBoolean(ConfigurationActivity.ABORT_SLOW_EXPORT)) { if (!bundle.getBoolean(ConfigurationActivity.ABORT_SLOW_EXPORT)) {
transformerBuilder.setMuxerFactory( maxDelayBetweenSamplesMs = C.TIME_UNSET;
new DefaultMuxer.Factory(/* maxDelayBetweenSamplesMs= */ C.TIME_UNSET));
} }
Muxer.Factory muxerFactory = new DefaultMuxer.Factory(maxDelayBetweenSamplesMs);
if (bundle.getBoolean(ConfigurationActivity.PRODUCE_FRAGMENTED_MP4)) {
muxerFactory =
new InAppMuxer.Factory.Builder()
.setMaxDelayBetweenSamplesMs(maxDelayBetweenSamplesMs)
.setFragmentedMp4Enabled(true)
.build();
}
transformerBuilder.setMuxerFactory(muxerFactory);
if (bundle.getBoolean(ConfigurationActivity.ENABLE_DEBUG_PREVIEW)) { if (bundle.getBoolean(ConfigurationActivity.ENABLE_DEBUG_PREVIEW)) {
transformerBuilder.setDebugViewProvider(new DemoDebugViewProvider()); transformerBuilder.setDebugViewProvider(new DemoDebugViewProvider());
} }

View File

@ -215,6 +215,15 @@
android:id="@+id/abort_slow_export_checkbox" android:id="@+id/abort_slow_export_checkbox"
android:layout_gravity="end"/> android:layout_gravity="end"/>
</TableRow> </TableRow>
<TableRow
android:layout_weight="1">
<TextView
android:layout_gravity="center_vertical"
android:text="@string/produce_fragmented_mp4" />
<CheckBox
android:id="@+id/produce_fragmented_mp4_checkbox"
android:layout_gravity="end"/>
</TableRow>
<TableRow <TableRow
android:layout_weight="1" android:layout_weight="1"
android:gravity="center_vertical" > android:gravity="center_vertical" >

View File

@ -30,6 +30,7 @@
<string name="enable_fallback" translatable="false">Enable fallback</string> <string name="enable_fallback" translatable="false">Enable fallback</string>
<string name="enable_debug_preview" translatable="false">Enable debug preview</string> <string name="enable_debug_preview" translatable="false">Enable debug preview</string>
<string name="abort_slow_export" translatable="false">Abort slow export</string> <string name="abort_slow_export" translatable="false">Abort slow export</string>
<string name="produce_fragmented_mp4" translatable="false">Produce fragmented MP4</string>
<string name="trim" translatable="false">Trim</string> <string name="trim" translatable="false">Trim</string>
<string name="hdr_mode" translatable="false">HDR mode</string> <string name="hdr_mode" translatable="false">HDR mode</string>
<string name="select_audio_effects" translatable="false">Add audio effects</string> <string name="select_audio_effects" translatable="false">Add audio effects</string>