展开

关键词

MP3 编码解码 附完整c代码

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

1K40

让终端支持播放mp3,移植mp3解码库libmad和madplay到嵌入式linux

libmad简介 MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)。 使用 libmad 提供的一系列 API,就可以非常简单地实现 MP3 数据解码工作。 如果不用这个现成的播放器madplay,只测试下libmad是否成功, 可以编译测试下 libmad提供的一个简单demo,这个demo 不是播放mp3的,而是把mp3解码成 pcm文件 。

81710
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

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

    ffmpeg android音频解码

    音频解码就是将mp3 aac等格式这些文件解析为pcm格式的过程。 和视频解码流程一样,只是有些函数不一样 #include "lang.h"; #include <string> //封装格式 //解码 #include "log.h" extern "C" { 注册 av_register_all(); //2.打开解码器 <-- 拿到解码器 <-- 拿到id <-- 拿到stream和拿到AVCodecContext <-- 拿到AVFormatContext { LOGE("打开解码器失败!") 解码解码数据封装在AVFrame <-- 拿到编码的数据AVPacket <-- 读取数据源 <-- 解码文件参数设置 //3.1 AVPacket初始化 AVPacket *

    73430

    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里面。

    77710

    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

    48830

    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感觉是不可行的。

    21840

    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,看这有点头晕。

    81420

    Android OpenGLES渲染MediaCodec解码数据

    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

    1.6K10

    Android FFmpeg + MediaCodec 实现视频硬解码

    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 队列中取包进行解码

    53320

    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源码中看到。

    2.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数少了点,勉强可以用吧 之后遇到问题继续优化总结

    70700

    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 原生硬解码来说还是比较琐碎的,但是流程都是固定的,一旦封装起来就可以直接套用了。 首先来看一下初始化的流程图 ?

    1.3K20

    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一样需要双方都编码解码,生成的文件也较小,比较适合做语音通话

    71620

    centos mp3

    Then try to install something like this yum install htop 2. mp3 yum install vlc flash-plugin-11.2.202.236 -release.i386.rpm http://get.adobe.com/flashplayer/ Linux MP3支持需要的plugins yum install gstreamer-plugins-bad gstreamer-plugins-ugly MP3字体乱码解决 java -jar . /id3iconv-0.2.1.jar -e gbk *.mp3

    19020

    Android 采用Lame编码器编码mp3文件

    3、Lame在Android应用上如何使用? 翻译成中文就是:LAME是一个高质量的MPEG音频层III (MP3)编码器,在LGPL下授权。 好了,现在我们知道Lame就是个开源的编码器,而且是专门用来编码mp3文件的。 二、为什么要采用Lame 在Android上开发过录音功能的同学应该知道,在Android上要实现录音功能,有2种方式。 这里贴下MediaRecord目前支持的录音格式,可以看到目前是不支持mp3的。那这时我们想要编码mp3的文件,就得借助lame来实现了。 这里给出的一个例子是将pcm格式的文件编码mp3格式的文件。

    43220

    Android MP3录制,波形显示,音频权限兼容与播放

    我又来掀桌子了(ノಠ益ಠ)ノ彡┻━┻,这次是MP3录制和显示声音波形的一个故事。 1 MP3录制的逻辑过程就忽略了(真的不是因为懒(。

    91520

    python 播放mp3

    66620

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

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

    1.1K40

    android视频系列:视频解码篇--android上视频播放的实现

    所以,播放器的两个核心功能,一个是解码,一个是显示。 我们来看看,Android为我们提供了哪些对象,可以让我们做视频的播放。 Android播放视频 下面我们介绍3种在Android上播放视频的方法。 1. 使用VideoView播放视频 ? Android系统,已经在底层我们打通了一条MediaPlayer到SurfaceView的数据通路,那就是Surface。 至此,opengl拿到了解码的图像数据后,就可以自如的做任何图像相关的处理,渲染到屏幕上。 总结 以上在Android上实现的三种播放视频方法,从简单到复杂,可以根据自己功能的需要,灵活进行选择。 ---- 作者简介:taoxiong(熊涛),天天P图Android工程师

    1.5K131

    Android 端音频变声方案

    如果是 mp3、aac 等压缩音频,则需提前解码成 PCM 数据,Android 端可以通过 MediaExtractor 及 MediaCodec 解码得到 PCM 。 但调整音调、节拍仅靠 Android api 就无能为力了,只能集成第三方库来实现,常见的音频处理库有 Fmod 、 SoundTouch。 假设一个聊天 app 要实现语音消息变声,那这段语音只会在你的应用中播放,那就都可以通过 Fmod 播放器变声播放啊,要知道 Fmod 可是一个跨平台的音频引擎,不论是 Android、iOS 还是 Web 比如你要实现一个 mp3 的变声播放,可以先用 MediaCodec 将 mp3 解码成 PCM,通过 SoundTouch 处理得到变声后的 PCM,再结合 AudioTrack 实现播放; 如果你要将一个 mp3 变声后保存下来,那就在得到变声后的 PCM 后,结合 MediaCodec 将其编码保存下来。

    47030

    相关产品

    • 播放器 SDK

      播放器 SDK

      播放器 SDK 基于腾讯云强大的后台能力与 AI 技术,提供视频点播和直播的强大播放载体。流畅稳定的播放性能,集广告植入、数据监测等功能于一身。覆盖多类应用场景,满足客户多样需求,让客户轻松聚焦于业务发展本身,畅享极速高清播放新体验。

    相关资讯

    热门标签

    扫码关注腾讯云开发者

    领取腾讯云代金券