寶塔think PHP8 安裝使用FFmpeg 視頻上傳

寶塔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">&#xe67c;</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,上傳結果

在這里插入圖片描述
上傳的視頻存到對應的文件夾里。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83845.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 輕松實現 增強版靈活的 滑動式表格視圖

表格視圖組件&#xff0c;支持&#xff1a; 1. 無標題模式&#xff1a;只有數據行也可以正常滑動 2. 兩種滑動模式&#xff1a;固定第一列 或 全部滑動 3. 全面的樣式自定義能力 4. 智能列寬計算 1. 無標題模式支持 設置無標題&#xff1a;調用 setHeaderData(null) 或 …

【Python進階】元類編程

目錄 &#x1f31f; 前言&#x1f3d7;? 技術背景與價值&#x1fa79; 當前技術痛點&#x1f6e0;? 解決方案概述&#x1f465; 目標讀者說明 &#x1f9e0; 一、技術原理剖析&#x1f4ca; 核心概念圖解&#x1f4a1; 核心作用講解&#x1f527; 關鍵技術模塊說明?? 技術選…

DeepSeek模型性能優化:從推理加速到資源調度的全棧實踐

引言 在生產環境中部署DeepSeek模型時,性能優化直接關系到服務質量和運營成本。本文將深入探討從芯片級優化到分布式調度的全棧性能提升方案,涵蓋計算圖優化、內存管理、批處理策略等關鍵技術,并分享在千萬級QPS場景下的實戰經驗,幫助工程團隊突破性能瓶頸,實現成本與效能…

Ctrl+R 運行xxx.exe,發現有如下問題.

CtrlR 運行xxx.exe,發現有如下問題. (1)找不到Qt5Core.all,Qt5Cored.dll,Qt5Gui.dll,Qt5Guid.dll,Qt5Widgets.all,Qt5Widgetsd.dll? (2)之后找不到libwinpthread-1.dll 從這個目錄拷貝相應的庫到運行xx.exe目錄下 方法二:將庫路徑添加到系統PATH環境變量里: 在Path中添加路…

硅基計劃2.0 學習總結 陸 抽象類與接口

文章目錄 一、抽象類1. 定義2. 示例代碼3. 特性 二、接口初識1. 定義2. 命名與語法3. 示例代碼4. 常見特性5. 多接口實現6. 接口的繼承 三、Object類初識1. equals方法2. hascode方法 一、抽象類 1. 定義 請你假設這樣一個場景&#xff0c;我們定義一個人的類&#xff0c;這個…

Linux命令基礎(2)

su和exit命令 可以通過su命令切換到root賬戶 語法&#xff1a;su [-] 用戶名 -符號是可選的&#xff0c;表示是否在切換用戶后加載環境變量&#xff0c;建議帶上 參數&#xff1a;用戶名&#xff0c;表示要切換的用戶&#xff0c;用戶名可以省略&#xff0c;省略表示切換到ro…

C++算法訓練營 Day10 棧與隊列(1)

1.用棧實現隊列 LeetCode&#xff1a;232.用棧實現隊列 請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 實現 MyQueue 類&#xff1a; void push(int x)將元素x推到隊列的末尾 int pop(…

設計模式域——軟件設計模式全集

摘要 軟件設計模式是軟件工程領域中經過驗證的、可復用的解決方案&#xff0c;旨在解決常見的軟件設計問題。它們是軟件開發經驗的總結&#xff0c;能夠幫助開發人員在設計階段快速找到合適的解決方案&#xff0c;提高代碼的可維護性、可擴展性和可復用性。設計模式主要分為三…

【QT】自定義QWidget標題欄,可拖拽(拖拽時窗體變為normal大小),可最小/大化、關閉(圖文詳情)

目錄 0.背景 1.詳細實現 思路簡介 .h文件 .cpp文件 0.背景 Qt Linux&#xff1b;項目遇到問題&#xff0c;解決后特此記錄 項目需要&#xff0c;個性化的標題欄&#xff08;是個widget&#xff09;&#xff0c;在傳統的三個按鈕&#xff08;最大化、最小化、關閉&#xf…

如何用 pnpm patch 給 element-plus 打補丁修復線上 bug(以 2.4.4 修復 PR#15197 為例)

背景 在實際項目開發中&#xff0c;依賴的三方庫&#xff08;如 element-plus&#xff09;難免會遇到 bug。有時候官方雖然已經修復&#xff0c;但新版本升級成本高&#xff0c;或者有兼容性風險。這時&#xff0c;給依賴打補丁是最優雅的解決方案之一。 本文以 element-plus…

Spring AI 入門:Java 開發者的生成式 AI 實踐之路

一、Spring AI 簡介 在人工智能技術快速迭代的今天&#xff0c;Spring AI 作為 Spring 生態系統的新生力量&#xff0c;正在成為 Java 開發者擁抱生成式 AI 的最佳選擇。該框架通過模塊化設計實現了與主流 AI 服務&#xff08;如 OpenAI、Anthropic&#xff09;的無縫對接&…

優化電腦的磁盤和驅動器提高電腦性能和延長硬盤壽命?

磁盤優化 磁盤清理&#xff1a; 使用系統自帶的磁盤清理工具&#xff08;如Windows的“磁盤清理”&#xff09;刪除不必要的文件。清空回收站。刪除臨時文件和緩存。 磁盤碎片整理&#xff08;針對機械硬盤&#xff09;&#xff1a; 定期進行磁盤碎片整理&#xff0c;以提高文…

EDA斷供危機下的冷思考:中國芯片設計軟件的破局之道優雅草卓伊凡

EDA斷供危機下的冷思考&#xff1a;中國芯片設計軟件的破局之道優雅草卓伊凡 一、EDA是什么&#xff1f;芯片行業的”隱形基石” 1.1 EDA技術解析 EDA&#xff08;Electronic Design Automation&#xff0c;電子設計自動化&#xff09;是用于設計和驗證集成電路的軟件工具鏈…

Jpackage

簡介 jpackage - 用于打包自包含 Java 應用程序的工具&#xff0c;是 JDK 14 引入的一個工具。 該工具將 Java 應用程序和 Java 運行時映像作為輸入&#xff0c;并生成包含所有必要依賴項的 Java 應用程序映像。它將能夠生成特定于平臺的格式的本機包&#xff0c;例如包括打包 …

CRM管理軟件的數據可視化功能使用技巧:讓數據驅動決策

在當今數據驅動的商業環境中&#xff0c;CRM管理系統的數據可視化功能已成為企業優化客戶管理、提升銷售效率的核心工具。據企銷客研究顯示&#xff0c;具備優秀可視化能力的CRM系統&#xff0c;用戶決策效率可提升47%。本文將深入解析如何通過數據可視化功能最大化CRM管理軟件…

智慧充電:新能源汽車智慧充電樁的發展前景受哪些因素影響?

全球能源結構轉型與碳中和目標的推進&#xff0c;新能源汽車產業迎來爆發式增長&#xff0c;而智慧充電樁作為其核心基礎設施&#xff0c;發展前景備受關注。智慧充電不僅關乎用戶充電體驗的優化&#xff0c;更是電網平衡、能源效率提升的關鍵環節。 然而&#xff0c;其發展并…

ABAP設計模式之---“簡單設計原則(Simple Design)”

“Simple Design”&#xff08;簡單設計&#xff09;是軟件開發中的一個重要理念&#xff0c;倡導以最簡單的方式實現軟件功能&#xff0c;以確保代碼清晰易懂、易維護&#xff0c;并在項目需求變化時能夠快速適應。 其核心目標是避免復雜和過度設計&#xff0c;遵循“讓事情保…

多模態大語言模型arxiv論文略讀(105)

UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ?? 論文標題&#xff1a;UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ?? 論文作者&#xff1a;Zhaowei…

SQLServer中的存儲過程與事務

一、存儲過程的概念 1. 定義 存儲過程&#xff08;Stored Procedure&#xff09;是一組預編譯的 SQL 語句的集合&#xff0c;它們被存儲在數據庫中&#xff0c;可以通過指定存儲過程的名稱并執行來調用它們。存儲過程可以接受輸入參數、輸出參數&#xff0c;并且可以返回執行…

使用UDP連接ssh

使用UDP連接ssh mosh簡介兩端安裝moshWindows安裝mosh 放行端口使用mosh登錄Linuxdebug mosh簡介 Mosh最大的特點是基于UDP方式傳輸&#xff0c;支持在服務端創建一個臨時的Key供客戶端一次性連接&#xff0c;退出后失效&#xff1b;也支持通過SSH的配置進行認證&#xff0c;但…