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环境搭建以及简单使用
|
2月前
|
编解码
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
《FFmpeg开发实战》书中3.4.3节讲解如何将H.264流封装成MP4。H.264流通常以SPS→PPS→IDR帧开始,这一说法通过雷霄骅的H264分析器得到验证。分析器能解析H.264文件但不支持MP4。ZLMediaKit服务器在遇到I帧时会自动插入SPS和PPS配置帧,确保流符合标准格式。若缺少这些帧,客户端拉流时会报错。FFmpeg开发实战:从零基础到短视频上线》书中提供了更多FFmpeg开发细节。
56 0
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
|
1天前
|
JavaScript 前端开发 Java
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
IT寒冬使APP开发门槛提升,安卓程序员需转型。选项包括:深化Android开发,跟进Google新技术如Kotlin、Jetpack、Flutter及Compose;研究Android底层框架,掌握AOSP;转型Java后端开发,学习Spring Boot等框架;拓展大前端技能,掌握JavaScript、Node.js、Vue.js及特定框架如微信小程序、HarmonyOS;或转向C/C++底层开发,通过音视频项目如FFmpeg积累经验。每条路径都有相应的书籍和技术栈推荐,助你顺利过渡。
10 3
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
|
2天前
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
9 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
|
9天前
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
31 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
|
8天前
|
编解码 Java Android开发
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等,可谓功能强大的APP直播框架。另一款APP直播框架RTMP Streamer支持RTMP直播和RTSP直播,不支持SRT协议的直播。而本文讲述的SRT Streamer支持RTMP直播和SRT直播,不支持RTSP协议的直播。有关RTMP Streamer的说明参见之前的文章《使用RTMP Streamer开启APP直播推流》,下面介绍如何使用SRT Streamer开启手机直播。
28 4
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
|
15天前
|
缓存 视频直播 Linux
FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务
《FFmpeg开发实战》书中介绍了轻量级流媒体服务器MediaMTX,适合测试但不适用于生产环境。SRS是一款国产开源服务器,支持RTMP、SRT等协议,适合生产使用。要启用SRS的SRT推流,需配置`srt.conf`,开启SRT服务并配置端口。在确保FFmpeg集成libsrt后,拉流则使用类似但带有`m=request`的地址。在Windows上,同样需要集成libsrt的FFmpeg来使用ffplay拉流。SRS的日志确认了推拉流的成功。书中提供更深入的FFmpeg开发知识。
46 2
FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务
|
22天前
|
视频直播 Windows
FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流
《FFmpeg开发实战》书中介绍了直播中的RTSP、RTMP和SRT协议,SRT提供更低延迟和稳定性。FFmpeg从4.0版起支持SRT,OBS Studio和MediaMTX等工具也已支持。在Windows环境下,通过集成libsrt的FFmpeg,可以建立SRT直播系统。MediaMTX日志显示SRT服务监听8890端口,OBS Studio设置SRT推流至"publish:live"。ffplay和VLC通过"read:live"拉流成功,验证了SRT推拉流功能。更多详情见《FFmpeg开发实战:从零基础到短视频上线》。
54 2
FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流
|
30天前
|
Web App开发 缓存 编解码
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
《FFmpeg开发实战》书中介绍了轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适用于复杂直播场景。SRS是一款强大的开源流媒体服务器,支持多种协议,起初为RTMP,现扩展至HLS、SRT等。在FFmpeg 6.1之前,推送给SRS的HEVC流不受支持。要播放RTMP流,Android应用可使用ExoPlayer,需在`build.gradle`导入ExoPlayer及RTMP扩展,并根据URL类型创建MediaSource。若SRS播放黑屏,需在配置文件中开启`gop_cache`以缓存关键帧。
89 2
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址