跨平臺播放器開發 (一) QT for MAC OS & FFmpeg 環境搭建
簡介
由於音影片底層基本上是基於 C/C++ 開發的,並且絕大部分開源框架也都是跨平臺的,像 FFmpeg 、WebRTC 、Linphone 、Doubango 、libvlc 等優秀開源專案。如果我們想學習這些框架,並且想基於它二次開發亦或者呼叫它的 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 開發環境。