@@ -3,17 +3,17 @@ package com.reactnativecompressor.Video.VideoCompressor.video
3
3
import android.media.MediaCodec
4
4
import android.media.MediaCodecInfo
5
5
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
15
16
import java.util.*
16
- import kotlin.reflect.jvm.isAccessible
17
17
18
18
class Track (id : Int , format : MediaFormat , audio : Boolean ) {
19
19
@@ -67,28 +67,10 @@ class Track(id: Int, format: MediaFormat, audio: Boolean) {
67
67
VisualSampleEntry (VisualSampleEntry .TYPE3 ).setup(width, height)
68
68
69
69
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 )) }
92
74
93
75
if (format.containsKey(" level" )) {
94
76
when (format.getInteger(" level" )) {
@@ -188,39 +170,15 @@ class Track(id: Int, format: MediaFormat, audio: Boolean) {
188
170
189
171
val audioSpecificConfig = AudioSpecificConfig ()
190
172
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
224
182
225
183
audioSampleEntry.addBox(esds)
226
184
sampleDescriptionBox.addBox(audioSampleEntry)
0 commit comments