Compiling FFmpeg to Send Encrypted Streams to Facebook
【摘要】本文敘述如何編譯可以傳送加密串流到 Facebook 的 FFmpeg。
【目錄】
【前言】【步驟】
A. 安裝相依程式
⒈ 安裝執行時的相依程式
⒉ 安裝編譯時的相依程式
B. 取得 FFmpeg 程式碼
C. 設定
D. 編譯與安裝
E. 測試
【後語】
【前言】
A. 現在要傳送影片串流到 Facebook 的粉絲專頁,只能用加密串流。但 Linux 程式庫安裝的 FFmpeg 並無法傳送加密串流,所以必需自己下載程式碼來編譯。
B. 之前曾在 Google 的 Blogger 發表過「編譯可以傳送加密串流到 Facebook 的 ffmpeg」,當時 FFmpeg 是 4.2 版,現在已更新到 4.2.2 版,所以重新編譯,將過程分享於此。
C. 本例所編譯的 FFmpeg 以模仿官方版本為基礎,另外加上傳送加密串流的功能,所以可以取代官版。
D. 本例所使用的作業系統是自組的 Debian GNU/Linux 10。
【步驟】
A. 安裝相依程式
想知道官版 FFmpeg 有哪些相依程式,可以從執行 ffmpeg
時,前面出現的那一大段得知。
先安裝官版的 FFmpeg:
sudo apt install ffmpeg
然後執行:
ffmpeg
上面的紅框 configuration
是編譯時的設定,下面的紅框是執行時的相依程式。
註:以下自己編譯出的檔案會覆蓋已安裝的 FFmpeg,所以不需要先移除官版的。
⒈ 安裝執行時的相依程式
也可以用以下指令得知 FFmpeg 的相依程式:
apt show ffmpeg | grep "Depends:" | sed "s/Depends:\ //; s/,\ */\n/g" | sed "s/\ (.*)//g"
可以全部列入,不需檢查是否已安裝。如果尚未安裝,會進行安裝;若已安裝且是最新版,則會略過;若是舊版,則會更新。
sudo apt install libavcodec58 libavdevice58 libavfilter7 libavformat58 \ libavresample4 libavutil56 libc6 libpostproc55 libsdl2-2.0-0 libswresample3 \ libswscale5
⒉ 安裝編譯時的相依程式
也可以執行以下指令來看其編譯時的選項:
ffmpeg -buildconf
Debian GNU/Linux 10 的內容如下面左欄,右欄則列出相對應的程式/Lib。
configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls libgnutls28-dev --enable-ladspa ladspa-sdk --enable-libaom libaom-dev --enable-libass libass-dev --enable-libbluray libbluray-dev --enable-libbs2b libbs2b-dev --enable-libcaca libcaca-dev --enable-libcdio libcdio-paranoia-dev --enable-libcodec2 libcodec2-dev --enable-libflite flite1-dev --enable-libfontconfig libfontconfig1-dev --enable-libfreetype libfreetype6-dev --enable-libfribidi libfribidi-dev --enable-libgme libgme-dev --enable-libgsm libgsm1-dev --enable-libjack libjack-dev --enable-libmp3lame libmp3lame-dev --enable-libmysofa libmysofa-dev --enable-libopenjpeg libopenjp2-7-dev --enable-libopenmpt libopenmpt-dev --enable-libopus libopus-dev --enable-libpulse libpulse-dev --enable-librsvg librsvg2-dev --enable-librubberband librubberband-dev --enable-libshine libshine-dev --enable-libsnappy libsnappy-dev --enable-libsoxr libsoxr-dev --enable-libspeex libspeex-dev --enable-libssh libssh-dev --enable-libtheora libtheora-dev --enable-libtwolame libtwolame-dev --enable-libvidstab libvidstab-dev --enable-libvorbis libvorbis-dev --enable-libvpx libvpx-dev --enable-libwavpack libwavpack-dev --enable-libwebp libwebp-dev --enable-libx265 libx265-dev --enable-libxml2 libxml2-dev --enable-libxvid libxvidcore-dev --enable-libzmq libzmq3-dev --enable-libzvbi libzvbi-dev --enable-lv2 liblilv-dev --enable-omx libomxil-bellagio-dev --enable-openal libopenal-dev --enable-opengl --enable-sdl2 libsdl2-dev --enable-libdc1394 libdc1394-22-dev --enable-libdrm libdrm-dev --enable-libiec61883 libiec61883-dev --enable-chromaprint libchromaprint-dev --enable-frei0r frei0r-plugins-dev --enable-libx264 libx264-dev --enable-shared
除了以上的程式庫以外,還需要以下的:
libcrystalhd-dev
:根據執行 ffmpeg -decorders
的結果加入
libva-dev
:根據執行 ffmpeg -hwaccels
的結果加入
libvdpau-dev
:根據執行 ffmpeg -hwaccels
的結果加入
最後所安裝編譯時的相依程式如下(依字母排序):
sudo apt install \ flite1-dev frei0r-plugins-dev ladspa-sdk libaom-dev libass-dev libbluray-dev \ libbs2b-dev libcaca-dev libcdio-paranoia-dev libchromaprint-dev libcodec2-dev \ libcrystalhd-dev libdc1394-22-dev libdrm-dev libfontconfig1-dev \ libfreetype6-dev libfribidi-dev libgme-dev libgsm1-dev libjack-dev liblilv-dev \ libmp3lame-dev libomxil-bellagio-dev libopenal-dev libopenjp2-7-dev \ libopenmpt-dev libopus-dev libpulse-dev librsvg2-dev librubberband-dev \ libsdl2-dev libshine-dev libsnappy-dev libsoxr-dev libspeex-dev libssh-dev \ libtheora-dev libtwolame-dev libva-dev libvdpau-dev libvidstab-dev \ libvorbis-dev libvpx-dev libwavpack-dev libwebp-dev libx264-dev libx265-dev \ libxml2-dev libxvidcore-dev libzmq3-dev libzvbi-dev
還有一些編譯時會用到的工具也要安裝:
sudo apt install autoconf automake build-essential yasm
B. 取得 FFmpeg 程式碼
先去 https://ffmpeg.org/releases/ 看看最新的版本為何。目前是 4.2.2 版,可用以下指令下載:
wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.xz
解壓縮後,得到 ffmpeg-4.2.2 目錄。
C. 設定
以上官方的選項之外,還需要以下的:
--enable-openssl
傳送加密串流所需
--enable-nonfree
使用 openssl
所需
這大概就是官版不能傳送加密串流的原因。使用 nonfree
就不能自由流通了。
以上官方的選項中必需去掉以下的:
--enable-gnutls
:和 openssl
衝突
--enable-libiec61883
:已安裝 libiec61883-dev
卻找不到,設定時有錯而中斷
--enable-libmysofa
:make
時有錯而中斷
最後所用的設定如下(依字母排序):
./configure \ --arch=amd64 --disable-filter=resample --disable-stripping --enable-avisynth \ --enable-avresample --enable-chromaprint --enable-frei0r --enable-gpl \ --enable-ladspa --enable-libaom --enable-libass --enable-libbluray \ --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 \ --enable-libdc1394 --enable-libdrm --enable-libflite --enable-libfontconfig \ --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm \ --enable-libjack --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt \ --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband \ --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex \ --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab \ --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp \ --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid \ --enable-libzmq --enable-libzvbi --enable-lv2 --enable-nonfree --enable-omx \ --enable-openal --enable-opengl --enable-openssl --enable-sdl2 --enable-shared \ --extra-version='1~deb10u1' --incdir=/usr/include/x86_64-linux-gnu \ --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened
在 ffmpeg-4.2.2 目錄中開啟虛擬終端機,執行之。
D. 編譯與安裝
sudo make && sudo make install
這大概要 10~15 分鐘。
E. 測試
完成了以後執行 ffmpeg
,畫面如下圖,可以看到是最新版且加密要用的都有了。
【後語】
A. 自己安裝的不會包含在 apt
的已安裝程式清單中。所以更新時,要重新編譯。
B. 安裝好後,編譯時的工具程式、下載的 FFmpeg 壓縮檔和解壓縮的目錄皆可移除。但是編譯時的相依程式倒未必能全部移除。而執行 ffmpeg
時的相依程式是當然不能移除的。
C. 下一篇敘述用 FFmpeg 在 Facebook 直播視訊的方法。