FFmpeg连载1-环境搭建

简介: FFmpeg连载系列

前言

之前笔者从事安卓开发的时候想要学习音视频实践,脑子里面想的是要是有专门针对安卓开发的FFmpeg教程就好了。慢慢地发现这个想法很不靠谱,因为那时关于音视频的相关教程本来就少,如果还要是针对安卓的就凤毛麟角了。

后来为了学习FFmpeg,笔者也是断断续续的,从音视频的基础资料开始,从FFmpeg编译到实践,希望通过自己的学习可以一点一点地揭开FFmpeg的神秘面纱,直到今天笔者只敢说仅是音视频开发大军中的一个入门新手而已,虽说自己摸索挺久,
但依旧难以进阶,我想其中有两个主要的原因,一是缺少仙人指路,二是断断续续,缺乏系统性的学习总结。

学习最重要的是融会贯通,如果你内心想要学习,但是又以没有完全针对性的教程资料为由,最后你会发现自己还是想的比做的多,还不如不想...

对于FFmpeg这东西,你说它难,其实它也就那么一回事,你说它简单,无数人在编译阶段就被迫放弃了,或许它难的不是它本身,更多学习者一个敢于开始的勇气和持之以恒的坚持吧。

为了让新手可以更快速地入门FFmpeg,笔者将开始连载关于FFmpeg相关文章,主要涉及音视频解封装、音视频解码、音视频编码、音频重采样等相关知识点。

在本系列文章的最后,可能会以一个小小的实践作为收尾,这个实践的内容大体是:

1、输入多个mp3文件,解码成pcm,然后进行重采样,拼接合并编码成aac音频;
2、输入多个mp4文件,提取出视频解码成yuv,然后拼接合并编码成h264;
3、将1中的aac音频和2中的h264视频合并成新的mp4文件。

今天我们主要是先把环境搭建好,毕竟千里之行始于足下。

笔者环境

笔者使用的范例环境了Mac系统,开发工具是CLion。

安装FFmpeg

关于引入在PC上引入FFmpeg的话还是比较简单的,可以通过命令行工具进行安装,然后将相关库提取处理即可,又或者可以直接使用源码直接编译相关库都可以。但是如果要想把FFmpeg继承到安卓中去就要使用NDK教程编译了,
对于如何使用NDK教程编译FFmpeg童鞋们可以去翻我之前的文章,或许后面有时间我在整理一份都行。

鉴于FFmpeg是一个C语言库,天生具备跨平台能力,所以学习的话笔者建议直接在PC上实践学习即可,如果你都学会了,那移植到其他平台那不是so easy吗。

今天笔者使用的是命令行安装的方式集成FFmpeg,在Mac上我们可以使用Homebrew包管理工具进行安装,Linux上可以用apt。

1、首先使用Homebrew安装ffmpeg:

brew install ffmpeg

然后静静等待即可,一般如果失败的话多是网络问题吧,解决方式众所周知...

2、安装成功后我们用brew info命令查看一下安装到哪里去了,后面引入工程时需要用到,命令是:

brew info ffmpeg

例如笔者的输出如图:

配置CLion工程

新建好CLion工程后,我们将FFmpeg的库路径和头文件配置一下,配置CMakeLists.txt:

cmake_minimum_required(VERSION 3.17)

# 注意 FFmpegPro是工程名称,开发这需要按照实际进行替换
project(FFmpegPro)

set(CMAKE_CXX_STANDARD 11)

# FFmpeg的安装目录,可以通过命令"brew info ffmpeg"获取
set(FFMPEG_DIR /opt/homebrew/Cellar/ffmpeg/5.0)
# 头文件搜索路径
include_directories(${FFMPEG_DIR}/include/)
# 动态链接库或静态链接库的搜索路径
link_directories(${FFMPEG_DIR}/lib/)

add_executable(FFmpegPro main.cpp)

#链接库
target_link_libraries(FFmpegPro
        #FFmpeg 库
        avcodec
        avfilter
        avformat
        avutil
        swresample
        swscale
        )

简单测试一下配置是否成功,在main代码中简单调用一些ffmpeg库的API,如果能正常运行则表示配置成功:

#include <iostream>
extern "C"{
#include "libavcodec/avcodec.h"
#include <libavformat/avformat.h>
#include "libavutil/avutil.h"
}

int main(int arg,char **argv) {
    // 打印ffmpeg的信息
    std::cout << "av_version_info:" << av_version_info() << std::endl;
    std::cout << "av_version_info:" << avcodec_configuration() << std::endl;
    return 0;
}

运行如果能正常打印出ffmpeg的版本号即表示环境配置成功。

目录
相关文章
|
编解码
ffmpeg环境搭建以及简单使用
ffmpeg环境搭建以及简单使用
ffmpeg环境搭建以及简单使用
|
30天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
106 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
1月前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
57 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
1月前
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
139 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
1月前
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
74 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
|
2月前
|
XML Java Android开发
FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
GSYVideoPlayer是一款国产移动端视频播放器,支持弹幕、滤镜、广告等功能,采用IJKPlayer、Media3(EXOPlayer)、MediaPlayer及AliPlayer多种内核。截至2024年8月,其GitHub星标数达2万。集成时需使用新版Android Studio,并按特定步骤配置依赖与权限。提供了NormalGSYVideoPlayer、GSYADVideoPlayer及ListGSYVideoPlayer三种控件,支持HLS、RTMP等多种直播链接。
100 18
FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
85 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
EasyPusher是一款国产RTSP直播录制推流客户端工具,支持Windows、Linux、Android及iOS等系统。尽管其GitHub仓库(安卓版:https://github.com/EasyDarwin/EasyPusher-Android)已多年未更新,但通过一系列改造,如升级SDK版本、迁移到AndroidX、指定本地NDK版本及更新Gradle版本等,仍可在最新Android Studio上运行。以下是针对Android Studio Dolphin版本的具体改造步骤。
60 3
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
|
1月前
|
Android开发 开发者
FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件
谷歌推出的Transformer,作为Jetpack Media3架构的一部分,助力开发者实现音视频格式转换与编辑。Media3简化了媒体处理流程,提升了定制性和可靠性。Transformer可用于剪辑、添加滤镜等操作,其示例代码可在指定GitHub仓库中找到。要使用Transformer,需在`build.gradle`中添加相关依赖,并按文档编写处理逻辑,最终完成音视频转换任务。具体步骤包括配置剪辑参数、设置空间效果以及监听转换事件等。
52 0
FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件

热门文章

最新文章