FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建

简介: FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建

前言

  本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8。


FFmpeg简介

  FFmpeg是领先的多媒体框架,能够解码,编码, 转码,mux,demux,流,过滤和播放人类和机器创建的几乎所有内容。它支持最模糊的古代格式,直至最前沿。无论它们是由某些标准委员会,社区还是公司设计的。它还具有高度的可移植性:FFmpeg可以在各种构建环境,机器体系结构和配置下,跨Linux,Mac OS X,Microsoft Windows,BSD,Solaris等编译,运行并通过我们的测试基础架构FATE。

  库功能介绍

  


FFmpeg下载

  官方地址:http://ffmpeg.org/download.html#releases

  CSDN下载地址:https://download.csdn.net/download/qq21497936/12838391

  QQ群:1047134658(点击“文件”搜索“ffmpeg-3.4.8_源码以及编译后的库”,群内与博文同步更新)

  开发使用当前3.4.8稳定版本:

  

  三个都点击了,下载了,如下图:

  

  经过查看,源码中只有configure和makefile,那么是在linux上编译的,笔者想编译windows平台上的mingw32版本的,说不定哪天就要修改编码呢,别说opencv遇到几次了。


FFmpeg编译

步骤一:准备msys环境

  下个msys安装,当然也可以使用msys2,笔者倾向msys,自己配置自己的开发环境。

  当然安装msys之后,需要将我们Qt5.9.3的mingw32编译工具链拷贝进去,并打开终端窗口将环境输入进去,结果如下:

  

export PATH=$PATH:/mingw530_32/bin/

  

步骤二:重新部署库的源码位置,需要拷贝到msys下去

  

  解压后,如下:

  

步骤三:配置configure

./configure --prefix=/home/21497/compile/ffmpeg/ffmpeg-3.4.8/install

  

./configure --prefix=/home/21497/compile/ffmpeg/ffmpeg-3.4.8/install --disable-x86asm

  

步骤四:解决问题“pr: command not found”

  配置coreutils

  

  

  下载地址:http://gnuwin32.sourceforge.net/packages/coreutils.htm

  直接下载bin文件。

  

  

  

  全拷贝过去,覆盖。

  

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108542400

步骤五:msys有平台问题,msys2没有,配置msys2环境

  下载安装msys2,自带了很多环境,此处注意,我们要用Qt5.9.3的mingw32,如下图:

  

  

export PATH=$PATH:/mingw530_32/bin/

  

步骤六:配置configure切换msys2

./configure --prefix=/home/21497/compile/ffmpeg/ffmpeg-3.4.8/install --disable-x86asm  --enable-shared

  

  

  使用mingw32的环境变量,如下图:

  

  

步骤七:编译

make -j4

  

  

  同样的问题,ar,参照步骤四,后继续:

  

  直接转用make,简单粗暴,原理读者自己理解

  

步骤八:安装make install

  

  


模块化

  


测试Demo

FFmpegManager.h

#ifndef FFMPEGMANAGER_H
#define FFMPEGMANAGER_H
#include <QObject>
extern "C" {
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
    #include <libavdevice/avdevice.h>
    #include <libavformat/version.h>
    #include <libavutil/time.h>
    #include <libavutil/mathematics.h>
}
class FFmpegManager : public QObject
{
    Q_OBJECT
public:
    explicit FFmpegManager(QObject *parent = nullptr);
signals:
public slots:
};
#endif // FFMPEGMANAGER_H

FFmpegManager.cpp

#include "FFmpegManager.h"
#include <QDebug>
#include <QDateTime>
//#define LOG qDebug()<<
//#define LOG qDebug()<<__FILE__<<__LINE__<<
#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")
FFmpegManager::FFmpegManager(QObject *parent)
    : QObject(parent)
{
    LOG << avcodec_configuration();
}


工程模板v1.0.0

  对应工程模板v1.0.0(windows Qt5.9.3 mingw32)


相关文章
|
2月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
91 0
|
2月前
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
217 0
|
3月前
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
2月前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
240 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
2月前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
91 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
2月前
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
191 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
2月前
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
86 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
|
3月前
|
XML Java Android开发
FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
GSYVideoPlayer是一款国产移动端视频播放器,支持弹幕、滤镜、广告等功能,采用IJKPlayer、Media3(EXOPlayer)、MediaPlayer及AliPlayer多种内核。截至2024年8月,其GitHub星标数达2万。集成时需使用新版Android Studio,并按特定步骤配置依赖与权限。提供了NormalGSYVideoPlayer、GSYADVideoPlayer及ListGSYVideoPlayer三种控件,支持HLS、RTMP等多种直播链接。
122 18
FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
|
2月前
|
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开发知识可参考相关书籍。
116 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
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版本的具体改造步骤。
73 3
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher