Commit 4b3cbfd6 by christosts Committed by Oliver Woodman

End to end test for WebVTT sideloaded subtitles

Enable subtitle output in the PlaybackOutput and disable the text
renderer in the MkvPlaybackTest. Add WebvttPlaybackTest to test the
output of side-loaded WebVTT subtitles.

PiperOrigin-RevId: 402526588
parent a56af3d0
......@@ -19,6 +19,7 @@ import android.content.Context;
import android.graphics.SurfaceTexture;
import android.view.Surface;
import androidx.test.core.app.ApplicationProvider;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Player;
......@@ -29,6 +30,7 @@ import com.google.android.exoplayer2.robolectric.TestPlayerRunHelper;
import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
import com.google.android.exoplayer2.testutil.DumpFileAsserts;
import com.google.android.exoplayer2.testutil.FakeClock;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.common.collect.ImmutableList;
import org.junit.Rule;
import org.junit.Test;
......@@ -65,6 +67,19 @@ public final class MkvPlaybackTest {
new ExoPlayer.Builder(applicationContext, capturingRenderersFactory)
.setClock(new FakeClock(/* isAutoAdvancing= */ true))
.build();
// TODO(internal b/174661563): Remove the for-loop below to enable the text renderer when
// subtitle output is not flaky.
for (int textRendererIndex = 0;
textRendererIndex < player.getRendererCount();
textRendererIndex++) {
if (player.getRendererType(textRendererIndex) == C.TRACK_TYPE_TEXT) {
player.setTrackSelectionParameters(
new DefaultTrackSelector.ParametersBuilder(applicationContext)
.setRendererDisabled(textRendererIndex, /* disabled= */ true)
.build());
break;
}
}
player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1)));
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
......
/*
* Copyright 2021 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.e2etest;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.net.Uri;
import android.view.Surface;
import androidx.test.core.app.ApplicationProvider;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.robolectric.PlaybackOutput;
import com.google.android.exoplayer2.robolectric.ShadowMediaCodecConfig;
import com.google.android.exoplayer2.robolectric.TestPlayerRunHelper;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaSourceFactory;
import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
import com.google.android.exoplayer2.testutil.DumpFileAsserts;
import com.google.android.exoplayer2.testutil.FakeClock;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.common.collect.ImmutableList;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.ParameterizedRobolectricTestRunner;
/** End-to-end tests using side-loaded WebVTT subtitles. */
@RunWith(ParameterizedRobolectricTestRunner.class)
public class WebvttPlaybackTest {
@ParameterizedRobolectricTestRunner.Parameters(name = "{0}")
public static ImmutableList<String> mediaSamples() {
return ImmutableList.of("typical");
}
@ParameterizedRobolectricTestRunner.Parameter public String inputFile;
@Rule
public ShadowMediaCodecConfig mediaCodecConfig =
ShadowMediaCodecConfig.forAllSupportedMimeTypes();
@Test
public void test() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory capturingRenderersFactory =
new CapturingRenderersFactory(applicationContext);
MediaSourceFactory mediaSourceFactory =
new DefaultMediaSourceFactory(applicationContext)
.experimentalUseProgressiveMediaSourceForSubtitles(true);
ExoPlayer player =
new ExoPlayer.Builder(applicationContext, capturingRenderersFactory)
.setClock(new FakeClock(/* isAutoAdvancing= */ true))
.setMediaSourceFactory(mediaSourceFactory)
.build();
player.setVideoSurface(new Surface(new SurfaceTexture(/* texName= */ 1)));
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
MediaItem mediaItem =
new MediaItem.Builder()
.setUri("asset:///media/mp4/preroll-5s.mp4")
.setSubtitleConfigurations(
ImmutableList.of(
new MediaItem.SubtitleConfiguration.Builder(
Uri.parse("asset:///media/webvtt/" + inputFile))
.setMimeType(MimeTypes.TEXT_VTT)
.setLanguage("en")
.setSelectionFlags(C.SELECTION_FLAG_DEFAULT)
.build()))
.build();
player.setMediaItem(mediaItem);
player.prepare();
player.play();
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
DumpFileAsserts.assertOutput(
applicationContext, playbackOutput, "playbackdumps/webvtt/" + inputFile + ".dump");
}
}
......@@ -33,6 +33,7 @@ import com.google.android.exoplayer2.testutil.CapturingRenderersFactory;
import com.google.android.exoplayer2.testutil.DumpFileAsserts;
import com.google.android.exoplayer2.testutil.FakeClock;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -47,6 +48,8 @@ public final class DashPlaybackTest {
// https://github.com/google/ExoPlayer/issues/7985
@Test
@Ignore(
"Disabled until subtitles are reliably asserted in robolectric tests [internal b/174661563].")
public void webvttInMp4() throws Exception {
Context applicationContext = ApplicationProvider.getApplicationContext();
CapturingRenderersFactory capturingRenderersFactory =
......
......@@ -17,8 +17,8 @@ package com.google.android.exoplayer2.robolectric;
import android.graphics.Bitmap;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.metadata.Metadata;
import com.google.android.exoplayer2.metadata.dvbsi.AppInfoTable;
import com.google.android.exoplayer2.metadata.emsg.EventMessage;
......@@ -55,8 +55,7 @@ public final class PlaybackOutput implements Dumper.Dumpable {
private final List<Metadata> metadatas;
private final List<List<Cue>> subtitles;
private PlaybackOutput(
SimpleExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
private PlaybackOutput(ExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
this.capturingRenderersFactory = capturingRenderersFactory;
metadatas = Collections.synchronizedList(new ArrayList<>());
......@@ -73,7 +72,7 @@ public final class PlaybackOutput implements Dumper.Dumpable {
@Override
public void onCues(List<Cue> cues) {
// TODO(internal b/174661563): Output subtitle data when it's not flaky.
subtitles.add(cues);
}
});
}
......@@ -85,13 +84,13 @@ public final class PlaybackOutput implements Dumper.Dumpable {
* <p>Must be called <b>before</b> playback to ensure metadata and text output is captured
* correctly.
*
* @param player The {@link SimpleExoPlayer} to capture metadata and text output from.
* @param player The {@link ExoPlayer} to capture metadata and text output from.
* @param capturingRenderersFactory The {@link CapturingRenderersFactory} to capture audio and
* video output from.
* @return A new instance that can be used to dump the playback output.
*/
public static PlaybackOutput register(
SimpleExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
ExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
return new PlaybackOutput(player, capturingRenderersFactory);
}
......
MediaCodecAdapter (exotest.audio.aac):
buffers.length = 218
buffers[0] = length 21, hash D57A2CCC
buffers[1] = length 4, hash EE9DF
buffers[2] = length 4, hash EE9DF
buffers[3] = length 4, hash EE9DF
buffers[4] = length 4, hash EE9DF
buffers[5] = length 4, hash EE9DF
buffers[6] = length 4, hash EE9DF
buffers[7] = length 4, hash EE9DF
buffers[8] = length 4, hash EE9DF
buffers[9] = length 4, hash EE9DF
buffers[10] = length 4, hash EE9DF
buffers[11] = length 4, hash EE9DF
buffers[12] = length 4, hash EE9DF
buffers[13] = length 4, hash EE9DF
buffers[14] = length 4, hash EE9DF
buffers[15] = length 4, hash EE9DF
buffers[16] = length 4, hash EE9DF
buffers[17] = length 4, hash EE9DF
buffers[18] = length 4, hash EE9DF
buffers[19] = length 4, hash EE9DF
buffers[20] = length 4, hash EE9DF
buffers[21] = length 4, hash EE9DF
buffers[22] = length 4, hash EE9DF
buffers[23] = length 4, hash EE9DF
buffers[24] = length 4, hash EE9DF
buffers[25] = length 4, hash EE9DF
buffers[26] = length 4, hash EE9DF
buffers[27] = length 4, hash EE9DF
buffers[28] = length 4, hash EE9DF
buffers[29] = length 4, hash EE9DF
buffers[30] = length 4, hash EE9DF
buffers[31] = length 4, hash EE9DF
buffers[32] = length 4, hash EE9DF
buffers[33] = length 4, hash EE9DF
buffers[34] = length 4, hash EE9DF
buffers[35] = length 4, hash EE9DF
buffers[36] = length 4, hash EE9DF
buffers[37] = length 4, hash EE9DF
buffers[38] = length 4, hash EE9DF
buffers[39] = length 4, hash EE9DF
buffers[40] = length 4, hash EE9DF
buffers[41] = length 4, hash EE9DF
buffers[42] = length 4, hash EE9DF
buffers[43] = length 4, hash EE9DF
buffers[44] = length 4, hash EE9DF
buffers[45] = length 4, hash EE9DF
buffers[46] = length 4, hash EE9DF
buffers[47] = length 4, hash EE9DF
buffers[48] = length 4, hash EE9DF
buffers[49] = length 4, hash EE9DF
buffers[50] = length 4, hash EE9DF
buffers[51] = length 4, hash EE9DF
buffers[52] = length 4, hash EE9DF
buffers[53] = length 4, hash EE9DF
buffers[54] = length 4, hash EE9DF
buffers[55] = length 4, hash EE9DF
buffers[56] = length 4, hash EE9DF
buffers[57] = length 4, hash EE9DF
buffers[58] = length 4, hash EE9DF
buffers[59] = length 4, hash EE9DF
buffers[60] = length 4, hash EE9DF
buffers[61] = length 4, hash EE9DF
buffers[62] = length 4, hash EE9DF
buffers[63] = length 4, hash EE9DF
buffers[64] = length 4, hash EE9DF
buffers[65] = length 4, hash EE9DF
buffers[66] = length 4, hash EE9DF
buffers[67] = length 4, hash EE9DF
buffers[68] = length 4, hash EE9DF
buffers[69] = length 4, hash EE9DF
buffers[70] = length 4, hash EE9DF
buffers[71] = length 4, hash EE9DF
buffers[72] = length 4, hash EE9DF
buffers[73] = length 4, hash EE9DF
buffers[74] = length 4, hash EE9DF
buffers[75] = length 4, hash EE9DF
buffers[76] = length 4, hash EE9DF
buffers[77] = length 4, hash EE9DF
buffers[78] = length 4, hash EE9DF
buffers[79] = length 4, hash EE9DF
buffers[80] = length 4, hash EE9DF
buffers[81] = length 4, hash EE9DF
buffers[82] = length 4, hash EE9DF
buffers[83] = length 4, hash EE9DF
buffers[84] = length 4, hash EE9DF
buffers[85] = length 4, hash EE9DF
buffers[86] = length 4, hash EE9DF
buffers[87] = length 4, hash EE9DF
buffers[88] = length 4, hash EE9DF
buffers[89] = length 4, hash EE9DF
buffers[90] = length 4, hash EE9DF
buffers[91] = length 4, hash EE9DF
buffers[92] = length 4, hash EE9DF
buffers[93] = length 4, hash EE9DF
buffers[94] = length 4, hash EE9DF
buffers[95] = length 4, hash EE9DF
buffers[96] = length 4, hash EE9DF
buffers[97] = length 4, hash EE9DF
buffers[98] = length 4, hash EE9DF
buffers[99] = length 4, hash EE9DF
buffers[100] = length 4, hash EE9DF
buffers[101] = length 4, hash EE9DF
buffers[102] = length 4, hash EE9DF
buffers[103] = length 4, hash EE9DF
buffers[104] = length 4, hash EE9DF
buffers[105] = length 4, hash EE9DF
buffers[106] = length 4, hash EE9DF
buffers[107] = length 4, hash EE9DF
buffers[108] = length 4, hash EE9DF
buffers[109] = length 4, hash EE9DF
buffers[110] = length 4, hash EE9DF
buffers[111] = length 4, hash EE9DF
buffers[112] = length 4, hash EE9DF
buffers[113] = length 4, hash EE9DF
buffers[114] = length 4, hash EE9DF
buffers[115] = length 4, hash EE9DF
buffers[116] = length 4, hash EE9DF
buffers[117] = length 4, hash EE9DF
buffers[118] = length 4, hash EE9DF
buffers[119] = length 4, hash EE9DF
buffers[120] = length 4, hash EE9DF
buffers[121] = length 4, hash EE9DF
buffers[122] = length 4, hash EE9DF
buffers[123] = length 4, hash EE9DF
buffers[124] = length 4, hash EE9DF
buffers[125] = length 4, hash EE9DF
buffers[126] = length 4, hash EE9DF
buffers[127] = length 4, hash EE9DF
buffers[128] = length 4, hash EE9DF
buffers[129] = length 4, hash EE9DF
buffers[130] = length 4, hash EE9DF
buffers[131] = length 4, hash EE9DF
buffers[132] = length 4, hash EE9DF
buffers[133] = length 4, hash EE9DF
buffers[134] = length 4, hash EE9DF
buffers[135] = length 4, hash EE9DF
buffers[136] = length 4, hash EE9DF
buffers[137] = length 4, hash EE9DF
buffers[138] = length 4, hash EE9DF
buffers[139] = length 4, hash EE9DF
buffers[140] = length 4, hash EE9DF
buffers[141] = length 4, hash EE9DF
buffers[142] = length 4, hash EE9DF
buffers[143] = length 4, hash EE9DF
buffers[144] = length 4, hash EE9DF
buffers[145] = length 4, hash EE9DF
buffers[146] = length 4, hash EE9DF
buffers[147] = length 4, hash EE9DF
buffers[148] = length 4, hash EE9DF
buffers[149] = length 4, hash EE9DF
buffers[150] = length 4, hash EE9DF
buffers[151] = length 4, hash EE9DF
buffers[152] = length 4, hash EE9DF
buffers[153] = length 4, hash EE9DF
buffers[154] = length 4, hash EE9DF
buffers[155] = length 4, hash EE9DF
buffers[156] = length 4, hash EE9DF
buffers[157] = length 4, hash EE9DF
buffers[158] = length 4, hash EE9DF
buffers[159] = length 4, hash EE9DF
buffers[160] = length 4, hash EE9DF
buffers[161] = length 4, hash EE9DF
buffers[162] = length 4, hash EE9DF
buffers[163] = length 4, hash EE9DF
buffers[164] = length 4, hash EE9DF
buffers[165] = length 4, hash EE9DF
buffers[166] = length 4, hash EE9DF
buffers[167] = length 4, hash EE9DF
buffers[168] = length 4, hash EE9DF
buffers[169] = length 4, hash EE9DF
buffers[170] = length 4, hash EE9DF
buffers[171] = length 4, hash EE9DF
buffers[172] = length 4, hash EE9DF
buffers[173] = length 4, hash EE9DF
buffers[174] = length 4, hash EE9DF
buffers[175] = length 4, hash EE9DF
buffers[176] = length 4, hash EE9DF
buffers[177] = length 4, hash EE9DF
buffers[178] = length 4, hash EE9DF
buffers[179] = length 4, hash EE9DF
buffers[180] = length 4, hash EE9DF
buffers[181] = length 4, hash EE9DF
buffers[182] = length 4, hash EE9DF
buffers[183] = length 4, hash EE9DF
buffers[184] = length 4, hash EE9DF
buffers[185] = length 4, hash EE9DF
buffers[186] = length 4, hash EE9DF
buffers[187] = length 4, hash EE9DF
buffers[188] = length 4, hash EE9DF
buffers[189] = length 4, hash EE9DF
buffers[190] = length 4, hash EE9DF
buffers[191] = length 4, hash EE9DF
buffers[192] = length 4, hash EE9DF
buffers[193] = length 4, hash EE9DF
buffers[194] = length 4, hash EE9DF
buffers[195] = length 4, hash EE9DF
buffers[196] = length 4, hash EE9DF
buffers[197] = length 4, hash EE9DF
buffers[198] = length 4, hash EE9DF
buffers[199] = length 4, hash EE9DF
buffers[200] = length 4, hash EE9DF
buffers[201] = length 4, hash EE9DF
buffers[202] = length 4, hash EE9DF
buffers[203] = length 4, hash EE9DF
buffers[204] = length 4, hash EE9DF
buffers[205] = length 4, hash EE9DF
buffers[206] = length 4, hash EE9DF
buffers[207] = length 4, hash EE9DF
buffers[208] = length 4, hash EE9DF
buffers[209] = length 4, hash EE9DF
buffers[210] = length 4, hash EE9DF
buffers[211] = length 4, hash EE9DF
buffers[212] = length 4, hash EE9DF
buffers[213] = length 4, hash EE9DF
buffers[214] = length 4, hash EE9DF
buffers[215] = length 4, hash EE9DF
buffers[216] = length 4, hash EE9DF
buffers[217] = length 0, hash 1
MediaCodecAdapter (exotest.video.avc):
buffers.length = 126
buffers[0] = length 5245, hash C090A41E
buffers[1] = length 63, hash 5141C80D
buffers[2] = length 22, hash A32E59A1
buffers[3] = length 20, hash A09DEAB8
buffers[4] = length 18, hash B64DA059
buffers[5] = length 28, hash FC8EF2BB
buffers[6] = length 22, hash BF8A4A9F
buffers[7] = length 18, hash D163DF61
buffers[8] = length 18, hash FD82E95
buffers[9] = length 28, hash 44A16E72
buffers[10] = length 22, hash 31C06057
buffers[11] = length 18, hash DC93CC9D
buffers[12] = length 18, hash 1B081BD1
buffers[13] = length 28, hash 2700AF
buffers[14] = length 22, hash 6D292D94
buffers[15] = length 18, hash D646C05A
buffers[16] = length 18, hash 14BB0F8E
buffers[17] = length 28, hash 5DE2C2B
buffers[18] = length 22, hash 57E81CD0
buffers[19] = length 18, hash E176AD96
buffers[20] = length 18, hash 1FEAFCCA
buffers[21] = length 28, hash C163BE68
buffers[22] = length 22, hash B0C92D0B
buffers[23] = length 18, hash 3B013BD2
buffers[24] = length 18, hash 79758B06
buffers[25] = length 28, hash F72EB1A3
buffers[26] = length 22, hash 9B881C48
buffers[27] = length 18, hash 4631290E
buffers[28] = length 18, hash 84A57842
buffers[29] = length 28, hash E1FCF000
buffers[30] = length 22, hash 359D2D82
buffers[31] = length 18, hash 62DE0FC9
buffers[32] = length 18, hash A1525EFD
buffers[33] = length 28, hash 5350E8FA
buffers[34] = length 22, hash EE2060DF
buffers[35] = length 18, hash 77D95125
buffers[36] = length 18, hash B64DA059
buffers[37] = length 28, hash ED67B37
buffers[38] = length 22, hash 4701711B
buffers[39] = length 18, hash D163DF61
buffers[40] = length 18, hash FD82E95
buffers[41] = length 28, hash 44A16E72
buffers[42] = length 22, hash 31C06057
buffers[43] = length 18, hash DC93CC9D
buffers[44] = length 18, hash 1B081BD1
buffers[45] = length 28, hash 2700AF
buffers[46] = length 22, hash 6D292D94
buffers[47] = length 18, hash D646C05A
buffers[48] = length 18, hash 14BB0F8E
buffers[49] = length 28, hash 5DE2C2B
buffers[50] = length 22, hash 57E81CD0
buffers[51] = length 18, hash E176AD96
buffers[52] = length 18, hash 1FEAFCCA
buffers[53] = length 28, hash C163BE68
buffers[54] = length 22, hash B0C92D0B
buffers[55] = length 18, hash 3B013BD2
buffers[56] = length 18, hash 79758B06
buffers[57] = length 28, hash F72EB1A3
buffers[58] = length 22, hash 9B881C48
buffers[59] = length 18, hash 4631290E
buffers[60] = length 18, hash 84A57842
buffers[61] = length 28, hash E1FCF000
buffers[62] = length 22, hash 359D2D82
buffers[63] = length 18, hash 62DE0FC9
buffers[64] = length 18, hash A1525EFD
buffers[65] = length 28, hash 5350E8FA
buffers[66] = length 22, hash EE2060DF
buffers[67] = length 18, hash 77D95125
buffers[68] = length 18, hash B64DA059
buffers[69] = length 28, hash ED67B37
buffers[70] = length 22, hash 4701711B
buffers[71] = length 18, hash D163DF61
buffers[72] = length 18, hash FD82E95
buffers[73] = length 28, hash 44A16E72
buffers[74] = length 22, hash 31C06057
buffers[75] = length 18, hash DC93CC9D
buffers[76] = length 18, hash 1B081BD1
buffers[77] = length 28, hash 2700AF
buffers[78] = length 22, hash 6D292D94
buffers[79] = length 18, hash D646C05A
buffers[80] = length 18, hash 14BB0F8E
buffers[81] = length 28, hash 5DE2C2B
buffers[82] = length 22, hash 57E81CD0
buffers[83] = length 18, hash E176AD96
buffers[84] = length 18, hash 1FEAFCCA
buffers[85] = length 28, hash C163BE68
buffers[86] = length 22, hash B0C92D0B
buffers[87] = length 18, hash 3B013BD2
buffers[88] = length 18, hash 79758B06
buffers[89] = length 28, hash F72EB1A3
buffers[90] = length 22, hash 9B881C48
buffers[91] = length 18, hash 4631290E
buffers[92] = length 18, hash 84A57842
buffers[93] = length 33, hash AF5CF49E
buffers[94] = length 22, hash 359D2D82
buffers[95] = length 18, hash 62DE0FC9
buffers[96] = length 18, hash A1525EFD
buffers[97] = length 33, hash F4C6DE46
buffers[98] = length 22, hash EE2060DF
buffers[99] = length 18, hash 77D95125
buffers[100] = length 18, hash B64DA059
buffers[101] = length 28, hash ED67B37
buffers[102] = length 22, hash 4701711B
buffers[103] = length 18, hash D163DF61
buffers[104] = length 18, hash FD82E95
buffers[105] = length 28, hash 44A16E72
buffers[106] = length 22, hash 31C06057
buffers[107] = length 18, hash DC93CC9D
buffers[108] = length 18, hash 1B081BD1
buffers[109] = length 28, hash 2700AF
buffers[110] = length 22, hash 6D292D94
buffers[111] = length 18, hash D646C05A
buffers[112] = length 18, hash 14BB0F8E
buffers[113] = length 27, hash 5292D9E
buffers[114] = length 22, hash 57E81CD0
buffers[115] = length 18, hash E176AD96
buffers[116] = length 18, hash 1FEAFCCA
buffers[117] = length 26, hash B0CAA4C9
buffers[118] = length 22, hash B0C92D0B
buffers[119] = length 18, hash 3B013BD2
buffers[120] = length 18, hash 79758B06
buffers[121] = length 26, hash C63A1445
buffers[122] = length 22, hash 9B881C48
buffers[123] = length 18, hash 4631290E
buffers[124] = length 18, hash 84A57842
buffers[125] = length 0, hash 1
TextOutput:
Subtitle[0]:
Cues = []
Subtitle[1]:
Cue[0]:
text = This is the first subtitle.
textAlignment = ALIGN_CENTER
line = -1.0
lineType = 1
lineAnchor = 0
position = 0.5
positionAnchor = 1
size = 1.0
Subtitle[2]:
Cues = []
Subtitle[3]:
Cue[0]:
text = This is the second subtitle.
textAlignment = ALIGN_CENTER
line = -1.0
lineType = 1
lineAnchor = 0
position = 0.5
positionAnchor = 1
size = 1.0
Subtitle[4]:
Cues = []
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