小编jim*_*azz的帖子

如何从MediaCodec解码器的输出中提取PCM样本

我正在尝试从解码的mp4缓冲区获取PCM样本以进行进一步处理.我首先从用手机的相机应用程序记录的视频文件中提取音轨,当我收到'audio/mp4'mime键时,我确保选择了音轨:

MediaExtractor extractor = new MediaExtractor();
try {
    extractor.setDataSource(fileUri.getPath());
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
int numTracks = extractor.getTrackCount();
for(int i =0; i<numTracks; ++i) {
    MediaFormat format = extractor.getTrackFormat(i);
    String mime = format.getString(MediaFormat.KEY_MIME);
    //Log.d("mime =",mime);
    if(mime.startsWith("audio/")) {
        extractor.selectTrack(i);
        decoder = MediaCodec.createDecoderByType(mime);
        decoder.configure(format, null, null, 0);

        //getSampleCryptoInfo(MediaCodec.CryptoInfo info)
        break;
    }
}
if (decoder == null) {
    Log.e("DecodeActivity", "Can't find audio info!");
    return;
}
decoder.start();
Run Code Online (Sandbox Code Playgroud)

之后,我遍历轨道,向编解码器提供编码访问单元流,并将解码后的访问单元拉入ByteBuffer(这是我从此处发布的视频呈现示例中回收的代码https://github.com/vecio/MediaCodecDemo):

ByteBuffer[] inputBuffers = decoder.getInputBuffers();
ByteBuffer[] outputBuffers = decoder.getOutputBuffers(); …
Run Code Online (Sandbox Code Playgroud)

audio android codec

10
推荐指数
1
解决办法
5369
查看次数

标签 统计

android ×1

audio ×1

codec ×1