視頻存儲開源方案

項目成熟度

GitHub - ceph/ceph: Ceph is a distributed object, block, and file storage platform

GitHub - minio/minio: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.

GitHub - seaweedfs/seaweedfs: SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lake, for billions of files! Blob store has O(1) disk seek, cloud tiering. Filer supports Cloud Drive, cross-DC active-active replication, Kubernetes, POSIX FUSE mount, S3 API, S3 Gateway, Hadoop, WebDAV, encryption, Erasure Coding.

項目GitHub Star 數量(截至 2025 年 5 月)貢獻者數量初始發布時間主要開源協議
Ceph≈15.0K(穩定增長,社區成熟)4101172+2010 年LGPL
MinIO≈52.7K(快速增長,高人氣)58421+2014 年GNU AGPL v3
SeaweedFS≈24.2K(中等增速,技術優勢驅動)39146+2015 年Apache-2.0

功能區別

對比維度CephMinIOSeaweedFS
功能定位統一存儲(對象、塊、文件)專注對象存儲(100% S3兼容)專注對象存儲(支持小文件優化,兼顧大文件)
適用場景超大規模、多協議需求(混合云、實時處理)中小規模、云原生、單一對象存儲需求高并發讀寫、海量小文件場景(如日志、圖片),也可用于大文件存儲
性能依賴硬件和調優(如SSD加速),多協議負載均衡高吞吐量,適合大文件(MP4)的并發讀寫高吞吐低延遲,支持并行讀寫(通過Volume服務器分散負載)
數據冗余支持多副本或糾刪碼,跨數據中心容災糾刪碼(默認),容錯能力高(半數節點故障容忍)支持糾刪碼和復制策略,容錯靈活(可自定義副本數)
部署復雜度復雜(需配置Monitor/OSD/MDS等組件)簡單(單文件或容器化部署)較簡單(Master+Volume架構,單機或分布式一鍵部署)
運維成本高(依賴專業團隊調優)低(自動化管理,Web界面監控)中等(需管理Master節點,但組件輕量)
擴展性動態擴容(在線添加節點,自動平衡數據)靜態擴容(需手動添加節點,擴展期間可能影響性能)動態擴容(可添加Volume節點,自動分配數據)
生態兼容性多協議支持(與OpenStack/Kubernetes集成)無縫兼容S3生態(AWS CLI/SDK等)兼容S3(部分API支持),提供Filer網關擴展文件系統接口
硬件成本高(需高性能硬件支撐多協議負載)低(普通硬件即可滿足)極低(輕量級設計,普通硬件高效運行)
一致性模型 強一致性(數據立即可用)最終一致性(大規模并發時可能延遲)最終一致性(默認),可配置強一致性
單點風險無(分布式架構無中心節點)無(分布式架構無中心節點)依賴Master節點(需部署多Master避免單點故障)
選型建議超大規模、多協議、強一致性需求中小規模、輕量級、S3兼容需求高并發讀寫、海量文件存儲、低成本場景

總結

  • MinIO 適合 S3 兼容和快速交付;

  • Ceph 適合復雜企業級需求;

  • SeaweedFS 適合高并發、低成本場景,需注意 Master 節點的高可用設計。

MinIO C++ SDK

MinIO C++ SDK 是簡單存儲服務(又名 S3)客戶端,用于對任何 Amazon S3 兼容的對象存儲服務執行存儲桶和對象作。使用時需遵循 Apache License 2.0 協議。商用時的具體要求:

  • 保留版權聲明和許可證聲明 :在軟件的文檔和源代碼中,必須保留原始的版權聲明和許可證聲明。這是對原作者權益的基本尊重,也是確保軟件合法使用的重要依據。

  • 明確專利授權 :如果軟件中包含了貢獻者的專利技術,Apache License 2.0 要求明確專利授權,但不對專利授權的范圍做出限制,貢獻者向用戶提供良好的法律保障。

  • 免責聲明 :提供代碼的組織或個人應提供免責聲明,說明本軟件只用于非商業性質的個人學習、研究或其他非商業活動。

除了 MinIO 服務器外,還兼容以下對象存儲服務:

存儲服務說明
Amazon S3最知名的云存儲服務,提供高擴展性和耐用性。
阿里云 OSS阿里云的對象存儲服務,適合大規模數據存儲。
騰訊云 COS騰訊云的對象存儲服務,支持多種數據存儲場景。
華為云 OBS華為云的對象存儲服務,提供高性能和高可靠性的存儲。
Google Cloud StorageGoogle 提供的云存儲服務,與 S3 兼容。
IBM Cloud Object StorageIBM 的云存儲服務,支持多種數據存儲需求。

MinIO C++ SDK 的兼容性基于其對 Amazon S3 協議的實現,因此任何支持該協議的對象存儲服務理論上都可以與 MinIO C++ SDK 配合使用。

版本和依賴項

MinIO C++ SDK 目前的版本為 0.3.0,需要:

  • C++17 編譯器支持

  • CMake 3.10 或更高版本(用于建筑)

  • vcpkg 包管理器(建議用于依賴項管理)

關鍵依賴項包括:

Library目的
curlppHTTP communication
openssl加密和 TLS 支持
nlohmann-jsonJSON parsing
pugixmlXML parsing
inih配置解析
zlib壓縮(Windows 平臺)

核心功能

桶操作相關

存儲桶作允許您在與 S3 兼容的存儲中創建、列出、檢查是否存在和刪除存儲桶。存儲桶充當對象的容器,并提供一種組織和控制對數據的訪問的方法。

操作描述方法
生成存儲桶創建新存儲桶Client::MakeBucket
列出存儲桶列出經過身份驗證的用戶的所有存儲桶Client::ListBuckets
存儲桶存在檢查存儲桶是否存在Client::BucketExists
刪除存儲桶刪除空存儲桶Client::RemoveBucket

其他存儲桶操作

SDK 還支持用于管理 Bucket 配置的作:

  • 存儲桶策略:使用 和 控制對存儲桶和對象的訪問GetBucketPolicy``SetBucketPolicy

  • 存儲桶加密:使用 和 管理服務器端加密設置GetBucketEncryption``SetBucketEncryption

  • 存儲桶生命周期:使用 和 定義對象生命周期規則GetBucketLifecycle``SetBucketLifecycle

  • 存儲桶通知:使用 和 配置事件通知GetBucketNotification``SetBucketNotification

  • 存儲桶標記:將元數據標簽分配給具有 和 的存儲桶GetBucketTags``SetBucketTags

  • 存儲桶版本控制:使用 和 啟用和配置對象版本控制GetBucketVersioning``SetBucketVersioning

  • 存儲桶復制:使用 和 配置跨區域復制GetBucketReplication``SetBucketReplication

對象操作相關

對象作提供了上傳、下載、復制和管理存儲桶中的對象(文件)的核心功能。

操作描述方法
放置對象將對象上傳到存儲桶Client::PutObject
獲取對象下載帶有 callback 的對象以進行數據處理Client::GetObject
下載對象將對象下載到本地文件Client::DownloadObject
上傳對象將本地文件作為對象上傳Client::UploadObject
復制對象將對象從一個位置復制到另一個位置Client::CopyObject
Stat 對象檢索對象元數據Client::StatObject
刪除對象刪除單個對象Client::RemoveObject
移除對象在單個請求中刪除多個對象Client::RemoveObjects
列出對象列出支持迭代的存儲桶中的對象Client::ListObjects

高級功能

  • 大文件的分段上傳

  • 對象保留和依法保留

    • 對象保留是一種機制,可以防止對象在指定時間段內被刪除或修改。

    • 依法保留是一種獨立于時間的保護機制,無論保留期是否到期,都無法刪除對象。

  • 服務器端加密

  • 預簽名 URL

  • 存儲桶通知

    • 允許您實時監聽存儲桶中發生的事件,當對象被創建、刪除或訪問時,系統會發送通知

  • 選擇對象內容(查詢對象)

對象分段

允許將大型對象分成較小的部分,以實現更高效、更可靠的上傳。MinIO C++ SDK 本身未明確提供自動重傳的接口,但可以通過編程邏輯實現重傳功能。例如,在上傳文件時,如果出現網絡錯誤等異常情況,可以在代碼中捕獲異常并重新發起上傳請求。

操作描述方法
創建分段上傳啟動分段上傳并返回上傳 IDClient::CreateMultipartUpload
上傳 Part在分段上傳中上傳段Client::UploadPart
完成分段上傳通過組裝之前上傳的段來完成分段上傳Client::CompleteMultipartUpload
Abort Multipart Upload中止分段上傳并釋放所有資源Client::AbortMultipartUpload

選擇對象內容(查詢對象)

支持使用 SQL 表達式從對象中檢索數據子集。

S3 Select 功能 :允許用戶使用 SQL 語法查詢存儲在 MinIO 中的 CSV、JSON 或 Parquet 格式對象。通過 SQL 類型的語句實現高效的文件內容檢索。例如,可以查詢 CSV 文件中特定列的值,或者從 JSON 文件中提取符合條件的數據。

使用場景:結合 Elasticsearch 在上傳文件到 MinIO 時,將文件的元數據和內容摘要同步到 Elasticsearch 中創建索引。這樣可以通過 Elasticsearch 的全文搜索功能實現更靈活和高效的查詢,尤其適用于需要復雜搜索邏輯的場景

核心功能總結

客戶端 API 提供了一組全面的作來管理存儲桶和對象。下表列出了主要操作:

類別描述
存儲桶作創建新存儲桶
列出所有存儲桶
檢查存儲桶是否存在
刪除存儲桶
對象作上傳對象
下載對象
獲取對象元數據
刪除對象
列出存儲桶中的對象
復制對象
將文件作為對象上傳
將對象下載到文件
刪除多個對象
Multipart啟動分段上傳
上傳對象的一部分
完成分段上傳
中止分段上傳
特殊作使用 SQL 查詢對象內容
獲取存儲桶事件的通知
通過組合其他對象來創建對象

流媒體特別功能

HTTP-Range支持:MinIO通過HTTP-Range請求實現音視頻的在線拉流播放與進度條拖拽功能。當用戶在播放器中拖動進度條時,瀏覽器會向MinIO服務端發送一條包含Range字段的Http-Request請求,指定當前請求視頻進度的開始字節數及緩存結束字節數。MinIO根據收到的請求范圍返回相應的數據,從而使播放器能夠快速定位到指定位置進行播放,實現了進度條的精準拖拽。

多版本支持:MinIO支持多版本的功能,這在處理多媒體文件時非常有用。例如,當需要對視頻進行編輯或修復時,用戶可以基于原始文件的不同版本進行操作,而不用擔心破壞原有的數據,同時也便于在出現問題時快速回滾到之前的狀態。

MinIO實現短視頻對象存儲與點播案例

筆者團隊使用MinIO對象存儲作為底層存儲,開發部署短視頻點播地址映射、地址動態代理等服務,實現一套短視頻存儲點播平臺。其實現框架如下圖:

點播平臺大致可分為存儲層、服務層與應用層。存儲層主要部署MinIO對象存儲系統及關系數據庫,MinIO用來存儲視頻對象,關系數據庫用來存儲視頻元數據;服務層提供各類存儲訪問服務接口,如文件上傳下載、視頻播放地址生成、對象地址映射等;應用層為前端提供應用功能,包括視頻上傳、查詢、播放等功能。

基于MinIO對象存儲的點播平臺數據訪問流程如下圖所示:

1)視頻上傳與轉碼,統一采用mp4格式作為視頻存儲和點播格式,為了兼容多種格式視頻文件上傳,需開發轉碼模塊將其轉碼成mp4格式進行存儲,將其首先存入本地磁盤緩存。

2)直播錄制,在直播的過程中開啟錄制,將錄制的文件首先存入本地磁盤緩存。

3)上傳文件,視頻轉碼完成或錄制完成后,調用MinIO文件上傳接口,將視頻文件上傳至MinIO集群/聯邦,由etcd對MinIO集群提供注冊發現服務。

4)點播地址映射,服務端部署點播地址映射服務模塊,實現MinIO視頻點播地址與視頻ID的映射,使存儲介質的改變不影響視頻點播拉流。

5)地址動態代理服務,出于系統安全性考慮,我們不希望暴露MinIO存儲地址與存儲細節,希望增加一層網關進行媒體流的轉發或地址的代理,對外提供統一的服務地址,使用地址動態代理,可以根據點播請求的視頻ID不同,動態代理至不同的視頻播放地址,實現視頻存儲細節與服務地址的解耦。

6)拉流播放,客戶端或瀏覽器使用HTTP協議流式拉取視頻文件并播放。

缺點

內置不含重連重傳,需在應用層捕獲異常重新請求。

基于 MinIO 對象存儲框架的短視頻點播平臺設計-CSDN博客

ffmpeg拉取minio里的視頻文件 - CSDN文庫

【minio】Ubuntu安裝MinIO文件服務器并通過C++上傳下載_minio c++-CSDN博客

基于 MinIO 對象存儲框架的短視頻點播平臺設計_騰訊新聞

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

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

相關文章

典型城市工況數據(Drive Cycle)用于車輛仿真

典型城市工況數據(Drive Cycle)用于車輛仿真 在車輛仿真過程中,使用典型的城市工況數據(Drive Cycle)是評估車輛性能、能耗和排放的關鍵步驟。以下是一些常用的典型城市工況數據及其來源,這些數據可以幫助…

深度解析新能源汽車結構與工作原理

一、核心系統架構 新能源汽車主要由三大核心系統構成: 電力驅動系統:包含永磁同步電機、電機控制器(MCU)及減速器,采用三合一集成設計實現輕量化。永磁同步電機通過電磁感應原理將電能轉化為機械能,其效率可…

跳板問題(貪心算法+細節思考)

首先直接看題&#xff1a; 這題直接貪心其實問題不大&#xff1a; 下面先展示我的一個錯誤代碼&#xff1a; # include<iostream> # include<vector> # include<algorithm>using namespace std;int main() {int N,M;cin>>N>>M;vector<vecto…

pgsql 一些用法

要查詢PostgreSQL數據庫中剩余的磁盤空間&#xff0c;可以使用以下方法&#xff1a; 使用SQL查詢函數&#xff1a; 可以通過pg_size_pretty函數來查看數據庫的總磁盤使用情況&#xff0c;例如&#xff1a; SELECT pg_size_pretty(pg_database_size(‘your_database_name’)); …

【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球

【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球 文章目錄 【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球前言高斯函數一維高斯多維高斯 橢球基本定義一般二次形式 3D高斯橢球3D高斯與橢球的關系各向同性(Isotropic)和…

unix的定時任務和quartz和spring schedule的cron表達式區別

一、核心區別對比表 對比項Unix CrontabQuartzSpring Scheduled表達式位數5 位6 位或 7 位6 位秒級支持? 不支持&#xff08;最小單位是分鐘&#xff09;? 支持? 支持年字段? 無? 可選第7位? 不支持特殊符號支持較少&#xff08;如 *, ,, -, /&#xff09;很豐富和 Quar…

C++基礎算法————遞推

C++遞推:初學者的進階之旅 一、引言 在計算機編程的世界里,C++ 以其強大的功能和高效性受到眾多開發者的青睞。遞推作為一種重要的編程思想,在解決各種復雜問題時發揮著關鍵作用。對于初學者來說,理解并掌握遞推不僅可以提升編程能力,還能培養邏輯思維和問題解決能力。本…

QTabWidget垂直TabBar的圖標和文本水平顯示

一般情況下,我們可以通過QTabWidget的setTabPosition方法來設置TabBar的位置,比如設置在左邊 ui->tabWidget->setTabPosition(QTabWidget::West); 但是此時圖標和文字都是垂直的,如果讓它們水平顯示呢? 一.效果 二.原理 在繪制TabBar時,順時針旋轉90度 三.實現 …

HCIP-AI培養計劃,成為新時代AI解決方案架構高級工程師

01 華為認證是什么&#xff1f; 華為認證&#xff08;Huawei Certification&#xff09;是面向數字化時代構建的ICT人才培訓與認證體系。 當前超過68萬來自全球180多個國家和地區的各行業精英已經取得華為認證&#xff0c;如今全球每年超過10萬名學員通過考試獲得華為認證。 華…

【RabbitMQ】基于Spring Boot + RabbitMQ 完成應用通信

文章目錄 需求描述創建項目訂單系統(生產者)完善配置聲明隊列下單接口啟動服務 物流系統(消費者)完善配置監聽隊列啟動服務 格式化發送消息對象SimpleMessageConverter定義一個對象生產者代碼消費者運行程序 JSON定義一個對象生產者代碼定義轉換器消費者代碼運行程序 需求描述 …

OpenGL Chan視頻學習-7 Writing a Shader inOpenGL

bilibili視頻鏈接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函數網站&#xff1a; docs.gl 說明&#xff1a; 1.之后就不再整理具體函數了&#xff0c;網站直接翻譯會更直觀也會…

Vue 3.0中復雜狀態如何管理

在現代前端應用中&#xff0c;狀態管理扮演著至關重要的角色。一個良好的狀態管理方案能夠&#xff1a; 1. 保持應用數據的一致性和可預測性&#xff1b; 2. 簡化組件間的通信和數據共享&#xff1b; 3. 提高代碼的可維護性和可測試性&#xff1b; 4. 優化應用性能&#xf…

AGI大模型(33):LangChain之Memory

大多數的 LLM 應用程序都會有一個會話接口,允許我們和 LLM 進行多輪的對話,并有一定的上下文記憶能力。但實際上,模型本身是不會記憶任何上下文的,只能依靠用戶本身的輸入去產生輸出。而實現這個記憶功能,就需要額外的模塊去保存我們和模型對話的上下文信息,然后在下一次…

leetcode513. 找樹左下角的值:層序遍歷中的深度與順序控制之道

一、題目深度解析與核心訴求 在二叉樹的眾多問題中&#xff0c;尋找最深層最左節點的值是一個兼具趣味性與代表性的問題。題目要求我們在給定的二叉樹中&#xff0c;找到深度最大的那一層中最左邊的節點值。如果存在多個最深層&#xff0c;只需返回最左邊節點的值即可。 這個…

制作一款打飛機游戲54:子彈編輯UI

今天&#xff0c;我們將繼續工作在我們的子彈模式系統上&#xff0c;創建一些簡單的子彈&#xff0c;并為其設計用戶界面&#xff08;UI&#xff09;。 自動保存功能的重要性 首先&#xff0c;我想提一下自動保存功能。這個功能在編輯器中非常重要&#xff0c;因為我們經常犯…

線程封裝與互斥

目錄 線程互斥 進程線程間的互斥相關背景概念 互斥量mutex 互斥量的接口 初始化互斥量有兩種方法&#xff1a; 銷毀互斥量 互斥量加鎖和解鎖 改進售票系統 互斥量實現原理探究 互斥量的封裝 線程互斥 進程線程間的互斥相關背景概念 臨界資源&#xff1a;多線程執行流共…

【系統設計】2WTPS生產級數據處理系統設計Review

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀與評論&#x1f604;。 目錄 反正能用的系統問題分析方案一&#xff1a;簡單多…

歷年北京理工大學保研上機真題

2025北京理工大學保研上機真題 2024北京理工大學保研上機真題 2023北京理工大學保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/problem?classification1 判斷身份證校驗位是否正確 題目描述 給定一個身份證號碼&#xff0c;判斷其最后一位校驗位是否正確。 如果…

uni-app學習筆記十--vu3綜合練習

鞏固提升前面學習的知識點,主要涉及下面這方面的運用&#xff1a; 1.v-for運用; 2.v-model雙向綁定&#xff1b; 3.confirm確認事件&#xff1b; 4.click點擊事件&#xff1b; 5.控制按鈕的可點擊和不可點擊&#xff1b; 6.集合刪除和追加元素&#xff0c;獲取集合元素的…

AI時代新詞-AI芯片(AI - Specific Chip)

一、什么是AI芯片&#xff1f; AI芯片&#xff08;AI - Specific Chip&#xff09;是指專為人工智能&#xff08;AI&#xff09;計算任務設計的芯片。與傳統的通用處理器&#xff08;如CPU&#xff09;相比&#xff0c;AI芯片針對深度學習、機器學習等AI應用進行了優化&#x…