近期一直不间断学习音频处理,一直也没想着要去碰音频编解码相关。 主要是觉得没什么实际的作用和意义。 不管视频编解码,图像编解码,音频编解码,都有很多组织基金在推动。...当然,在一些特定的情景下,需要用起来编解码库, 而一般这些库都会有编译困难,使用困难等等困难综合症。 图像方面,已经有stb_image,spot,freeimage等编解码库系列,做得特别赞。...https://github.com/mackron/dr_libs 可惜的是,他做了wav的编解码库,mp3的解码库,就是没有mp3的编码库。...而一般mp3 的编码库,大众使用最多的是lame http://lame.sourceforge.net/ 在一阵寻寻觅觅之后,俺找到了一个mp3的编码库。 其原官网已经成为历史资源了。...也不多做解释,当然了,这份代码是学习mp3编解码的不二之选。
解码流程: 获取文件信息,数据存储在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里面。
音频解码就是将mp3 aac等格式这些文件解析为pcm格式的过程。...和视频解码流程一样,只是有些函数不一样 #include "lang.h"; #include //封装格式 //解码 #include "log.h" extern "C" {...注册 av_register_all(); //2.打开解码器 解码器 <-- 拿到id <-- 拿到stream和拿到AVCodecContext <-- 拿到AVFormatContext...{ LOGE("打开解码器失败!")...解码 将解码数据封装在AVFrame 解码文件参数设置 //3.1 AVPacket初始化 AVPacket *
libmad简介 MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)。...使用 libmad 提供的一系列 API,就可以非常简单地实现 MP3 数据解码工作。...如果不用这个现成的播放器madplay,只测试下libmad是否成功, 可以编译测试下 libmad提供的一个简单demo,这个demo 不是播放mp3的,而是把mp3解码成 pcm文件 。
MediaCodec 介绍 MediaCodec 是 Android 提供的用于对音视频进行编解码的类,它通过访问底层的 codec 来实现编解码的功能,是 Android media 基础框架的一部分...详细描述可参见官方文档:https://developer.android.com/reference/android/media/MediaCodec.html AMediaCodec 是 MediaCodec...的 native 接口,Google 从 Android 5.0 开始提供,Native 代码编译时需要引入 mediandk 库,官方 demo : https://github.com/android...、音频解码、视频解码分别在一个子线程进行,利用队列管理音视频数据包。...,Native 使用 AMediaCodec 对视频进行解码,从视频的 AVPacket 队列中取包进行解码。
1、OpenGL生成纹理 2、纹理绑定到SurfaceTexture上 3、用SurfaceTexture做参数创建Surface 4、MediaCodec解码的视频就往Surface发送,就显示出画面了...sTexture; void main() { gl_FragColor=texture2D(sTexture, v_texPosition); } VideoRender.java import android.content.Context...; import android.graphics.SurfaceTexture; import android.opengl.GLES11Ext; import android.opengl.GLES20...; import android.opengl.GLSurfaceView; import android.view.Surface; import java.nio.ByteBuffer; import...; import android.opengl.GLSurfaceView; import android.util.AttributeSet; public class VideoGLSurfaceView
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之上。
一.打开和关闭输入文件和输出文件 想要解决上面提到的问题,我们需要对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; coutMP3"<<endl; } else if(strcasecmp... 解码循环体至少需要实现以下三个功能: 1.从输入源中循环获取码流包 2.将当前帧传入解码器,获取输出的音频采样数据 3.输出解码获取的音频采样数据到输出文件 从输入源中读取音频数据到缓存
前言 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源码中看到。
教程代码:【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 原生硬解码来说还是比较琐碎的,但是流程都是固定的,一旦封装起来就可以直接套用了。
【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 博客 ; 在应用的 build.gradle 构建脚本中导入如下依赖 ; dependencies { implementation...'com.writingminds:FFmpegAndroid:0.3.2' } 然后按照 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 二、Android 中执行...FFMPEG 混音源代码完整示例 ---- Android FFMPEG 混音源代码完整示例 : package com.example.ffmpeg_mix import android.os.Bundle...import android.util.Log import android.view.View import android.widget.TextView import androidx.appcompat.app.AppCompatActivity...-sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264
3、Lame在Android应用上如何使用?...翻译成中文就是:LAME是一个高质量的MPEG音频层III (MP3)编码器,在LGPL下授权。 好了,现在我们知道Lame就是个开源的编码器,而且是专门用来编码mp3文件的。...二、为什么要采用Lame 在Android上开发过录音功能的同学应该知道,在Android上要实现录音功能,有2种方式。...这里贴下MediaRecord目前支持的录音格式,可以看到目前是不支持mp3的。那这时我们想要编码mp3的文件,就得借助lame来实现了。...这里给出的一个例子是将pcm格式的文件编码mp3格式的文件。
NuPlayer的解码引入了 NuPIayerDecoderBase,这是一个基类。真正的解码器逻辑在 NuPlayerDecoder.cpp文件中,它继承自NuPlayerDecoderBase类。...下面先看看实例化解码器, 其位于 frameworks\av\media\libmediaplayerservice\nuplayer\NuPlayer.cpp 中: status_t NuPlayer...::instantiateDecoder(bool audio, sp *decoder) { //音频解码器可以清除由tear down。...如果仍然在关闭 //进程,不需要创建一个新的音频解码器。 if (*decoder !...mediaBufs."); return err; } } return OK; } 上面的代码构造了 Decoder对象,且进行了初始化和构建解码器
文章目录 一、前置操作 ( 移植 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
我又来掀桌子了(ノಠ益ಠ)ノ彡┻━┻,这次是MP3录制和显示声音波形的一个故事。...1 MP3录制的逻辑过程就忽略了(真的不是因为懒(。
可选格式 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一样需要双方都编码解码,生成的文件也较小,比较适合做语音通话
解码 将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。解码是整个系统中最重要也是最复杂的一个环节。...FFmpeg音视频解码 通过前文,我们知道每一个媒体文件在被终端播放前主要经过了两个关键步骤,分别是解封装和解码。...avcodec_decode_video2():解码一帧压缩数据。 FFmpeg接口使用 1.在使用FFmpeg解码媒体文件之前,首先需要注册了容器和编解码器有关的组件。...,解码媒体文件。...展示 本文最后会附上github demo下载链接,编译运行效果图如下: image.png 小结: 至此,我们了解在Android中使用ffmpeg对音视频文件进行解封装,解码的具体过程,有兴趣的读者建议本章最后下载
所以,播放器的两个核心功能,一个是解码,一个是显示。 我们来看看,Android为我们提供了哪些对象,可以让我们做视频的播放。...Android播放视频 下面我们介绍3种在Android上播放视频的方法。 1. 使用VideoView播放视频 ?...Android系统,已经在底层我们打通了一条MediaPlayer到SurfaceView的数据通路,那就是Surface。...至此,opengl拿到了解码的图像数据后,就可以自如的做任何图像相关的处理,渲染到屏幕上。 总结 以上在Android上实现的三种播放视频方法,从简单到复杂,可以根据自己功能的需要,灵活进行选择。...---- 作者简介:taoxiong(熊涛),天天P图Android工程师
零、前言 作为90后,mp3格式的音乐可谓灵魂之友。 小时候带着耳机,躺在桌子上听歌看月亮心情依稀。...双进度.png ---- MP3的简介 0..../s=83087.8453125B 约81.1M PCM几乎接近完美音质(无损),原装出品一首81.1M,怎么大,估计很难接收 ---- 2.MP3是一种音频有损压缩技术(知识来源,百度百科) MP3...(Moving Picture Experts Group Audio Layer III)是指的是MPEG-1标准中的音频部分 MPEG音频文件的压缩是一种有损压缩,MP3音频具有10:1~12:1...:name="android.permission.WRITE_EXTERNAL_STORAGE"/> android:name="android.permission.READ_EXTERNAL_STORAGE
领取专属 10元无门槛券
手把手带您无忧上云