diff --git a/library/core/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoder.java b/library/core/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoder.java
index 2ddbfb4708..2bd54367e1 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoder.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoder.java
@@ -61,15 +61,11 @@ public final class EventMessageEncoder {
writeUnsignedInt(dataOutputStream, duration);
writeUnsignedInt(dataOutputStream, eventMessage.id);
dataOutputStream.write(eventMessage.messageData);
+ dataOutputStream.flush();
return byteArrayOutputStream.toByteArray();
} catch (IOException e) {
+ // Should never happen.
throw new RuntimeException(e);
- } finally {
- try {
- dataOutputStream.close();
- } catch (IOException ignored) {
- // ignored
- }
}
}
diff --git a/library/core/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java b/library/core/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java
index f7f0c63300..1ce0ccb93d 100644
--- a/library/core/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java
+++ b/library/core/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java
@@ -19,7 +19,6 @@ import static com.google.common.truth.Truth.assertThat;
import com.google.android.exoplayer2.metadata.Metadata;
import com.google.android.exoplayer2.metadata.MetadataInputBuffer;
-import java.io.IOException;
import java.nio.ByteBuffer;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -56,63 +55,4 @@ public final class EventMessageDecoderTest {
assertThat(eventMessage.messageData).isEqualTo(new byte[]{0, 1, 2, 3, 4});
}
- @Test
- public void testEncodeEventStream() throws IOException {
- EventMessage eventMessage = new EventMessage("urn:test", "123", 3000, 1000403,
- new byte[] {0, 1, 2, 3, 4});
- byte[] expectedEmsgBody = new byte[] {
- 117, 114, 110, 58, 116, 101, 115, 116, 0, // scheme_id_uri = "urn:test"
- 49, 50, 51, 0, // value = "123"
- 0, 0, -69, -128, // timescale = 48000
- 0, 0, -69, -128, // presentation_time_delta = 48
- 0, 2, 50, -128, // event_duration = 144000
- 0, 15, 67, -45, // id = 1000403
- 0, 1, 2, 3, 4}; // message_data = {0, 1, 2, 3, 4}
- byte[] encodedByteArray = new EventMessageEncoder().encode(eventMessage, 48000, 1000000);
- assertThat(encodedByteArray).isEqualTo(expectedEmsgBody);
- }
-
- @Test
- public void testEncodeDecodeEventStream() throws IOException {
- EventMessage expectedEmsg = new EventMessage("urn:test", "123", 3000, 1000403,
- new byte[] {0, 1, 2, 3, 4});
- byte[] encodedByteArray = new EventMessageEncoder().encode(expectedEmsg, 48000, 1);
- MetadataInputBuffer buffer = new MetadataInputBuffer();
- buffer.data = ByteBuffer.allocate(encodedByteArray.length).put(encodedByteArray);
-
- EventMessageDecoder decoder = new EventMessageDecoder();
- Metadata metadata = decoder.decode(buffer);
- assertThat(metadata.length()).isEqualTo(1);
- assertThat(metadata.get(0)).isEqualTo(expectedEmsg);
- }
-
- @Test
- public void testEncodeEventStreamMultipleTimesWorkingCorrectly() throws IOException {
- EventMessage eventMessage = new EventMessage("urn:test", "123", 3000, 1000403,
- new byte[] {0, 1, 2, 3, 4});
- byte[] expectedEmsgBody = new byte[] {
- 117, 114, 110, 58, 116, 101, 115, 116, 0, // scheme_id_uri = "urn:test"
- 49, 50, 51, 0, // value = "123"
- 0, 0, -69, -128, // timescale = 48000
- 0, 0, -69, -128, // presentation_time_delta = 48
- 0, 2, 50, -128, // event_duration = 144000
- 0, 15, 67, -45, // id = 1000403
- 0, 1, 2, 3, 4}; // message_data = {0, 1, 2, 3, 4}
- EventMessage eventMessage1 = new EventMessage("urn:test", "123", 3000, 1000402,
- new byte[] {4, 3, 2, 1, 0});
- byte[] expectedEmsgBody1 = new byte[] {
- 117, 114, 110, 58, 116, 101, 115, 116, 0, // scheme_id_uri = "urn:test"
- 49, 50, 51, 0, // value = "123"
- 0, 0, -69, -128, // timescale = 48000
- 0, 0, -69, -128, // presentation_time_delta = 48
- 0, 2, 50, -128, // event_duration = 144000
- 0, 15, 67, -46, // id = 1000402
- 4, 3, 2, 1, 0}; // message_data = {4, 3, 2, 1, 0}
- EventMessageEncoder eventMessageEncoder = new EventMessageEncoder();
- byte[] encodedByteArray = eventMessageEncoder.encode(eventMessage, 48000, 1000000);
- assertThat(encodedByteArray).isEqualTo(expectedEmsgBody);
- byte[] encodedByteArray1 = eventMessageEncoder.encode(eventMessage1, 48000, 1000000);
- assertThat(encodedByteArray1).isEqualTo(expectedEmsgBody1);
- }
-
}
diff --git a/library/core/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java b/library/core/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java
new file mode 100644
index 0000000000..f526fc3451
--- /dev/null
+++ b/library/core/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2017 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.metadata.emsg;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.android.exoplayer2.metadata.Metadata;
+import com.google.android.exoplayer2.metadata.MetadataInputBuffer;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+/**
+ * Unit test for {@link EventMessageEncoder}.
+ */
+@RunWith(RobolectricTestRunner.class)
+@Config(sdk = Config.TARGET_SDK, manifest = Config.NONE)
+public final class EventMessageEncoderTest {
+
+ @Test
+ public void testEncodeEventStream() throws IOException {
+ EventMessage eventMessage = new EventMessage("urn:test", "123", 3000, 1000403,
+ new byte[] {0, 1, 2, 3, 4});
+ byte[] expectedEmsgBody = new byte[] {
+ 117, 114, 110, 58, 116, 101, 115, 116, 0, // scheme_id_uri = "urn:test"
+ 49, 50, 51, 0, // value = "123"
+ 0, 0, -69, -128, // timescale = 48000
+ 0, 0, -69, -128, // presentation_time_delta = 48
+ 0, 2, 50, -128, // event_duration = 144000
+ 0, 15, 67, -45, // id = 1000403
+ 0, 1, 2, 3, 4}; // message_data = {0, 1, 2, 3, 4}
+ byte[] encodedByteArray = new EventMessageEncoder().encode(eventMessage, 48000, 1000000);
+ assertThat(encodedByteArray).isEqualTo(expectedEmsgBody);
+ }
+
+ @Test
+ public void testEncodeDecodeEventStream() throws IOException {
+ EventMessage expectedEmsg = new EventMessage("urn:test", "123", 3000, 1000403,
+ new byte[] {0, 1, 2, 3, 4});
+ byte[] encodedByteArray = new EventMessageEncoder().encode(expectedEmsg, 48000, 1);
+ MetadataInputBuffer buffer = new MetadataInputBuffer();
+ buffer.data = ByteBuffer.allocate(encodedByteArray.length).put(encodedByteArray);
+
+ EventMessageDecoder decoder = new EventMessageDecoder();
+ Metadata metadata = decoder.decode(buffer);
+ assertThat(metadata.length()).isEqualTo(1);
+ assertThat(metadata.get(0)).isEqualTo(expectedEmsg);
+ }
+
+ @Test
+ public void testEncodeEventStreamMultipleTimesWorkingCorrectly() throws IOException {
+ EventMessage eventMessage = new EventMessage("urn:test", "123", 3000, 1000403,
+ new byte[] {0, 1, 2, 3, 4});
+ byte[] expectedEmsgBody = new byte[] {
+ 117, 114, 110, 58, 116, 101, 115, 116, 0, // scheme_id_uri = "urn:test"
+ 49, 50, 51, 0, // value = "123"
+ 0, 0, -69, -128, // timescale = 48000
+ 0, 0, -69, -128, // presentation_time_delta = 48
+ 0, 2, 50, -128, // event_duration = 144000
+ 0, 15, 67, -45, // id = 1000403
+ 0, 1, 2, 3, 4}; // message_data = {0, 1, 2, 3, 4}
+ EventMessage eventMessage1 = new EventMessage("urn:test", "123", 3000, 1000402,
+ new byte[] {4, 3, 2, 1, 0});
+ byte[] expectedEmsgBody1 = new byte[] {
+ 117, 114, 110, 58, 116, 101, 115, 116, 0, // scheme_id_uri = "urn:test"
+ 49, 50, 51, 0, // value = "123"
+ 0, 0, -69, -128, // timescale = 48000
+ 0, 0, -69, -128, // presentation_time_delta = 48
+ 0, 2, 50, -128, // event_duration = 144000
+ 0, 15, 67, -46, // id = 1000402
+ 4, 3, 2, 1, 0}; // message_data = {4, 3, 2, 1, 0}
+ EventMessageEncoder eventMessageEncoder = new EventMessageEncoder();
+ byte[] encodedByteArray = eventMessageEncoder.encode(eventMessage, 48000, 1000000);
+ assertThat(encodedByteArray).isEqualTo(expectedEmsgBody);
+ byte[] encodedByteArray1 = eventMessageEncoder.encode(eventMessage1, 48000, 1000000);
+ assertThat(encodedByteArray1).isEqualTo(expectedEmsgBody1);
+ }
+
+}
diff --git a/library/dash/src/androidTest/assets/sample_mpd_4_event_stream b/library/dash/src/androidTest/assets/sample_mpd_4_event_stream
index 4352205d3f..cf96541ca0 100644
--- a/library/dash/src/androidTest/assets/sample_mpd_4_event_stream
+++ b/library/dash/src/androidTest/assets/sample_mpd_4_event_stream
@@ -27,33 +27,19 @@
-
-
- http://redirector.googlevideo.com/videoplayback/id/BktsoMO3OMs.0/itag/140/source/yt_live_broadcast/ratebypass/yes/cmbypass/yes/mime/audio%2Fmp4/live/1/gir/yes/noclen/1/signature/B5137EA0CC278C07DD056D204E863CC81EDEB39E.1AD5D242EBC94922EDA7165353A89A5E08A4103A/key/dg_test0/mpd_version/5/ip/0.0.0.0/ipbits/0/expire/1476490914/sparams/ip,ipbits,expire,id,itag,source,ratebypass,cmbypass,mime,live,gir,noclen/
+ http://www.dummy.url/
- http://redirector.googlevideo.com/videoplayback/id/BktsoMO3OMs.0/itag/133/source/yt_live_broadcast/ratebypass/yes/cmbypass/yes/mime/video%2Fmp4/live/1/gir/yes/noclen/1/signature/90154AE9C5C9D9D519CBF2E43AB0A1778375992D.40E2E855ADFB38FA7E95E168FEEEA6796B080BD7/key/dg_test0/mpd_version/5/ip/0.0.0.0/ipbits/0/expire/1476490914/sparams/ip,ipbits,expire,id,itag,source,ratebypass,cmbypass,mime,live,gir,noclen/
-
-
- http://redirector.googlevideo.com/videoplayback/id/BktsoMO3OMs.0/itag/134/source/yt_live_broadcast/ratebypass/yes/cmbypass/yes/mime/video%2Fmp4/live/1/gir/yes/noclen/1/signature/5C094AEFDCEB1A4D2F3C05F8BD095C336EF0E1C3.7AE6B9951B0237AAE6F031927AACAC4974BAFFAA/key/dg_test0/mpd_version/5/ip/0.0.0.0/ipbits/0/expire/1476490914/sparams/ip,ipbits,expire,id,itag,source,ratebypass,cmbypass,mime,live,gir,noclen/
-
-
- http://redirector.googlevideo.com/videoplayback/id/BktsoMO3OMs.0/itag/135/source/yt_live_broadcast/ratebypass/yes/cmbypass/yes/mime/video%2Fmp4/live/1/gir/yes/noclen/1/signature/1F7660CA4E5B4AE4D60E18795680E34CDD2EF3C9.800B0A1D5F490DE142CCF4C88C64FD21D42129/key/dg_test0/mpd_version/5/ip/0.0.0.0/ipbits/0/expire/1476490914/sparams/ip,ipbits,expire,id,itag,source,ratebypass,cmbypass,mime,live,gir,noclen/
-
-
- http://redirector.googlevideo.com/videoplayback/id/BktsoMO3OMs.0/itag/160/source/yt_live_broadcast/ratebypass/yes/cmbypass/yes/mime/video%2Fmp4/live/1/gir/yes/noclen/1/signature/94EB61673784DF0C4237A1A866F2E171C8A64ADB.AEC00AA06C2278FEA8702FB62693B70D8977F46C/key/dg_test0/mpd_version/5/ip/0.0.0.0/ipbits/0/expire/1476490914/sparams/ip,ipbits,expire,id,itag,source,ratebypass,cmbypass,mime,live,gir,noclen/
-
-
- http://redirector.googlevideo.com/videoplayback/id/BktsoMO3OMs.0/itag/136/source/yt_live_broadcast/ratebypass/yes/cmbypass/yes/mime/video%2Fmp4/live/1/gir/yes/noclen/1/signature/6D8C34FC30A1F1A4F700B61180D1C4CCF6274844.29EBCB4A837DE626C52C66CF650519E61C2FF0BF/key/dg_test0/mpd_version/5/ip/0.0.0.0/ipbits/0/expire/1476490914/sparams/ip,ipbits,expire,id,itag,source,ratebypass,cmbypass,mime,live,gir,noclen/
+ http://www.dummy.url/
diff --git a/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java
index b24a7da878..37dc6a748e 100644
--- a/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java
+++ b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java
@@ -79,6 +79,7 @@ public class DashManifestParserTest extends InstrumentationTestCase {
Period period = mpd.getPeriod(0);
assertEquals(3, period.eventStreams.size());
+
// assert text-only event stream
EventStream eventStream1 = period.eventStreams.get(0);
assertEquals(1, eventStream1.events.length);