/
MediaMuxerTest.kt
80 lines (69 loc) · 2.36 KB
/
MediaMuxerTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.example.mediaextractor_mediamuxer_remux_example
import android.media.MediaCodec
import android.media.MediaExtractor
import android.media.MediaFormat
import android.media.MediaMuxer
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.After
import org.junit.Assert.assertThrows
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import java.nio.ByteBuffer
@RunWith(AndroidJUnit4::class)
class MediaMuxerTest {
private val inputFile = "/sdcard/Android/data/com.example.mediaextractor_mediamuxer_remux_example/cache/testfile.mp4"
private val outputFilePath = "/sdcard/Android/data/com.example.mediaextractor_mediamuxer_remux_example/cache/testoutput.mp4"
lateinit var muxer: MediaMuxer
lateinit var extractor: MediaExtractor
lateinit var format: MediaFormat
@Before
fun setup() {
extractor = MediaExtractor()
muxer = MediaMuxer(outputFilePath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4)
extractor.setDataSource(inputFile)
extractor.selectTrack(0)
format = extractor.getTrackFormat(0)
}
@After
fun teardown() {
muxer.release()
extractor.release()
}
@Test
fun throwsWhenCreateWithInvalidPath() {
val invalidPath = "/a/b/c/cache/invalid.mp4"
assertThrows(Exception::class.java) {
MediaMuxer(invalidPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4)
}
}
@Test
fun throwsWhenCreateWithInvalidOutputFormat() {
assertThrows(Exception::class.java) {
MediaMuxer(outputFilePath, 100)
}
}
@Test
fun startFailedIfNeverAddTrack() {
assertThrows(Exception::class.java) {
muxer.start()
}
}
@Test
fun canStartMuxer() {
muxer.addTrack(format)
muxer.start()
val inputMaxSize = format.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE)
val buffer = ByteBuffer.allocate(inputMaxSize)
for(i in 0.. 2){
val sampleSize = extractor.readSampleData(buffer, 0)
val bufferInfo = MediaCodec.BufferInfo()
bufferInfo.size = sampleSize
bufferInfo.offset = 0
bufferInfo.presentationTimeUs = extractor.sampleTime
bufferInfo.flags = extractor.sampleFlags
muxer.writeSampleData(0, buffer, bufferInfo)
}
muxer.stop()
}
}