EasyPlayer Android音频解码库(第二部分,封装解码器接口)

本文介绍了如何在Android上封装ffmpeg音频解码器接口。通过创建Java native接口,包括create、decode和close方法,实现AAC等音频格式的解码功能。利用javah生成头文件,并在Android.mk中配置NDK编译动态库,最终通过ndk-build生成可使用的解码库。
摘要由CSDN通过智能技术生成

上一节我们讲了如何基于ffmpeg-android工程编译安卓上的支持音频的ffmpeg静态库,这篇文章我们将介绍如何封装安卓的解码器。

首先,为了能让我们的app调用调用,我们需要定义一套Java的native接口,解码器主要有三个接口:

  • create 创建解码器,参数分别为:
    • codec:音频编码格式,参考EasyTypes.h里面的EASY_SDK_AUDIO_CODEC_*宏定义;
    • sample_rate:采样率,通常为8000、44000等等;
    • channels:通道数,1、2分别表示单通道、双通道;
    • sample_bit:采样精度,通常为16bit;
      返回解码器句柄,即后续接口里面用到的handle
  • decode 解码,参数为:
    • handle :解码器句柄
    • buffer:要解码的buffer(编码后的音频数据)
    • offset:编码数据在buffer里的起始位置
    • length:编码数据的长度
    • pcm:解码后的pcm数据
    • outLen 长度至少为1的int数组,如果解码成功,那outLen[0]被置为pcm的数据长度
  • close 关闭解码器,参数为解码器的句柄。关闭后句柄无效,应该置为0.
package org.easydarwin.audio;

/**
 * Created by John on 2016/3/18.
 */
public class AudioCodec {
   
    static {
        System.loadLibrary("AudioCodecer");
    }

    public static native int create(int codec, int sample_rate, int channels, int sample_bit);

    public static native int decode(int handle, byte[] buffer, int offset, int length, byte[] pcm, int[] outLen);

    public static native void close(int handle);
}

接下来我们要实现相应的native接口,头文件可通过调用javah命令(这里不再详述)来生成。以AAC解码来说明,create代码片段如下:


    // 创建获取解码器
    AVCodec *pCodec = avcodec_find_decoder(AV_CODEC_ID_AAC);
    if (pCodec == NULL)
    {
        LOGI("find aac decoder error");
        printf("find aac decoder error\r\n");
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值