FFmpeg-chapter3-讀取視頻流(原理篇)

ffmpeg網站:About FFmpeg

1?庫介紹

(1)libavutil是一個包含簡化編程函數的庫,包括隨機數生成器、數據結構、數學例程、核心多媒體實用程序等等。

(2)libavcodec是一個包含音頻/視頻編解碼器的解碼器和編碼器的庫。

(3)libavformat是一個包含多媒體容器格式的拆裝器和拆裝器的庫。

(4)libavdevice是一個包含輸入和輸出設備的庫,用于抓取和呈現許多常見的多媒體輸入/輸出軟件框架,包括Video4Linux、Video4Linux2、VfW和ALSA。

(5)libavfilter是一個包含媒體過濾器的庫。 libswscale是一個執行高度優化的圖像縮放和色彩空間/像素格式轉換操作的庫。

(6)libswresample是一個執行高度優化的音頻重采樣,重矩陣和樣本格式轉換操作的庫。

2?實現步驟

上面是主要用到的函數

(1)av_register_all(): 注冊 FFmpeg 支持的所有解碼器、編碼器、格式等;

(2)avformat_network_init(): 初始化網絡支持(如果需要從網絡流中讀取數據);

調用一次即可

(3)avformat_alloc_context(): 分配一個 AVFormatContext,它是 FFmpeg 中用于管理多媒體文件或流的核心結構。返回值是一個指向 AVFormatContext 的指針。

(4)avformat_open_input(): 打開一個輸入文件或流,并將其信息加載到 AVFormatContext 中。這一步會解析文件格式(如 MP4、AVI 等),并為后續的流處理做準備。

(5)avformat_find_stream_info(): 獲取輸入文件或流的詳細信息,包括音視頻流的編碼格式、幀率、分辨率等。這一步會填充 AVFormatContext 中的 AVStream 信息。

(6)av_read_frame(): 從輸入文件或流中讀取一幀數據。每次調用 av_read_frame() 會返回一個 AVPacket,它包含了一幀的編碼數據。如果讀取成功,繼續處理幀數據;如果讀取失敗或到達文件末尾,則停止。

(7)AVPacket: 包含編碼的幀數據(如壓縮的視頻或音頻數據)。AVFrame: 包含解碼后的幀數據(如解壓縮后的視頻或音頻數據)。AVPacket 需要通過解碼器(如 avcodec_send_packet()avcodec_receive_frame())解碼為 AVFrame

(8)avformat_close_input(): 關閉輸入文件或流,并釋放相關資源。這一步會釋放 AVFormatContext 中的所有流信息。

(9)avformat_free_context(): 釋放 AVFormatContext 及其占用的內存。

總結:

(1)初始化 FFmpeg 環境。

(2)創建并初始化 AVFormatContext

(3)打開輸入文件或流,獲取流信息。

(4)循環讀取幀數據(AVPacket),并通過解碼器解碼為 AVFrame

(5)處理解碼后的幀數據(如播放、保存等)。

(6)關閉輸入流并釋放資源。

3?代碼

使用VS新建cmake工程實現上述步驟。

參考:

ffmpeg 4.22庫文件:GitCode - 全球開發者的開源社區,開源代碼托管平臺

詳細參考:MMAVPlayer/chapter3 at main · StudyWinter/MMAVPlayer · GitHub

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

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

相關文章

面試(進階) —虛擬列表在什么場景使用,如何實現?

面試(進階) —虛擬列表在什么場景使用,如何實現? 在前端開發中,當需要渲染大量數據時,傳統的渲染方式往往會遇到性能瓶頸。一次性將大量數據渲染到DOM中,不僅會導致頁面加載緩慢,還可能占用大量內存&#x…

Linux Mem -- 關于AArch64 MTE功能的疑問

目錄 1.虛擬地址和物理地址映射完成后,才可以設置虛擬地址對應的memory tag ? 2.各種memory allocator中的address tag從哪來,怎么產生? 2.1 vmalloc allocator 2.2 slub分配器 2.3 用戶可以指定IRG指令產生的address tag 3.kasan…

python-leetcode-顏色分類

75. 顏色分類 - 力扣&#xff08;LeetCode&#xff09; class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""low, mid, high 0, 0, len(nums) - 1while mid < h…

ArcGIS Pro技巧實戰:高效矢量化天地圖地表覆蓋圖

在地理信息系統&#xff08;GIS&#xff09;領域&#xff0c;地表覆蓋圖的矢量化是一項至關重要的任務。天地圖作為中國國家級的地理信息服務平臺&#xff0c;提供了豐富且詳盡的地表覆蓋數據。然而&#xff0c;這些數據通常以柵格格式存在&#xff0c;不利于進行空間分析和數據…

【江科大STM32】TIM輸出比較(學習筆記)

本章圖片文字內容也為重要知識&#xff0c;請馬住&#xff01; 輸出比較簡介 OC&#xff08;Output Compare&#xff09;輸出比較輸出比較可以通過比較CNT與CCR寄存器值的關系&#xff0c;來對輸出電平進行置1、置0或翻轉的操作&#xff0c;用于輸出一定頻率和占空比的PWM波形…

【網絡安全 | 漏洞挖掘】利用文件上傳功能的 IDOR 和 XSS 劫持會話

未經許可,不得轉載。 本文涉及漏洞均已修復。 文章目錄 前言正文前言 想象這樣一個場景:一個專門處理敏感文檔的平臺,如保險理賠或身份驗證系統,卻因一個設計疏漏而成為攻擊者的“金礦”。在對某個保險門戶的文件上傳功能進行測試時,我意外發現了一個可導致大規模賬戶接管…

飛算 JavaAI 如何讓微服務開發快人一步?

在當今競爭激烈的軟件開發領域&#xff0c;微服務架構因其靈活性和可擴展性備受青睞。然而&#xff0c;微服務開發過程復雜&#xff0c;從需求分析到最終代碼實現&#xff0c;每個環節都需要耗費大量時間和精力。飛算 JavaAI 的出現&#xff0c;猶如一道曙光&#xff0c;為開發…

Python—Excel全字段轉json文件(極速版+GUI界面打包)

目錄 專欄導讀1、背景介紹2、庫的安裝3、核心代碼4、完整代碼(簡易版)5、進階版(GUI)總結專欄導讀 ?? 歡迎來到Python辦公自動化專欄—Python處理辦公問題,解放您的雙手 ?????? 博客主頁:請點擊——> 一晌小貪歡的博客主頁求關注 ?? 該系列文章專欄:請點擊——…

2025年光電科學與智能傳感國際學術會議(ICOIS 2025)

重要信息 官網&#xff1a;www.ic-icois.org 時間&#xff1a;2025年3月14-16日 地點&#xff1a;中國-長春 簡介 2025年光電科學與智能傳感國際學術會議&#xff08;ICOIS 2025&#xff09;將于2025年3月14-16日在中國-長春隆重召開。會議將圍繞“光學光電”、“智能傳感”…

企業微信里可以使用的企業內刊制作工具,FLBOOK

如何讓員工及時了解公司動態、行業資訊、學習專業知識&#xff0c;并有效沉淀企業文化&#xff1f;一份高質量的企業內刊是不可或缺的。現在讓我來教你該怎么制作企業內刊吧 1.登錄與上傳 訪問FLBOOK官網&#xff0c;注冊賬號后上傳排版好的文檔 2.選擇模板 FLBOOK提供了豐富的…

YOLOv5 + SE注意力機制:提升目標檢測性能的實踐

一、引言 目標檢測是計算機視覺領域的一個重要任務&#xff0c;廣泛應用于自動駕駛、安防監控、工業檢測等領域。YOLOv5作為YOLO系列的最新版本&#xff0c;以其高效性和準確性在實際應用中表現出色。然而&#xff0c;隨著應用場景的復雜化&#xff0c;傳統的卷積神經網絡在處…

跟我學C++中級篇——定時器的設計

一、定時器 談到定時器&#xff0c;理論上講是各種語言和各種設計都無法避開的一個技術點。對于定時器來說&#xff0c;表面上就是一種時間間隔的處理約定&#xff0c;但對程序來說&#xff0c;可能就是設計層面、接口層面和庫或框架以及系統應用的一個大集合。不同的系統&…

智能機器人加速進化:AI大模型與傳感器的雙重buff加成

Deepseek不僅可以在手機里為你解答現在的困惑、占卜未來的可能&#xff0c;也將成為你的貼心生活幫手&#xff01; 2月21日&#xff0c;追覓科技旗下Dreamehome APP正式接入DeepSeek-R1大模型&#xff0c;2月24日發布的追覓S50系列掃地機器人也成為市面上首批搭載DeepSeek-R1的…

PostgreSQL10 邏輯復制實戰:構建高可用數據同步架構!

PostgreSQL10 邏輯復制實戰&#xff1a;打造高可用數據同步架構&#xff01; 概述 PostgreSQL 10 引入了邏輯復制&#xff08;Logical Replication&#xff09;&#xff0c;為數據庫高可用和數據同步提供了更靈活的選擇。PostgreSQL 復制機制主要分為物理復制和邏輯復制兩種&…

LVS+Keepalived高可用群集配置案例

以下是一個 LVSKeepalived 高可用群集配置案例&#xff1a; 1、環境準備 LVS 主調度器&#xff08;lvs1&#xff09;&#xff1a;IP 地址為 192.168.8.101&#xff0c;心跳 IP 為 192.168.4.101LVS 備調度器&#xff08;lvs2&#xff09;&#xff1a;IP 地址為 192.168.8.102…

原生家庭獨立的藝術:找到自我與家庭的平衡點

原生家庭獨立的藝術&#xff1a;找到自我與家庭的平衡點 &#x1f331; 引言 &#x1f308; 小林剛剛和父母結束了一次激烈的電話對峙。父母堅持認為他應該回到家鄉工作&#xff0c;“這樣我們也能照顧你”&#xff0c;而他則努力解釋自己在大城市的職業規劃。掛掉電話后&…

Java進階——注解一文全懂

Java注解&#xff08;Annotation&#xff09;是一種強大的元數據機制&#xff0c;為代碼提供了附加信息&#xff0c;能簡化配置、增強代碼的可讀性和可維護性。本文將深入探討 Java 注解的相關知識。首先闡述了注解的基礎概念&#xff0c;包括其本質、作用以及核心分類&#xf…

DeepSeek 15天指導手冊——從入門到精通 PDF(附下載)

DeepSeek使用教程系列--DeepSeek 15天指導手冊——從入門到精通pdf下載&#xff1a; https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取碼: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指導手冊——從入門到精通》以系統化學習路徑為核心&…

【智能音頻新風尚】智能音頻眼鏡+FPC,打造極致聽覺享受!【新立電子】

智能音頻眼鏡&#xff0c;作為一款將時尚元素與前沿科技精妙融合的智能設備&#xff0c;這種將音頻技術與眼鏡形態完美結合的可穿戴設備&#xff0c;不僅解放了用戶的雙手&#xff0c;更為人們提供了一種全新的音頻交互體驗。新立電子FPC在智能音頻眼鏡中的應用&#xff0c;為音…

常用的 pip 命令

pip 是 Python 的包管理工具&#xff0c;可用于安裝、卸載、更新和管理 Python 包。以下是一些常用的 pip 命令&#xff1a; 1. 安裝包 安裝最新版本的包 pip install package_namepackage_name 是你要安裝的 Python 包的名稱&#xff0c;例如 pip install requests 可以安裝…