跨平臺播放器開發 (一) QT for MAC OS & FFmpeg 環境搭建

語言: CN / TW / HK

簡介

由於音影片底層基本上是基於 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 環境:

  • 一、通過命令安裝

```shell 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 編譯需要的依賴項

shell 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

最後在通過原始碼編譯安裝

```shell #!/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 http://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

```cmake

設定 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 開發環境。

專案地址