Skip to content

Commit 354d3de

Browse files
authored
Merge pull request #311 from Titozzz/main
feat: move to isoparser 1.9.X
2 parents b002be1 + b690315 commit 354d3de

File tree

6 files changed

+49
-89
lines changed

6 files changed

+49
-89
lines changed

android/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,10 @@ dependencies {
111111
//noinspection GradleDynamicVersion
112112
implementation "com.facebook.react:react-native:+"
113113
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
114-
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
115114

116115
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"
117116
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
118-
implementation "com.googlecode.mp4parser:isoparser:1.0.6"
117+
implementation 'org.mp4parser:isoparser:1.9.56'
119118
implementation 'com.github.banketree:AndroidLame-kotlin:v0.0.1'
120119
implementation 'javazoom:jlayer:1.0.1'
121120
}

android/src/main/java/com/reactnativecompressor/Utils/Utils.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ import java.io.FileNotFoundException
1414
import java.io.IOException
1515
import java.net.HttpURLConnection
1616
import java.net.URL
17+
import java.nio.ByteBuffer
1718
import java.util.UUID
1819
import java.util.regex.Pattern
19-
import kotlin.Throwable
20+
2021

2122
object Utils {
2223
private const val TAG = "react-native-compessor"
@@ -328,4 +329,12 @@ object Utils {
328329
-1L
329330
}
330331
}
332+
333+
fun subBuffer(buf: ByteBuffer, start: Int, count: Int = buf.remaining() - start): ByteBuffer {
334+
val newBuf = buf.duplicate()
335+
val bytes = ByteArray(count)
336+
newBuf.position(start)
337+
newBuf[bytes, 0, bytes.size]
338+
return ByteBuffer.wrap(bytes)
339+
}
331340
}

android/src/main/java/com/reactnativecompressor/Video/VideoCompressor/videoHelpers/MP4Builder.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package com.reactnativecompressor.Video.VideoCompressor.video
22

33
import android.media.MediaCodec
44
import android.media.MediaFormat
5-
import com.coremedia.iso.boxes.*
6-
import com.googlecode.mp4parser.util.Matrix
5+
import org.mp4parser.Box
6+
import org.mp4parser.boxes.iso14496.part12.*
7+
8+
import org.mp4parser.support.Matrix
79
import java.io.FileOutputStream
810
import java.nio.ByteBuffer
911
import java.nio.channels.FileChannel
@@ -42,7 +44,7 @@ class MP4Builder {
4244
@Throws(Exception::class)
4345
private fun flushCurrentMdat() {
4446
val oldPosition = fc.position()
45-
fc.position(mdat.offset)
47+
fc.position(mdat.getOffset())
4648
mdat.getBox(fc)
4749
fc.position(oldPosition)
4850
mdat.setDataOffset(0)

android/src/main/java/com/reactnativecompressor/Video/VideoCompressor/videoHelpers/Mdat.kt

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.reactnativecompressor.Video.VideoCompressor.video
22

3-
import com.coremedia.iso.BoxParser
4-
import com.coremedia.iso.IsoFile
5-
import com.coremedia.iso.IsoTypeWriter
6-
import com.coremedia.iso.boxes.Box
7-
import com.coremedia.iso.boxes.Container
8-
import com.googlecode.mp4parser.DataSource
3+
import org.mp4parser.Box
4+
import org.mp4parser.BoxParser
5+
import org.mp4parser.Container
6+
import org.mp4parser.IsoFile
7+
import org.mp4parser.tools.IsoTypeWriter
8+
99
import java.nio.ByteBuffer
1010
import java.nio.channels.WritableByteChannel
1111

@@ -15,15 +15,15 @@ class Mdat : Box {
1515
private var contentSize = (1024 * 1024 * 1024).toLong()
1616
private var dataOffset: Long = 0
1717

18-
override fun getParent(): Container = parent
18+
fun getParent(): Container = parent
1919

20-
override fun setParent(parent: Container) {
20+
fun setParent(parent: Container) {
2121
this.parent = parent
2222
}
2323

2424
override fun getSize(): Long = 16 + contentSize
2525

26-
override fun getOffset(): Long = dataOffset
26+
fun getOffset(): Long = dataOffset
2727

2828
fun setDataOffset(offset: Long) {
2929
dataOffset = offset
@@ -63,12 +63,4 @@ class Mdat : Box {
6363
bb.rewind()
6464
writableByteChannel.write(bb)
6565
}
66-
67-
override fun parse(
68-
dataSource: DataSource?,
69-
header: ByteBuffer?,
70-
contentSize: Long,
71-
boxParser: BoxParser?
72-
) {
73-
}
7466
}

android/src/main/java/com/reactnativecompressor/Video/VideoCompressor/videoHelpers/Mp4Movie.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.reactnativecompressor.Video.VideoCompressor.video
22

33
import android.media.MediaCodec
44
import android.media.MediaFormat
5-
import com.googlecode.mp4parser.util.Matrix
5+
import org.mp4parser.support.Matrix
66
import java.io.File
77
import java.util.*
88

android/src/main/java/com/reactnativecompressor/Video/VideoCompressor/videoHelpers/Track.kt

Lines changed: 23 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ package com.reactnativecompressor.Video.VideoCompressor.video
33
import android.media.MediaCodec
44
import android.media.MediaCodecInfo
55
import android.media.MediaFormat
6-
import com.coremedia.iso.boxes.SampleDescriptionBox
7-
import com.coremedia.iso.boxes.sampleentry.AudioSampleEntry
8-
import com.coremedia.iso.boxes.sampleentry.VisualSampleEntry
9-
import com.googlecode.mp4parser.boxes.mp4.ESDescriptorBox
10-
import com.googlecode.mp4parser.boxes.mp4.objectdescriptors.AudioSpecificConfig
11-
import com.googlecode.mp4parser.boxes.mp4.objectdescriptors.DecoderConfigDescriptor
12-
import com.googlecode.mp4parser.boxes.mp4.objectdescriptors.ESDescriptor
13-
import com.googlecode.mp4parser.boxes.mp4.objectdescriptors.SLConfigDescriptor
14-
import com.mp4parser.iso14496.part15.AvcConfigurationBox
6+
import com.reactnativecompressor.Utils.Utils
7+
import org.mp4parser.boxes.iso14496.part1.objectdescriptors.AudioSpecificConfig
8+
import org.mp4parser.boxes.iso14496.part1.objectdescriptors.DecoderConfigDescriptor
9+
import org.mp4parser.boxes.iso14496.part1.objectdescriptors.ESDescriptor
10+
import org.mp4parser.boxes.iso14496.part1.objectdescriptors.SLConfigDescriptor
11+
import org.mp4parser.boxes.iso14496.part12.SampleDescriptionBox
12+
import org.mp4parser.boxes.iso14496.part14.ESDescriptorBox
13+
import org.mp4parser.boxes.iso14496.part15.AvcConfigurationBox
14+
import org.mp4parser.boxes.sampleentry.AudioSampleEntry
15+
import org.mp4parser.boxes.sampleentry.VisualSampleEntry
1516
import java.util.*
16-
import kotlin.reflect.jvm.isAccessible
1717

1818
class Track(id: Int, format: MediaFormat, audio: Boolean) {
1919

@@ -67,28 +67,10 @@ class Track(id: Int, format: MediaFormat, audio: Boolean) {
6767
VisualSampleEntry(VisualSampleEntry.TYPE3).setup(width, height)
6868

6969
val avcConfigurationBox = AvcConfigurationBox()
70-
if (format.getByteBuffer("csd-0") != null) {
71-
val spsArray = ArrayList<ByteArray>()
72-
val spsBuff = format.getByteBuffer("csd-0")
73-
spsBuff!!.position(4)
74-
75-
val spsBytes = ByteArray(spsBuff.remaining())
76-
spsBuff[spsBytes]
77-
spsArray.add(spsBytes)
78-
79-
val ppsArray = ArrayList<ByteArray>()
80-
val ppsBuff = format.getByteBuffer("csd-1")
81-
ppsBuff?.let {
82-
it.position(4)
83-
84-
val ppsBytes = ByteArray(it.remaining())
85-
it[ppsBytes]
86-
87-
ppsArray.add(ppsBytes)
88-
avcConfigurationBox.sequenceParameterSets = spsArray
89-
avcConfigurationBox.pictureParameterSets = ppsArray
90-
}
91-
}
70+
avcConfigurationBox.sequenceParameterSets =
71+
format.getByteBuffer("csd-0")?.let { listOf(Utils.subBuffer(it, 4)) }
72+
avcConfigurationBox.pictureParameterSets =
73+
format.getByteBuffer("csd-1")?.let { listOf(Utils.subBuffer(it, 4)) }
9274

9375
if (format.containsKey("level")) {
9476
when (format.getInteger("level")) {
@@ -188,39 +170,15 @@ class Track(id: Int, format: MediaFormat, audio: Boolean) {
188170

189171
val audioSpecificConfig = AudioSpecificConfig()
190172

191-
// Fix for com.googlecode.mp4parser:isoparser multiple version management
192-
// Updates based on
193-
// https://github.com/sannies/mp4parser/commit/9cf7f9185b294ac4fa1cd86be1915cd355d859eb#diff-5860894eeaba912c09de175e617d53d5beecebeadd2b64695ed736f9e598bf55
194-
// and
195-
// https://github.com/sannies/mp4parser/commit/b85f62274b56cc68d6c6e3dc2f9d4e23318e3341#diff-5860894eeaba912c09de175e617d53d5beecebeadd2b64695ed736f9e598bf55
196-
//
197-
val method = audioSpecificConfig::class.members.firstOrNull { it.name == "setOriginalAudioObjectType" }
198-
if (method != null) {
199-
// com.googlecode.mp4parser:isoparser is >= 1.1
200-
method.isAccessible = true
201-
method.call(audioSpecificConfig, 2)
202-
audioSpecificConfig.setSamplingFrequencyIndex(
203-
samplingFrequencyIndexMap[audioSampleEntry.sampleRate.toInt()]!!
204-
)
205-
audioSpecificConfig.setChannelConfiguration(audioSampleEntry.channelCount)
206-
decoderConfigDescriptor.audioSpecificInfo = audioSpecificConfig
207-
descriptor.decoderConfigDescriptor = decoderConfigDescriptor
208-
209-
esds.esDescriptor = descriptor
210-
} else {
211-
// com.googlecode.mp4parser:isoparser is < 1.1 (eg: 1.0.6)
212-
audioSpecificConfig.setAudioObjectType(2)
213-
audioSpecificConfig.setSamplingFrequencyIndex(
214-
samplingFrequencyIndexMap[audioSampleEntry.sampleRate.toInt()]!!
215-
)
216-
audioSpecificConfig.setChannelConfiguration(audioSampleEntry.channelCount)
217-
decoderConfigDescriptor.audioSpecificInfo = audioSpecificConfig
218-
descriptor.decoderConfigDescriptor = decoderConfigDescriptor
219-
220-
val data = descriptor.serialize()
221-
esds.esDescriptor = descriptor
222-
esds.data = data
223-
}
173+
audioSpecificConfig.setOriginalAudioObjectType(2)
174+
audioSpecificConfig.setSamplingFrequencyIndex(
175+
samplingFrequencyIndexMap[audioSampleEntry.sampleRate.toInt()]!!
176+
)
177+
audioSpecificConfig.setChannelConfiguration(audioSampleEntry.channelCount)
178+
decoderConfigDescriptor.audioSpecificInfo = audioSpecificConfig
179+
descriptor.decoderConfigDescriptor = decoderConfigDescriptor
180+
181+
esds.esDescriptor = descriptor
224182

225183
audioSampleEntry.addBox(esds)
226184
sampleDescriptionBox.addBox(audioSampleEntry)

0 commit comments

Comments
 (0)