Advertisement
thief_g

WorkingMediaMuxerforOneVDO

May 4th, 2023
1,046
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 3.40 KB | None | 0 0
  1. try {
  2.                var mediaMuxer = MediaMuxer(outputFilePath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4)
  3.                var tracksAdded = 0
  4.                var muxerStarted = false
  5.                var indexMap = HashMap<Int, Int>()
  6.                var count = 0
  7.                val extractor = MediaExtractor()
  8.                for (element in videoFiles) {
  9.  
  10.                    extractor.setDataSource(element.absolutePath)
  11.                    val trackCount = extractor.trackCount
  12.                    for (i in 0 until trackCount) {
  13.  
  14.                        val mediaFormat = extractor.getTrackFormat(i)
  15.                        val mime: String? = mediaFormat.getString(MediaFormat.KEY_MIME)
  16.                        extractor.selectTrack(i)
  17.  
  18.                        val dstIndex = mediaMuxer.addTrack(mediaFormat)
  19.                        indexMap[i] = dstIndex
  20.                        tracksAdded++
  21.                    }
  22.                   // Toast.makeText(context, (count++).toString(), Toast.LENGTH_SHORT).show()
  23.                    mediaMuxer.start()
  24.                        muxerStarted = true
  25.  
  26.                    var isFinished = false
  27.                    val bufferSize = MAX_SAMPLE_SIZE
  28.                    var frameCount = 0
  29.                    val offset = 0
  30.                    val dstBuffer = ByteBuffer.allocate(bufferSize)
  31.                    val bufferInfo = BufferInfo()
  32.                    var prevOutputPTSUs: Long = 0
  33.                    while (!isFinished) {
  34.                        bufferInfo.offset = offset
  35.                        bufferInfo.size = extractor.readSampleData(dstBuffer, offset)
  36.                        if (bufferInfo.flags and MediaCodec.BUFFER_FLAG_CODEC_CONFIG !== 0) {
  37.                            bufferInfo.size = 0
  38.                        }
  39.  
  40.                        if (bufferInfo.size < 0) {
  41.                            isFinished = true
  42.                            bufferInfo.size = 0
  43.                        } else {
  44.                            bufferInfo.flags = extractor.sampleFlags
  45.                            val trackIndex = extractor.sampleTrackIndex
  46.                            if (extractor.sampleTime < prevOutputPTSUs) {
  47.                                bufferInfo.presentationTimeUs = prevOutputPTSUs + 300
  48.                            } else {
  49.                                bufferInfo.presentationTimeUs = extractor.sampleTime
  50.                            }
  51.                            mediaMuxer.writeSampleData(
  52.                                indexMap[trackIndex] ?: 0,
  53.                                dstBuffer,
  54.                                bufferInfo
  55.                            )
  56.                            prevOutputPTSUs = bufferInfo.presentationTimeUs
  57.                            extractor.advance()
  58.                            frameCount++
  59. //                        Log.e(TAG, "Frame (" + frameCount + ") " +
  60. //                                "PresentationTimeUs:" + bufferInfo.presentationTimeUs +
  61. //                                " Flags:" + bufferInfo.flags +
  62. //                                " TrackIndex:" + trackIndex +
  63. //                                " Size(KB) " + bufferInfo.size / 1024)
  64.  
  65.                        }
  66.                    }
  67.                    mediaMuxer.stop()
  68.                    mediaMuxer.release()
  69.  
  70.                }
  71.  
  72.                extractor.release()
  73.  
  74.            } catch (e: Exception) {
  75.                Log.e(TAG, e.message.toString())
  76.            }
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement