FFmpeg开发笔记(六十六)Windows给FFmpeg集成LC3音频的编码器liblc3
《FFmpeg开发实战:从零基础到短视频上线》一书的第五章介绍了FFmpeg如何处理常见的MP3音频和AAC音频,其中MP3格式常用于音乐文件,而AAC格式常用于视频文件。
除此以外,近年又出现了专用于蓝牙音频的LC3格式,其全称是低复杂度通信编解码器(Low Complexity Communications Codec)。2020年9月15日,蓝牙技术联盟正式发布LC3技术规范,所有的蓝牙音频规范将强制使用LC3音频编解码器。
liblc3是一个开源的LC3音频编解码库,同时内置了LC3和LC3 Plus功能,从7.1版本开始的最新FFmpeg源码已经支持LC3音频的编码器liblc3。
接下来以微软的视窗系统为例,介绍如何在Windows环境给FFmpeg集成LC3音频的编码器liblc3,具体的操作步骤说明如下:
一、配置liblc3
liblc3是一款LC3音频的编解码库。它的源码托管页面在https://github.com/google/liblc3,最新版本是2025年2月发布的liblc3-1.1.3,该版本的源码包下载地址是https://codeload.github.com/google/liblc3/tar.gz/refs/tags/v1.1.3。
liblc3的配置步骤说明如下。
1、安装编译工具meson和ninja
meson和ninja是基于Python语言的编译工具,故需确保Windows系统已经安装了Python3。另外,还要按照《FFmpeg开发实战:从零基础到短视频上线》第一章的“1.3.2 安装依赖的Windows软件”给电脑安装Visual Studio 2022。
接着依次选择Windows开始菜单的“Visual Studio 2022”→“x64 Native Tools Command Prompt for VS 2022”,打开Visual Studio 2022的命令行界面,执行以下命令安装meson和ninja。
pip3 install meson
pip3 install ninja
2、使用meson配置liblc3
先下载最新的liblc3源码,解压下载后的源码包,再从Visual Studio 2022的命令行进入liblc3源码目录:
cd liblc3-1.1.3
然后运行下面命令生成liblc3的VS工程:
meson setup build --buildtype=release --backend=vs
配置完成后,liblc3源码目录下出现build目录,里面便是meson给liblc3生成的VS工程。
二、编译liblc3
打开Visual Studio 2022,在欢迎页面单击右侧的“打开项目或解决方案”,在弹出的文件对话框中选择liblc3-1.1.3\build目录下的lc3.sln。
打开liblc3工程后,依次选择顶部菜单:生成→生成→生成lc3-1,Visual Studio就开始编译lc3模块。编译过程可在Visual Studio界面下方观察,直到编译完成如下图所示。

此时可在liblc3-1.1.3\build目录下找到src目录,该目录下的lc3.lib和lc3-1.dl就是编译生成的lc3库文件。
三、安装liblc3
确保Windows系统已经按照《FFmpeg开发实战:从零基础到短视频上线》第一章“1.3 Windows系统安装FFmpeg”的说明安装配置了MSYS,再按照以下步骤在MSYS环境安装liblc3。
1、在msys64的/usr/local目录下新建liblc3目录,并在该目录下创建lib子目录;
2、把liblc3工程中build\src目录下的lc3.lib和lc3-1.dll两个文件复制到第一步创建的lib目录;
3、在lib目录下创建pkgconfig子目录,并把liblc3工程的build\meson-private\lc3.pc复制到pkgconfig目录;然后打开lc3.pc,把开头一行改成下面这样。
prefix=/usr/local/liblc3
4、把liblc3工程的include目录复制到msys64的/usr/local/liblc3目录;
经过以上步骤操作后的liblc3目录结构如下所示。
/usr/local/liblc3
|--------------- lib
| |----- lc3.lib
| |----- lc3-1.dll
| |----- pkgconfig
| |----- lc3.pc
|--------------- include
| |----- lc3.h
| |----- lc3_cpp.h
| |----- lc3_private.h
四、编译安装FFmpeg
先下载最新的FFmpeg源码(版本号需大于等于7.1),再把FFmpeg源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:
cd /usr/local/src
unzip ffmpeg-n7.1.1.zip
确保MSYS环境已经按照《FFmpeg开发实战:从零基础到短视频上线》该书第八章的“8.1.1 给FFmpeg集成x264”和“8.1.5 给FFmpeg集成x265”安装了H.264的编码器libx264和H.265的编码器libx265,也按照该书第十章的“10.1.1 FFmpeg集成SDL”安装了Windows系统的SDL2库,并且按照之前的文章安装了H.266的编码器libvvenc,然后执行下面命令配置FFmpeg的编译环境:
cd ffmpeg-n7.1.1
export PKG_CONFIG_PATH=/usr/local/liblc3/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
配置完毕执行下面命令编译和安装FFmpeg,编译完成的ffmpeg库将会安装到configure指定的/usr/local/ffmpeg目录。
make
make install
cp /usr/local/liblc3/lib/lc3-1.dll /usr/local/ffmpeg/bin
五、查看FFmpeg的安装结果
运行下面命令查看FFmpeg的安装版本:
ffmpeg -version
上面命令返回的FFmpeg版本信息如下:
ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
根据以上返回的版本信息,可知已安装的FFmpeg版本号为7.1.1,同时configuration这行找到“--enable-liblc3”,说明FFmpeg已经启用了LC3音频的编解码库liblc3。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
FFmpeg开发笔记(六十六)Windows给FFmpeg集成LC3音频的编码器liblc3的更多相关文章
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- .net开发笔记(十六) 对前部分文章的一些补充和总结
补充有两个: 一个是系列(五)中讲到的事件编程(网址链接),该文提及到了事件编程的几种方式以及容易引起的一些异常,本文补充“多线程事件编程”这一块. 第二个是前三篇博客中提及到的“泵”结构在编程中的应 ...
- 安卓开发笔记(十六):'Request(okhttp3.Request.Builder)' has private access in 'okhttp3.Request
当出现了'Request(okhttp3.Request.Builder)' has private access in 'okhttp3.Request的错误的时候,实际上是我们在写代码的时候少打了 ...
- Java开发笔记(十六)非此即彼的条件分支
前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...
- Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
前言 上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤. 受限制 因为直接配置sample的vi比较麻烦 ...
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- ng机器学习视频笔记(十六) ——从图像处理谈机器学习项目流程
ng机器学习视频笔记(十六) --从图像处理谈机器学习项目流程 (转载请附上本文链接--linhxx) 一.概述 这里简单讨论图像处理的机器学习过程,主要讨论的是机器学习的项目流程.采用的业务示例是O ...
- Nodejs学习笔记(十六)—Pomelo介绍&入门
前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...
随机推荐
- ubuntu网络连接失败
首先要保证pc上可以连接上网络,然后进行下面的操作: 1.首先选择VMware的编辑选项 2.选择虚拟网络编辑器 3.还原默认设置,等待几分钟,确定就可以解决了
- MinIO Linux 数据迁移
目录 安装 下载 安装Minio客户端 备份数据 数据还原 数据迁移 设置别名 迁移 从A服务器,迁移致B服务器,前提,需要两边的 Bucket 相同,如果B服务器没有A服务器里的 Bucket 需要 ...
- JdbcTemplate 自定义返回的结果集字段和实体类映射
废话不多:抄袭代码 package com.webank.wedatasphere.qualitis.handler; import com.webank.wedatasphere.qualitis. ...
- SQL INSERT批量插入方式
1.常规INSERT写法 INSERT INTO ... VALUES (...); INSERT INTO 表名( `字段1`, `字段2`) VALUES ('字段1的值', '字段2的值') ...
- picoctf general skills-easy 部分题目详解(1)
实验介绍: ctf竞赛(Capture The Flag)是网络安全技术人员代替真实攻击,比拼技术的竞赛. 又名夺旗赛,是以拿到flag为目标的比赛. picoctf上的题目比较适合新手练习. 但是注 ...
- Python进阶知识:多进程/多线程/装饰器
本文写作于2025.3.20,恰好作者正好在外面实习,于此同时在实际工作中遇到这些知识点,因此就进行一个简短汇总方便后续回顾,内容同步更新(显示问题可以直接看):https://www.big-yel ...
- BUUCTF---萌萌哒的八戒(猪圈密码)
1. 问题 2.知识点 猪圈密码 3.解题 对应解题,套上flag{whenthepigwanttoeat}
- 时区转换工具+PWA离线网页
时区转换工具+PWA离线网页 一.时区转换工具对比 工具 说明 Date 原生 JS API,有限的时区支持,无法指定时区,仅使用本地时区. Intl.DateTimeFormat 原生格式化显示,可 ...
- 【深入解析AQS】从设计模式到ReentrantLock实现再到自定义锁
深入解析AQS:设计模式.ReentrantLock实现与自定义锁开发 一.模板方法模式:AQS的架构基石 1.1 模式核心思想 模板方法模式通过固定算法骨架+可变实现细节的设计,实现了代码复用与扩展 ...
- chatGPT:清理 master 分支的文件,并让这个分支只有一个提交
Q 我的开发工作都在 master 分支上做的,master 分支有很多的开发的时候产生的临时文件.我想清空 master 分支的历史记录.并且只保留 README.md 和 main.py A 你可 ...