阅读 1120

跨平台播放器开发 (一) QT for MAC OS & FFmpeg 环境搭建

简介

由于音视频底层基本上是基于 C/C++ 开发的,并且绝大部分开源框架也都是跨平台的,像 FFmpegWebRTCLinphoneDoubangolibvlc 等优秀开源项目。如果我们想学习这些框架,并且想基于它二次开发亦或者调用它的 API 自己做一个跨平台的项目,如果没有跨平台的经验是很难办到的。于是我就有了一个想法,定一个小目标:先写它一个跨平台的播放器再说 ,写完这个播放器相当于也入门跨平台了。好了废话不多说了,进入该篇正文了,该篇主要介绍如何在 MAC 平台下搭建 QT 和 FFmpeg 开发环境。

环境准备

由于我自己用的是 MAC 电脑,如果想在 Linux 或者是 Win 上面想跑代码怎么办,只能装一个虚拟机了。可以参考该篇文章 给mac装个 vmware 虚拟机

QT

这里我们选择 QT 来进行跨平台开发,因为它基本可以基于一套代码在多个平台上部署项目。

下面介绍各个平台上怎么安装和运行 QT

MAC

之前更新了 MAC OS 系统到最新版 11.3.1 ,QT 不知道为何编译不过了,固下载了最新版本。

进入 QT 官网

从 5.15.0 版本开始 QT 便不再支持离线安装了。所以我们只能通过申请一个账号,在线安装了。

直接点击 Go open source -> Download the Qt Online Installer 最后会根据自己的系统匹配软件,点击 Download 就可以下载了。

接下来就点击下载下来的软件,主页面的样式如下:

跟着指引点击 Next ,

根据指引安装需要的 SDK,

我当前安装了 QT5/QT6 全平台的开发包, 再点击 Next 按钮等待安装,最后直到出现如下操作,证明安装成功了,可以启动开发了。

最后进入主页面,

MAC 下 QT 软件安装完毕!

下面为 QT for Mac 搭建 FFmpeg 环境:

  • 一、通过命令安装

    brew install pkg-config ffmpeg fdk-aac x264 yasm lame x265 zimg zmq libsoxr speex openjpeg libass xvid webp libvpx libvidstab theora snappy rubberband opus dav1d libbluray aom
    
    //配置环境变量
    vim .bash_profile
    //保存环境变量
    source .bash_profile
    //查看安装是否成功
    ffmpeg
    复制代码
  • 二、通过源码编译

    先安装 ffmepg 编译需要的依赖项

    brew install pkg-config  fdk-aac x264 yasm lame x265 zimg zmq libsoxr speex openjpeg libass xvid webp libvpx libvidstab theora snappy rubberband opus dav1d libbluray aom
    复制代码

    最后在通过源码编译安装

    #!/bin/bash
    if [ ! -d "../source" ]; then
      mkdir ../source
      if [ ! -d "../source/ffmpeg" ]; then
      mkdir ../source/ffmpeg
      fi
    fi
    
    ./init_library_for_macos.sh
    
    cd ../source/ffmpeg
    
    echo $PWD
    
    
    if [ ! -d "ffmpeg-4.4" ]; then  
      wget https://ffmpeg.org/releases/ffmpeg-4.4.tar.bz2
      tar -zxvf ffmpeg-4.4.tar.bz2
    fi
    
    cd ffmpeg-4.4
    echo --->$(pwd)
    
    FFMPEG_PREFIX=$(pwd)/../../../libs/
    
    rm -rf $FFMPEG_PREFIX
    
    
    ./configure \
    --prefix=$FFMPEG_PREFIX \
    --enable-shared  \
    --disable-static  \
    --enable-pthreads  \
    --enable-version3  \
    --enable-avresample  \
    --cc=clang  \
    --host-cflags=  \
    --host-ldflags=  \
    --disable-ffplay  \
    --disable-ffmpeg  \
    --disable-ffprobe  \
    --enable-gnutls  \
    --enable-gpl  \
    --enable-libaom  \
    --enable-libbluray  \
    --enable-libdav1d  \
    --enable-libmp3lame  \
    --enable-libopus  \
    --enable-librubberband  \
    --enable-libsnappy  \
    --enable-libtesseract  \
    --enable-libtheora  \
    --enable-libvidstab  \
    --enable-libvorbis  \
    --enable-libvpx  \
    --enable-libwebp  \
    --enable-libx264  \
    --enable-libx265  \
    --enable-libxml2  \
    --enable-libxvid  \
    --enable-lzma  \
    --enable-libfontconfig  \
    --enable-libfreetype  \
    --enable-frei0r  \
    --enable-libass  \
    --enable-libopencore-amrnb  \
    --enable-libopencore-amrwb  \
    --enable-libopenjpeg  \
    --enable-libspeex  \
    --enable-libsoxr  \
    --enable-videotoolbox  \
    --enable-libzmq  \
    --enable-libzimg  \
    --disable-libjack  \
    --disable-indev=jack \
    
    
    make -j8
    make install
    
    cd ../../../libs/
    ls -lht
    复制代码

编译完了之后,直接在 CMakeLists.txt 配置 ffmpeg

#设置 ffmpeg 路径
if(WIN32)
    message("Now is windows")
elseif(APPLE)
    message("Now is Apple systens.")
    set(FFMPEG_PREFIX_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs")
elseif(ANDROID)
    message("Now is ANDROID systens.")
elseif(UNIX)
    message("Now is UNIX systens.")
endif()

#导入 FFMPEG 头文件
include_directories(${FFMPEG_PREFIX_DIR}/include/)
#导入 FFMPEG 库文件
link_directories(${FFMPEG_PREFIX_DIR}/lib/)

#链接库
target_link_libraries(QTFFPlayer PRIVATE
    Qt${QT_VERSION_MAJOR}::Widgets
    #FFmpeg 支持
    avcodec avdevice avfilter avformat avutil swscale
)
复制代码

测试

可以发现 FFmpeg 在 QT for Mac OS 平台下,可以正常调用 API 进行开发了。

总结

MAC 平台上的 QT 环境配置好了,下一篇文章将介绍如何在 Linux 上搭建 QT 和 FFmpeg 开发环境。

项目地址

文章分类
开发工具
文章标签