@@ -3,17 +3,17 @@ package com.reactnativecompressor.Video.VideoCompressor.video
33import android.media.MediaCodec
44import android.media.MediaCodecInfo
55import 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
1516import java.util.*
16- import kotlin.reflect.jvm.isAccessible
1717
1818class 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