首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MP3 编码解码 附完整c代码

近期一直不间断学习音频处理,一直也没想着要去碰音频编解码相关。 主要是觉得没什么实际的作用和意义。 不管视频编解码,图像编解码,音频编解码,都有很多组织基金在推动。...当然,在一些特定的情景下,需要用起来编解码库, 而一般这些库都会有编译困难,使用困难等等困难综合症。 图像方面,已经有stb_image,spot,freeimage等编解码库系列,做得特别赞。...https://github.com/mackron/dr_libs 可惜的是,他做了wav的编解码库,mp3解码库,就是没有mp3的编码库。...而一般mp3 的编码库,大众使用最多的是lame http://lame.sourceforge.net/ 在一阵寻寻觅觅之后,俺找到了一个mp3的编码库。 其原官网已经成为历史资源了。...也不多做解释,当然了,这份代码是学习mp3解码的不二之选。

2K40
您找到你想要的搜索结果了吗?
是的
没有找到

ffmpeg android视频解码

解码流程: 获取文件信息,数据存储在AVFormatContext里面 根据AVFormatContext获取对应的AVCodecContext 解码原始数据AVPacket,解码为自己需要的数据AVFrame...解码器获取 //5.1 根据video_index获取解码器上下文AVCodecContext pCodecCtxOrg = pFormatCtx->streams[video_index...打开解码器 if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) { LOGE ("打开解码器失败"); return;...总结: 要解码,我们需要获取解码器AVCodec,解码器我们需要通过codec_id获取,codec_id我们需要通过AVStream获取,AVStream我们需要通过AVCodecContext获取,...AVCodecContext我们要根据AVFormatContext获取,解码的时候我们要通过AVFormatContext读取,解码数据存储在AVFrame里面,编码数据存储在AVPacket里面。

1.3K10

Android实现伴奏录音合成MP3

本文实例为大家分享了Android实现伴奏录音合成MP3的具体代码,供大家参考,具体内容如下 基本实现思路如下: 1.利用android自带的录音类(AudioRecord)实现录音. /** * 播放伴奏...Exception e2) { // TODO: handle exception e2.printStackTrace(); } } } } 2.录音完成后,调用开源工具(Mad)实现PCM合成输出到MP3...SongUtil.getRecordSingPCMPath(songId); //录音生成的PCM文件 String accompanyPCMPath = SongUtil.getAccompanySongPCMPath(songId); //伴奏解码生成的...SongUtil.getMixSingPCMPath(songId); //合成后的PCM文件 String mixMP3Path = SongUtil.getMixSingMp3Path(songId); //合成后的MP3...SongEncodeUtil.mix2PCMToPCM(recordPCMPath, accompanyPCMPath, mixPCMPath); if (code == 0) { // 转换混合后音频格式 TO mp3

1.2K30

Android录制mp3格式文件

前言 最近做一个即时通信类的项目,由于要保证pc端,iOS端和Android端的通用性,最终统一为MP3格式,一直担心MP3格式会不会很大,但是实测还是可以接受的。...下面来看看具体步骤: 工具 MP3格式是用一个开源项目转的,MP3lame,由于该项目用到了jni,所以需要大家配置好ndk环境,环境配置在此就不多说了,大家可以自行百度,最新的应该很好配置。...创建Android.mk 在jni中创建文件,Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LAME_LIBMP3_DIR...android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Handler; /** * <b 类功能描述...总结 之前一直用MediaRecorder录音,发现录出来的只能是amr、acc等格式,用lame转MP3感觉是不可行的。

83740

Android录音mp3格式实例详解

Android录音支持的格式有amr、aac,但这两种音频格式在跨平台上表现并不好。 MP3显然才是跨平台的最佳选择。...如何最终生成MP3 实现MP3格式最好是借助Lame这个成熟的解决方案。 对于Android来说,需要借助JNI来调用Lame的C语言代码,实现音频格式的转化。 2....拷贝 lame.h (include目录下) 创建Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE...mp3的buffer:官方规定了计算公式:7200 + (1.25 * buffer_l.length)。(可以在lame.h文件中看到) flush 将MP3结尾信息写入buffer中。...存在的问题: AudioRecord传入参数很多没有按Android规定传入。如采样频率使用了22050Hz。 使用了自己构造的RingBuffer,看这有点头晕。

2.1K20

使用libavcodec将mp3音频文件解码为pcm音频采样数据【 Header missing】

一.打开和关闭输入文件和输出文件   想要解决上面提到的问题,我们需要对mp3文件的格式有个大致了解,为了方便讲解,我这里画了个示意图: ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了 ID3V1...个数由文件大小和帧长决定 ID3V1 包含了作者,作曲,专辑等信息,长度为 128BYTE   由于av_parser_parse2()这个方法的输入必须是只包含音频编码数据的“裸流”,所以,我们在读取mp3...int32_t init_audio_decoder(const char* audio_codec){ if(strcasecmp(audio_codec,"MP3")==0){...audio_codec_id=AV_CODEC_ID_MP3; cout<<"Select codec id:MP3"<<endl; } else if(strcasecmp...  解码循环体至少需要实现以下三个功能:     1.从输入源中循环获取码流包     2.将当前帧传入解码器,获取输出的音频采样数据     3.输出解码获取的音频采样数据到输出文件   从输入源中读取音频数据到缓存

23240

MediaCodec 在 Android解码的路线

Android系统在Android4.0(API 16)增加了 MediaCodec,可以支持app调用java接口,进而使用底层硬件的音视频编解码能力。...Android ndk在 Android 5.0(API21) 提供了对应的Native方法。功能大体相同。...具体手机Android 系统一般会写在 media_codecs.xml 上。不同手机位置不一样。根据我的经验,大多数手机上是/system/etc/目录下。 这里主要是讲视频解码。...这样OpenGL就不会阻塞解码输出了。但是代价会带来拷贝性能损耗。 5.多路同步,增大流畅性 Android 6.0 (API23)新增了一个接口 —— setOutputSurface。...缺点很明显就是需要Android 6.0才能支持,不过现在通过Android统计面板能看到大部分手机都在Android 6.0之上。

1.7K20

Android 音视频开发:FFmpeg音视频编解码篇】三、Android FFmpeg视频解码播放

教程代码:【Github传送门】 目录 一、Android音视频硬解码篇: 1,音视频基础知识 2,音视频硬解码流程:封装基础解码框架 3,音视频播放:音视频同步 4,音视频解封和封装:生成一个MP4...音视频硬编码:生成一个MP4 三、Android FFmpeg音视频解码篇 1,FFmpeg so库编译 2,Android 引入FFmpeg 3,Android FFmpeg视频解码播放 4,Android...FFmpeg+OpenSL ES音频解码播放 5,Android FFmpeg+OpenGL ES播放视频 6,Android FFmpeg简单合成MP4:视屏解封与重新封装 7,Android FFmpeg...二、FFMpeg 解码流程简介 在前面的系列文章中,利用了 Android 提供的原生硬解码能力,使用实现了视频的解码和播放。...FFmpeg 初始化 FFmpeg 初始化的流程相对 Android 原生硬解码来说还是比较琐碎的,但是流程都是固定的,一旦封装起来就可以直接套用了。

2.7K20

Android中使用LAME库生成MP3文件

前言 Android中内置的MediaCodeC提供了很多音视频编解码器,但由于MP3是有版权的,所以原生MediaCodeC只提供了MP3解码能力,对于MP3的编码就需要借助外部库了。...LAME库由开源社区开发,当前是公认有损质量MP3中压缩效果最好的编码器。本文的主要工作为将LAME源码编译为so库,并在Android中使用。...LAME源码 LAME源码下载:LAME目前最新版本为3.100,http://lame.sourceforge.net/ 新建Android项目,并在创建时勾选Include C++ support,...2) ndk-build:老eclipse的构建方式,也就是Android.mk的形式。 2....编译项目,可在屏幕上看到lame的版本号 使用LAME生成MP3 在lame-lib.cpp中添加以下代码,lame初始化时采样率等参数的要求可在lame源码中看到。

3.7K180

Android录制语音文件wav转mp3的方法示例

1.Android 使用AudioRecord而实现录音暂停以及wav文件转mp3文件。...因为android系统开源的原因,导致许多生产厂商乱改系统源码,此处小米最为恶心,使用android原生的AudioRecord录制只能保存wav和pcm格式的语音文件,但是小米手机录制的wav语音文件系统本身不支持...2.针对这个问题解决方案目前有两种: 方案1: 将录制完的wav文件转化成mp3格式的,缺点:转码过程不能需要花费一部分时间,不能实时录制保存mp3格式的文件 此处可以借助gitHub上的第三方库来实现...因 Android 默认不支持MP3编码,网上很多解决方案 比较成熟的方案就是使用Lame库,通过 Lame 编码生成 MP3 音频文件。...此处提供一个gitHub的库: https://github.com/lijunzz/Recorder-Android 这个比较新,而且还适配了as3.1,就是star数少了点,勉强可以用吧 之后遇到问题继续优化总结

2.6K00

iOS Android音频格式的选择

可选格式 ios android做音频相关的开发时可选用的格式有 mp3,speex,aac,amr,ilbc 已知应用 amr:微信 evemote speex:米聊 文件格式大小 mp3>aac>...amr/ilbc>speex 各个格式简介 amr:生成格式相对较小,Android原生支持,ios可用第三方库进行编码解码 speex:生成文件最小,Android、ios均需要用第三方库进行编码解码...,支持声音的降噪等处理 aac:生成文件相对较大,Android,ios均支持,声音质量较好,比mp3文件小 ilbc:生成文件较小,ios 4.3以上支持,Android早期不支持可用第三方库 mp3...:相比文件最大,比较流行的格式 个人推荐 相比下来,我还是比较推荐用amr格式,网上的教程多,又不像speex一样需要双方都编码解码,生成的文件也较小,比较适合做语音通话

1.6K20

Android FFMPEG 开发】Android 中使用 FFMPEG 将 PCM 音频采样转为 MP3 格式

文章目录 一、前置操作 ( 移植 FFMPEG ) 二、FFMPEG 将 PCM 采样转为 MP3 格式的命令 三、Android FFMPEG 混音源代码完整示例 四、博客源码 一、前置操作 ( 移植...{ implementation 'com.writingminds:FFmpegAndroid:0.3.2' } 然后按照 【Android FFMPEG 开发】Android 中执行 FFMPEG...指令 二、Android 中执行 FFMPEG 指令 中的流程进行开发 , 将拼接好的 FFMPEG 指令传入 ffmpeg.execute 方法 ; 二、FFMPEG 将 PCM 采样转为 MP3...格式的命令 ---- FFMPEG 将 PCM 采样转为 MP3 格式的命令 : ffmpeg -y -f 采样格式 -ac 声道数 -ar 采样率 -acodec pcm_s16le -i PCM源文件...import android.os.Bundle import android.util.Log import android.view.View import android.widget.TextView

1.8K20

Android FFmpeg 音视频解码播放(十五)

解码 将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。解码是整个系统中最重要也是最复杂的一个环节。...FFmpeg音视频解码 通过前文,我们知道每一个媒体文件在被终端播放前主要经过了两个关键步骤,分别是解封装和解码。...avcodec_decode_video2():解码一帧压缩数据。 FFmpeg接口使用 1.在使用FFmpeg解码媒体文件之前,首先需要注册了容器和编解码器有关的组件。...,解码媒体文件。...展示 本文最后会附上github demo下载链接,编译运行效果图如下: image.png 小结: 至此,我们了解在Android中使用ffmpeg对音视频文件进行解封装,解码的具体过程,有兴趣的读者建议本章最后下载

2.1K41
领券