Compiling FFmpeg to Send Encrypted Streams to Facebook

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-4.1.4

註:以下自己編譯出的檔案會覆蓋已安裝的 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-libmysofamake 時有錯而中斷


最後所用的設定如下(依字母排序):

./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,畫面如下圖,可以看到是最新版且加密要用的都有了。

ffmpeg-4.2.2

【後語】


A. 自己安裝的不會包含在 apt 的已安裝程式清單中。所以更新時,要重新編譯。

B. 安裝好後,編譯時的工具程式、下載的 FFmpeg 壓縮檔和解壓縮的目錄皆可移除。但是編譯時的相依程式倒未必能全部移除。而執行 ffmpeg 時的相依程式是當然不能移除的。

C. 下一篇敘述用 FFmpeg 在 Facebook 直播視訊的方法。


發表留言