PHP视频处理器安装环境搭建

背景缘由

开发过程中,客户需要上传视频的时候,要求获取视频中的某一帧图片作为界面展示。目前已知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 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

写成Dockerfile 就更好了

1年前 评论

使用阿里云函数计算 ,或者视频点播 更划算

1年前 评论
laaa (作者) 1年前
sanders 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!