【秒懂音视频开发】04 您所在的位置:网站首页 windows中的音视频播放工具有哪些 【秒懂音视频开发】04

【秒懂音视频开发】04

2024-07-17 13:24| 来源: 网络整理| 查看: 265

FFmpeg 为什么选择FFmpeg?

每个主流平台基本都有自己的音视频开发库(API),用以处理音视频数据,比如:

iOS:AVFoundation、AudioUnit等 Android:MediaPlayer、MediaCodec等 Windows:DirectShow等 ...

为了让所有平台的开发者都能够学习到音视频开发的通用技术,本教程主要讲解跨平台的音视频开发库FFmpeg。其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据,比如MP3、MP4文件。

简介

FFmpeg的Logo

FFmpeg的名字由FF和mpeg组成。

FF是Fast Forward(译为:快进、快速前进)的简称 mpeg来源于Moving Picture Experts Group(简称:MPEG,译为:动态影像专家小组) MPEG是源自ISO与IEC等国际组织的工作小组 MPEG的其中一项工作是:制定音视频相关的标准(比如压缩标准)

有很多知名项目都采用了FFmpeg,比如:

Google Chrome:浏览器 Firefox:浏览器 VLC:跨平台播放器 MPlayer ijkplayer:bilibili团队开发的Android/iOS播放器框架 Perian:Apple公司的QuickTime组件 下载

网上已经有编译好的FFmpeg,目前最新的Release版本是4.3.2,可以直接下载到项目中进行开发使用。

Windows版本下载:ffmpeg-4.3.2-2021-02-27-full_build-shared.7z 源码下载:ffmpeg-4.3.2.tar.xz 网上编译好的FFmpeg一般是完整版,体积比较大 日后我们可以根据实际需要,对FFmpeg的源码进行裁剪后再进行重新编译

解压ffmpeg-4.3.2-2021-02-27-full_build-shared.7z文件后,目录结构如下所示:

bin 有编译好的可执行程序:ffmpeg.exe、ffplay.exe、ffprobe.exe,可以直接在命令行上使用,比如 ffplay xx.mp4:可以直接播放某个视频 ffmpeg -version:可以查看FFmpeg的版本号 有运行时需要用到的动态库文件(*.dll) doc:FFmpeg的使用文档 include:开发时需要包含的头文件 lib:链接时需要用到的库文件

目录结构

Qt

如果要想开发一个播放器,肯定得编写界面,同样为了保证跨平台开发,这里采用的GUI库是Qt,官方的开发工具QtCreator是跨平台的(支持Windows、Mac、Linux)。Qt开发采用的编程语言是C++。

下载

本教程中选择5.14.2版本(从5.15版本开始是收费版本)。

下载地址:https://download.qt.io/archive/qt/5.14/5.14.2/ Windows系统选择下载:qt-opensource-windows-x86-5.14.2.exe

qt安装包

安装

Next

需要先注册,再进行登录。 先注册,再登录

下一步

下一步

选择安装路径

勾选MinGW 64bit编译器(我电脑的系统是64bit)。 勾选编译器

如果后期想阅读Qt源码,就选择勾选Qt源码。 勾选源码

默认已经勾选了QtCreator。 默认已经勾选QtCreator

许可协议

开始菜单快捷方式

安装

解决控制台中文乱码

工具 -> 选项。

文本编辑器 -> 行为 -> 文本编码 -> 默认编码。

设置为UTF-8

开发初探 第一个Qt项目

打开QtCreator,文件 -> 新建文件或项目。

新建项目

Application -> Qt Widgets Application。

Qt Widgets Application

设置项目名称和项目的存放路径。 项目名称和项目的存放路径 下一步

QtCreator默认会创建一个MainWindow类(主窗口)。 下一步 下一步

勾选MinGW编译器。 下一步 完成

双击打开mainwindow.ui文件,可以往右边的主窗口中添加一些界面元素(比如按钮)。 双击打开mainwindow.ui文件 拖拽

点击左下角的运行按钮(绿色三角形),即可看到一个窗口界面,这个就是QtCreator默认创建的主窗口(MainWindow对象)。

消除警告

每次运行Qt程序,你的控制台可能都会出现以下警告信息:QT_DEVICE_PIXEL_RATIO已经过期。

Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use: QT_AUTO_SCREEN_SCALE_FACTOR to enable platform plugin controlled per-screen factors. QT_SCREEN_SCALE_FACTORS to set per-screen DPI. QT_SCALE_FACTOR to set the application global scale factor.

解决方案:设置环境变量QT_SCALE_FACTOR为1即可。

#include "mainwindow.h" #include // 导入头文件【也可以不导入,因为中已经包含了】 // #include int main(int argc, char *argv[]) { // 通过qputenv函数设置QT_SCALE_FACTOR为1 qputenv("QT_SCALE_FACTOR", QByteArray("1")); QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } 集成FFmpeg到Qt项目中

在Windows中,我们最终是通过调用FFmpeg动态库(dll)中的函数来操作音视频数据,使用dll的其中一种方式是需要用到3种文件:

.h:头文件(Header File) 包含了函数的声明 通过#include去导入相应的头文件 .dll:动态链接库(Dynamic Link Library) 包含了函数的具体实现代码 Windows程序会在运行过程中,动态调用dll中的函数 .lib或.dll.a:(动态链接库的)导入库(Import Library) .lib:用于MSVC编译器中 .dll.a:用于MinGW编译器中 包含了dll中函数的入口,用于辅助找到并调用dll中的函数 最终需要链接到Windows程序中(比如合并到exe文件中)

值得一提的是,在Windows中,静态链接库(Static Link Library)的扩展名也是.lib、.dll.a。静态链接库和导入库的区别是:

静态链接库:包含了函数的具体实现代码 导入库:不包含函数的具体实现代码(函数的具体实现代码存储在dll中) 修改.pro文件 # 设置头文件的目录,以便编译器能够找到头文件 INCLUDEPATH += %FFMPEG_HOME%/include # 设置导入库的目录和需要链接的导入库 LIBS += -L%FFMPEG_HOME%/lib \ -lavcodec \ -lavdevice \ -lavfilter \ -lavformat \ -lavutil \ -lpostproc \ -lswscale \ -lswresample #号后面的内容是注释 %FFMPEG_HOME%表示ffmpeg-4.3.2-2021-02-27-full_build-shared.7z解压后的目录 需要根据你的实际情况修改为真实的路径 -L:设置导入库的目录,以便编译器能够找到导入库 -l:设置需要链接的导入库名称 导入库名称需要去掉文件名前面的lib,比如libavcodec.dll.a就写成avcodec 调用函数

在main.cpp中调用av_version_info函数,获取FFmpeg的版本信息。

#include "mainwindow.h" #include // 为了使用qDebug函数 #include // FFmpeg是C语言库 // 有了extern "C",才能在C++中导入C语言函数 extern "C" { #include } int main(int argc, char *argv[]) { // 打印版本信息 qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有