使用fdkaac编码
来源:互联网 发布:算法和模型的区别 编辑:程序博客网 时间:2024/05/03 00:44
fdkaac是一个目前效率很高的aac编解码库。
使用该库编码aac的流程如下:
1,初始化aac库
HANDLE_AACENCODER m_aacEncHandle;uint8_t m_aacOutbuf[20480]; if (aacEncOpen(&m_aacEncHandle, 0, channels) != AACENC_OK) {printf("Unable to open fdkaac encoder\n");return -1;}if (aacEncoder_SetParam(m_aacEncHandle, AACENC_AOT, 2) != AACENC_OK) { //aac lcprintf("Unable to set the AOT\n");return -1;}if (aacEncoder_SetParam(m_aacEncHandle, AACENC_SAMPLERATE, sampleRate) != AACENC_OK) {printf("Unable to set the AOT\n");return -1;}if (aacEncoder_SetParam(m_aacEncHandle, AACENC_CHANNELMODE, MODE_2) != AACENC_OK) { //2 channleprintf("Unable to set the channel mode\n");return -1;}if (aacEncoder_SetParam(m_aacEncHandle, AACENC_BITRATE, bitRate) != AACENC_OK) {printf("Unable to set the bitrate\n");return -1;}if (aacEncoder_SetParam(m_aacEncHandle, AACENC_TRANSMUX, 2) != AACENC_OK) { //0-raw 2-adtsprintf("Unable to set the ADTS transmux\n");return -1;}if (aacEncEncode(m_aacEncHandle, NULL, NULL, NULL, NULL) != AACENC_OK) {printf("Unable to initialize the encoder\n");return -1;}AACENC_InfoStruct info = { 0 };if (aacEncInfo(m_aacEncHandle, &info) != AACENC_OK) {printf("Unable to get the encoder info\n");return -1;}
AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 };AACENC_InArgs in_args = { 0 };AACENC_OutArgs out_args = { 0 };int in_identifier = IN_AUDIO_DATA;int in_elem_size = 2; in_args.numInSamples = size / 2; //size为pcm字节数in_buf.numBufs = 1;in_buf.bufs = &pData; //pData为pcm数据指针in_buf.bufferIdentifiers = &in_identifier;in_buf.bufSizes = &size;in_buf.bufElSizes = &in_elem_size;int out_identifier = OUT_BITSTREAM_DATA;void *out_ptr = m_aacOutbuf;int out_size = sizeof(m_aacOutbuf);int out_elem_size = 1;out_buf.numBufs = 1;out_buf.bufs = &out_ptr;out_buf.bufferIdentifiers = &out_identifier;out_buf.bufSizes = &out_size;out_buf.bufElSizes = &out_elem_size;if ((aacEncEncode(m_aacEncHandle, &in_buf, &out_buf, &in_args, &out_args)) != AACENC_OK) {fprintf(stderr, "Encoding aac failed\n");return NVSTITCH_ERROR_GENERAL;}if (out_args.numOutBytes == 0)return NVSTITCH_ERROR_GENERAL;fwrite(outbuf, 1, out_args.numOutBytes, out); //编码后的aac数据存在outbuf中,大小为out_args.numOutBytes
3,最后销毁aac对象
aacEncClose(&m_aacEncHandle);
阅读全文
0 0
- 使用fdkaac编码
- FFMPEG如何使用LIB-FDKAAC解码
- Android编译X264、fdkaac和FFmpeg
- Win32 scripts for automated build of libfdk-aac and fdkaac
- 使用xvid进行编码
- 小心使用编码格式
- 关于编码的使用
- 第一次使用URL编码
- 使用编码过滤器
- Skin++ 使用unicode编码
- 使用 Unicode 编码
- 使用x264编码
- ecplise使用GBK编码
- Mysql使用JDBC编码
- 编码使用autoLayout
- 使用 Unicode 编码
- Java使用Base64编码
- 使用BASE64编码解码
- linux之安装软件出现Could not open lock file /var/lib/dpkg/lock
- **matlab写函数:自适应Simpson公式计算数值积分**
- asyncTask 异步网络请求数据 判断适配器为空
- Socket理解与简单使用
- 三年经验的java程序应该有哪些技能
- 使用fdkaac编码
- 有哪些外汇平台是世界品牌的
- Swift4
- The more, The Better HDU
- 大数N!
- webpack手动搭建 es6+less 开发环境和打包
- ubuntu如何切换到root身份?
- 电话号码正则匹配
- 原子荧光光谱仪整理