mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
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
This commit is contained in:
parent
a56af3d0e0
commit
4b3cbfd64f
@ -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);
|
||||
|
||||
|
@ -0,0 +1,93 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
||||
|
375
testdata/src/test/assets/playbackdumps/webvtt/typical.dump
vendored
Normal file
375
testdata/src/test/assets/playbackdumps/webvtt/typical.dump
vendored
Normal file
@ -0,0 +1,375 @@
|
||||
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 = []
|
Loading…
x
Reference in New Issue
Block a user