寶塔think PHP8 安裝使用FFmpeg
- 一、 安裝think PHP8
- 二、安裝 FFmpeg
- 1,登錄到寶塔面板。
- 2,進入“軟件商店”。
- 3,搜索“FFmpeg”。
- 4,選擇版本點擊安裝。
- 5,檢查 FFmpeg 是否安裝成功
- 6, 在 ThinkPHP 8 中使用 FFmpeg
- 三、使用 FFmpeg 處理視頻
- 1、使用終端命令轉碼
- 2、用mvc模式
- 3、查看結果
- 四、上傳視頻
- 1,前端代碼
- 2,后端代碼
- 3,上傳結果
一、 安裝think PHP8
1,在站點根目錄下執行命令
composer create-project topthink/think tp
2,配置偽靜態及運行目錄,訪問網站
出現上圖,安裝thinkphp8完成。
二、安裝 FFmpeg
寶塔面板提供了一個很方便的命令行工具來安裝軟件。通過以下步驟安裝 FFmpeg:
1,登錄到寶塔面板。
2,進入“軟件商店”。
3,搜索“FFmpeg”。
4,選擇版本點擊安裝。
5,檢查 FFmpeg 是否安裝成功
安裝完成后,通過 SSH 登錄到你的服務器,然后運行以下命令來檢查 FFmpeg 是否正確安裝:
ffmpeg -version
如果這個命令返回了 FFmpeg 的版本信息,那么說明 FFmpeg 已經成功安裝。
6, 在 ThinkPHP 8 中使用 FFmpeg
在 ThinkPHP 8 中使用 FFmpeg,使用一些現成的 PHP 庫,如 php-ffmpeg/php-ffmpeg。首先通過 Composer 安裝這個庫:
composer require php-ffmpeg/php-ffmpeg
安裝之前檢查php安裝fileinfo擴展
cd /www/server/php/php版本/src/ext/fileinfo
/www/server/php/php版本/bin/phpize
./configure --with-php-config=/www/server/php/php版本/bin/php-config
make && make install
三、使用 FFmpeg 處理視頻
1、使用終端命令轉碼
進入demo.MP4所在文件夾,打開終端輸入以下命令
ffmpeg -i demo.mp4 -profile:v baseline -level 3.0 -s 1920x1080 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls demo.m3u8
2、用mvc模式
創建控制器Video.php
public function convertVideo(){try {// 使用框架路徑助手$inputFile = '需要轉碼視頻問價路徑';$outputDir = '轉換后文件路徑';// 安全驗證if (!file_exists($inputFile)) {throw new \Exception('輸入文件不存在');}// 完整HLS參數配置$command = "ffmpeg -i {$inputFile} -c:v libx264 -c:a aac -f hls -hls_time 10 {$outputDir}";exec($command, $output, $status);if ($status !== 0) {Log::error('轉碼失敗: '.implode("\n", $output));return json(['code' => 500, 'msg' => '轉碼失敗']);}return json(['code' => 200, 'data' => $outputDir]);} catch (\Exception $e) {Log::error($e->getMessage());return json(['code' => 500, 'msg' => $e->getMessage()]);}}
3、查看結果
1,在轉換文件夾中生成.m3u8文件
2,在前端播放.m3u8視頻,代碼如下
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>DPlayer演示</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/dplayer@1.26.0/dist/DPlayer.min.css">
</head>
<body><div id="dplayer"></div><script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script><script src="https://cdn.jsdelivr.net/npm/dplayer@1.26.0/dist/DPlayer.min.js"></script><script>new DPlayer({container: document.getElementById('dplayer'),video: {url: '.m3u8文件url',type: 'hls'}});</script>
</body>
</html>
3,效果圖
四、上傳視頻
1,前端代碼
<!DOCTYPE html>
<html>
<head><link rel="stylesheet" href="/static/layui/css/layui.css">
</head>
<body>
<button type="button" class="layui-btn" id="uploadVideo"><i class="layui-icon"></i>上傳視頻
</button><script src="/static/layui/layui.js"></script>
<script>
layui.use('upload', function(){const upload = layui.upload;// 視頻上傳配置upload.render({elem: '#uploadVideo',url: '接口url',accept: 'video', // 限制視頻類型size: 1024 * 1024 * 1024, // 最大1GBexts: 'mp4|avi|mov|mkv', // 允許格式progress: function(n){console.log('上傳進度:' + n + '%');},done: function(res){if(res.code === 0) {layer.msg('上傳成功');console.log('視頻路徑:', res.data.src);} else {layer.msg(res.msg || '上傳失敗');}},error: function(){layer.msg('上傳異常');}});
});
</script>
</body>
</html>
2,后端代碼
引用類庫
use think\facade\Filesystem;
use think\exception\FileException;
代碼片段
//上傳視頻public function upload(){try {// 獲取上傳文件對象$file = request()->file('file');// 驗證規則(安全關鍵)$validate = ['fileSize' => 1024 * 1024 * 1024, // 1GB'fileExt' => 'mp4,avi,mov,mkv,flv,wmv','fileMime' => 'video/mp4,video/avi,video/quicktime' // MIME類型驗證];// 保存文件$saveName = Filesystem::disk('public')->putFile('videos', $file, 'md5');// 生成訪問路徑$savePath = request()->domain() . '/storage/' . $saveName;return json(['code' => 0,'msg' => '上傳成功','data' => ['src' => $savePath]]);} catch (FileException $e) {return json(['code' => 1, 'msg' => $e->getMessage()]);}}
3,上傳結果
上傳的視頻存到對應的文件夾里。