分离音频:
MediaExtractor mediaExtractor = new MediaExtractor(); MediaMuxer mediaMuxer = null; try { mediaMuxer = new MediaMuxer("/sdcard/result.mp4", MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); mediaExtractor.setDataSource(FILE_NAME); int trackCount = mediaExtractor.getTrackCount(); int videoTrackIndex = -1; for (int i = 0; i < trackCount; i++) { MediaFormat trackFormat = mediaExtractor.getTrackFormat(i); String mime = trackFormat.getString(MediaFormat.KEY_MIME); if (mime.startsWith("audio")) { mediaExtractor.selectTrack(i); videoTrackIndex = mediaMuxer.addTrack(trackFormat); mediaMuxer.start(); break; } } if (videoTrackIndex == -1) { return; } ByteBuffer byteBuffer = ByteBuffer.allocate(1024 * 1024); MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); bufferInfo.presentationTimeUs = 0; int sampleSize; while ((sampleSize = mediaExtractor.readSampleData(byteBuffer, 0)) > 0) { // int trackIndex = mediaExtractor.getSampleTrackIndex(); bufferInfo.offset = 0; bufferInfo.size = sampleSize; bufferInfo.flags = MediaCodec.BUFFER_FLAG_SYNC_FRAME; bufferInfo.presentationTimeUs = mediaExtractor.getSampleTime(); mediaMuxer.writeSampleData(videoTrackIndex, byteBuffer, bufferInfo); mediaExtractor.advance(); } mediaMuxer.stop(); mediaMuxer.release(); } catch (IOException e) { e.printStackTrace(); } finally { mediaExtractor.release(); }