Untitled
unknown
plain_text
5 months ago
2.5 kB
4
Indexable
try { MediaExtractor extractor = new MediaExtractor(); extractor.setDataSource(videoPath); extractor.selectTrack(batch.videoTrackIndex); extractor.seekTo(batch.startTimeUs, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); MediaFormat format = extractor.getTrackFormat(batch.videoTrackIndex); String mimeType = format.getString(MediaFormat.KEY_MIME); MediaCodec codec = MediaCodec.createDecoderByType(mimeType); codec.configure(format, null, null, 0); codec.start(); ByteBuffer inputBuffer = ByteBuffer.allocateDirect(format.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE)); MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); File batchDir = new File(OUTPUT_DIR, "result"); if (!batchDir.exists()) batchDir.mkdirs(); while (true) { int sampleSize = extractor.readSampleData(inputBuffer, 0); long sampleTime = extractor.getSampleTime(); if (sampleSize < 0 || sampleTime >= batch.endTimeUs) { break; } int inputIndex = codec.dequeueInputBuffer(10000); if (inputIndex >= 0) { ByteBuffer codecInputBuffer = codec.getInputBuffer(inputIndex); if (codecInputBuffer != null) { codecInputBuffer.put(inputBuffer); } codec.queueInputBuffer(inputIndex, 0, sampleSize, sampleTime, 0); extractor.advance(); } int outputIndex = codec.dequeueOutputBuffer(bufferInfo, 10000); while (outputIndex >= 0) { ByteBuffer outputBuffer = codec.getOutputBuffer(outputIndex); if (outputBuffer != null) { saveFrameToCache(outputBuffer, bufferInfo, batchDir); } codec.releaseOutputBuffer(outputIndex, false); outputIndex = codec.dequeueOutputBuffer(bufferInfo, 10000); } } extractor.release(); codec.stop(); codec.release(); } catch (Exception e) { e.printStackTrace(); }
Editor is loading...
Leave a Comment