Nik*_*hil 6 mp3 android m4a mediamuxer
我不想使用ffmpeg.目前我能够使用mp4视频复用m4a音频.我想补充的MP3音频还需要哪些MP3到M4A conversion.I能够WAV转换成M4A,但不是MP3 M4A等与下面的代码
这是我的代码.
private void convertAudio(String filename) throws IOException {
String outputpath =Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath()+"/converted.m4a";
// Set up MediaExtractor to read from the source.
MediaExtractor extractor = new MediaExtractor();
extractor.setDataSource(filename);
int trackCount = extractor.getTrackCount();
// Set up MediaMuxer for the destination.
MediaMuxer muxer;
muxer = new MediaMuxer(outputpath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
// Set up the tracks.
HashMap<Integer, Integer> indexMap = new HashMap<Integer, Integer>(trackCount);
for (int i = 0; i < trackCount; i++) {
extractor.selectTrack(i);
MediaFormat format = extractor.getTrackFormat(i);
format.setString(MediaFormat.KEY_MIME, MediaFormat.MIMETYPE_AUDIO_AMR_NB);
int dstIndex = muxer.addTrack(format);
indexMap.put(i, dstIndex);
}
// Copy the samples from MediaExtractor to MediaMuxer.
boolean sawEOS = false;
int bufferSize = 32000;
int frameCount = 0;
int offset = 100;
ByteBuffer dstBuf = ByteBuffer.allocate(bufferSize);
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
/* if (degrees >= 0) {
muxer.setOrientationHint(degrees);
}*/
// Test setLocation out of bound cases
muxer.start();
while (!sawEOS) {
bufferInfo.offset = offset;
bufferInfo.size = extractor.readSampleData(dstBuf, offset);
if (bufferInfo.size < 0) {
sawEOS = true;
bufferInfo.size = 0;
} else {
bufferInfo.presentationTimeUs = extractor.getSampleTime();
bufferInfo.flags = extractor.getSampleFlags();
int trackIndex = extractor.getSampleTrackIndex();
muxer.writeSampleData(indexMap.get(trackIndex), dstBuf,
bufferInfo);
extractor.advance();
frameCount++;
}
}
muxer.stop();
muxer.release();
return;
}
Run Code Online (Sandbox Code Playgroud)
看来这个问题的答案(截至目前)是,没有公开可用(即可搜索)的免费解决方案可以在不使用“ffmpeg”的Android上将“mp3”转换为“m4a”。
然而,这并不意味着它不能完成:
应该有人能够阅读相关规范文档,然后实施改造;即写一堆Java代码。确实,ffmpeg的存在本身就证明了这在技术上是可行的。而且也是合法的。
有人可能已经完成了这项工作,但选择不与他人分享。
可能......因为没有人准备写一个。可能是因为那些倾向于免费这样做的人看不到重新发明轮子的意义!
由于 LGPL / GPL 的许可限制,我认为您想要/需要“无 ffmpeg”实现。这很酷。但是,如果您不想采用开源方式(并且 LGPL 并不麻烦),那么您需要为您自己(或您自己)解决问题。替代方案是:
如果您(个人或集体)执行 1 或 2 项,那么您可以选择将您的劳动或投资成果免费(根据您选择的任何许可证)或以金钱形式提供给他人。
| 归档时间: |
|
| 查看次数: |
2125 次 |
| 最近记录: |