PHP視訊處理器安裝環境搭建

lijianlin0204發表於2020-09-03

背景緣由

開發過程中,客戶需要上傳視訊的時候,要求獲取視訊中的某一幀圖片作為介面展示。目前已知PHP已有視訊處理器擴充套件(php-ffmpeg)可直接使用,安裝使用後發現,php-ffmpeg對服務環境有一定的依賴,故此將此實踐分享出來,供大家參考!

服務搭建

  1. 程式碼環境安裝”php-ffmpeg/php-ffmpeg” 擴充套件包

    composer require php-ffmpeg/php-ffmpeg
  2. liunx環境伺服器安裝ffmpeg

    • 將檔案依賴包【ffmpeg-4.2.2.tar.bz2】,上傳到/opt目錄下
    • 解壓檔案
      tar -jxvf ffmpeg-4.2.2.tar.bz2
    • 進入解壓目錄 cd ffmpeg-4.2.2
    • 編譯安裝
      ./configure --disable-x86asm --enable-shared && make && make install
    • 退出到 /opt 目錄 cd /opt
    • 修改使用者組許可權 chown -R www:www ffmpeg-4.2.2
    • 編輯可視檢視版本 vim /etc/ld.so.conf
      // 在裡面加入一句 
      /opt/ffmpeg-4.2.2
    • 使其生效 執行命令 ldconfig
    • 檢視版本資訊 ffmpeg (如果能正常檢視錶示安裝成功)
    • 需要使用該功能,需要在php.ini中 disable_functions 將 proc_open,proc_get_status 兩個函式放開
    • 在nginx伺服器配置中增加可訪問目錄
      vim /usr/local/nginx/conf/fastcgi.conf
      fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/wwwroot/:/tmp/:/proc/:/mnt/data/:/opt/ffmpeg-4.2.2/";
      // 主要新增:
      :/opt/ffmpeg-4.2.2/
    • 重啟伺服器及php-fpm
      /etc/init.d/php-fpm restart

使用案例

    /**
     * 獲取視訊的某一幀圖片
     * 
     * @name    getVideoFrameOfImage
     */
    public static function getVideoFrameOfImage($resource, $second)
    {
        // 資原始檔路徑
        $fileInfo = pathinfo($resource);
        $fileNameNoSuffix = $fileInfo['filename'];
        $dirname = $fileInfo['dirname'];
        if (Config::get('app.ffmpeg')) {
            $ffmpeg = FFMpeg::create(Config::get('app.ffmpeg'));
        } else {
            $ffmpeg = FFMpeg::create();
        }

        $video = $ffmpeg->open($resource);
        $frameName = $dirname . '/' . $fileNameNoSuffix . '.jpg';
        $video->frame(\FFMpeg\Coordinate\TimeCode::fromSeconds($second))->save($frameName);

        return $frameName;
    }

配置獲取(當前展示的windows的,liunx的配置全路徑的可執行檔案即可):

// (windows)視訊壓縮軟體安裝配置
'ffmpeg' => [
    'ffmpeg.binaries' => 'D:\ffmpeg-20200301-1281399-win64-static\ffmpeg-20200301-1281399-win64-static\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'D:\ffmpeg-20200301-1281399-win64-static\ffmpeg-20200301-1281399-win64-static\bin\ffprobe.exe'
],

// (liunx)視訊壓縮軟體安裝配置
'ffmpeg' => [
    'ffmpeg.binaries' => '/opt/ffmpeg-4.2.2/ffmpeg',
    'ffprobe.binaries' => '/opt/ffmpeg-4.2.2/ffprobe'
],
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章