主頁 >  其他 > FFmpeg 音視頻開發 20 年

FFmpeg 音視頻開發 20 年

2020-12-24 12:42:17 其他

感謝小編邀請,讓我寫下 FFmpeg 20 年這么有歷史厚重的話題,

寫文章其實比錄視頻教程要求高很多,要字斟句酌,邏輯嚴密,理論知識嚴謹,由于個人文筆實在有限,長期以來,不敢隨便寫文章,更不敢出書,更不敢妄論FFmpeg,更何況很多資深從業者在這個領域

很多年靠它吃飯,其中包括很多年賺10億+的上市公司,GPL/LGPL 錯綜復雜的開源社區與商業專案的感情交織,牽涉很多人的利益,所以聊這個話題,稍不注意就會被圍攻,

只能說從一個 10年+音視頻行業開發者,FFmepg 使用者的角度,談一些自己的經歷,看法,給大家一些參考,

為什么我來聊這個有爭議的話題,一方面從業時間長,另一方面,個人也是 FFmpeg 開源專案受益者,我們 2014 年曾經靠三個主力研發,做的產品用到 FFmpeg 解碼部分,單品也在市面上賣了兩三個億,

所以聊 FFmpeg,無論從純技術角度,還是從商業產品的角度,我都有點小小的經驗可以分享,

FFmpeg 是由法國天才程式員 Fabrice Bellard 發起的,2004 年至2015年間由 Michael Niedermayer 主要負責維護的一個音視頻領域最受歡迎的開源開發框架,Fabrice Bellard 同時也是 QEMU,TinyCC 等著名應用程式的作者,QEMU 是一個虛擬機專案,目前大量運用與各種安卓模擬器,我們經常看到國外的各種大神在 iOS 上運行了 XP 啊,在 ipad 上用上了 windows,或多或少都用了 QEMU,所以它的受歡迎程度一點都不亞于 FFmpeg 專案,

首先向開源大神致敬,

用 FFmpeg 這樣的開源專案,我們無法規避的就是各種開源的協議,GPL/GPLV3/LGPL/LGPLV3, 過去二十年發生過各種爭議,包括很多產品還被釘在恥辱柱上,用一句簡單的話來說,就是 GPL 是不可商用的,

LGPL 可以開發閉源商用的軟體,但只能用動態庫,并標明你使用了 FFmpeg 動態庫,靜態鏈接的方式是不允許的,除非你開源軟體專案,所以我們在 14 年之前,使用 FFmpeg,參考了那個時候國外的兩個號稱獨角獸的公司,一個叫 Drapcam(后來被 Google 收了),另一個叫 Beam, 在國外,基本上這兩個公司家喻戶曉,產品很有名,因為在歐美,產品受各種法律條款的監管還是非常嚴格的,如果你的產品要賣到歐美,

使用了FFmpeg,可以參考他們的使用方式,法律條款,https://suitabletech.com/

我們可以大致將 FFmpeg 或者說音視頻領域的發展,劃分為3個時間階段,1: 90年代~2007年 2: 2008年~2017年 3: 2107年以后

1 2007 年之前的階段

(FFmpeg第一個版本準確地說是2000年發布的) 這個階段我們聽到的都是各種恩怨糾葛,商業與開源的爭論,計算機剛剛能夠處理音頻,視頻的時候,一時間,出現了各種以編解碼為核心技術的公司,

我們現在隱約能夠記得的比如 rmvb,當時如日中天,誰搶占了音視頻編解碼的制高點,誰就掌握了下一個時代,當然最后由行業統一的協會結束了這種紛爭,到2007年蘋果發布iPhone,力挺 H.264 mp4 后,行業統一為 H.264 mp4,

FFmpeg 誕生之初,就是為了去解決各種音視頻編碼協議,被商業公司壟斷,各種協議不兼容的問題,所以,你可以把 FFmpeg 看成一個音視頻編解碼,格式決議,轉換的大集合,

由于歐美數字音響著作權保護嚴格,各種格式不兼容,比如一個人,想把電腦里面的視頻,歌曲放到手機里面,車載系統里面去,就很麻煩,于是乎,就存在了一個潛在的法律擦邊球的市場,格式轉換,

國內最早一批軟體出海開發者(現在可能是某些上市公司的大老板)找到了這個商機,于是第一批軟體出海者,靠 FFmpeg 悶聲發財的時候,本人還在考大學,

當時最出名的播放器,比如 KMPlayer、MPlayer SMplayer,各種格式轉換軟體,絕大部分都基于 FFmpeg,當時關于商業與開源,開源協議之爭,就不繼續聊了,很多都成為了歷史,大家都不記得了,

中國第一批軟體出海者,如何悶聲發大財,可以參考李自然老師的視頻:https://www.bilibili.com/video/BV1Lb411m78f ,

(注:任何人的視頻,文章,大家都可以聽聽,作為參考,不一定100%準確,讀者應該有自己的判斷)

2 2008~2017 移動編解碼芯片大發展 OpenGL/ES時代

雖然視頻編碼格式,視頻容器得到了統一,但總有一個程序,要知道,iOS 8 2014年之前,蘋果是不開放硬體解碼介面給第三方應用的,所以這給了 FFmpeg 在 iOS 上應用的一個非常大的機會,

因此2014年之前,絕大多數做視頻類應用,都使用 FFmpeg+OpenGL ES,FFmpeg 負責解碼,OpenGL ES 負責渲染視頻,shader 硬體加速轉換 rgb(YUV轉RGB傳統演算法耗CPU)當時跑 1080P,2M 碼流勉強夠用,

偶爾冒出一個團隊說,他們做了iOS上的硬體解碼,是怎么hacking進去獲得iOS硬體解碼未開放的頭檔案的,我們都羨慕不已,

伴隨著移動時代的到來,OpenGL/ES 成為了行業標準,OpenGL/ES 除了運用在跨平臺游戲引擎,3D 建模仿真領域,其實很大的一部分用在了視頻影像處理領域,2010年,PC 集成顯卡,都逐漸支持了 OpenGL ,

開源GUI框架Qt,發布Qt5的時候,更是直接跟 OpenGL/ES 進行了深度系結,Qt 因此成為行業最受歡迎的跨平臺 GUI 開發框架,影像處理能力十分強悍,生產力軟體行業巨頭maya、Substance Painter非常受歡迎的

視頻剪輯軟體 Davince(達芬奇)都基于 Qt+OpenGL 開發,OpenGL/ES 作為行業的統一標準,跨平臺游戲引擎,音視頻數字影像處理,程式員們,迎來了黃金的十年,

這個10年,API 統一,寫一次代碼,不怎么修改,到處跑,想想都讓人感動,我們看到的各種變臉,抖音的特效,各種 filters,貼紙,都出自 FFmpeg 或硬解碼結合 OpenGL/ES shader 做出來的效果,

到目前為止,我們依然可以看到位元組等各大互聯網公司,一直在招聘 FFmpeg,OpenGL/ES 高手,

在芯片領域,從當年晦澀難用高門檻高價格的 TI DM365 嵌入式芯片,到 SDK集成度非常高,價格低廉,對開發者非常友好的 3518系列海思芯片,帶來了中低端芯片在安防,智能家電,行車記錄儀領域(安霸)的大規模應用,

嵌入式智能硬體開發,在這個 10 年,也是如火如荼,深圳這個硬體之都,集中了幾千家做外貿的安防公司, 每年數億級別的攝像頭相關的設備,賣到了歐美市場,海思也成為這個領域的老大,

智能硬體,結合移動設備,硬體首先要跟手機建立通訊, 所以程式員要做這個領域的開發,對 TCP/IP UDP 網路通訊,要有深入的研究,同時需要掌握 FFmpeg H.264 音視頻基礎 OpenGL/ES等知識,

4G 家庭帶寬提升帶動了移動直播的盛行,RTP/RTCP/RTMP/HLS 流媒體協議,網路直播程序中的各種網路通訊問題,一直是研發人員花大量的精力去解決的問題,

同時 PC,手機視頻剪輯,生產力軟體領域,在Adobe Premire,Finalcut pro, 達芬奇巨頭壟斷的市場,國內廠商也逐漸占有一席之地,一年在歐美市場賣幾個億是常見的,

這也得益于 OpenGL/ES 的大規模普及,PC 集成顯卡,都支持 OpenGL3.3 或者更高的版本,讓視頻剪輯中,各種影片,特效處理,成為了可能,

移動黃金十年,也是中國社會變化最快的十年,各大公司百花齊放,只要涉及音視頻處理,背后都有 FFmpeg 的身影,這個十年,大家一路狂奔,似乎也沒什么人去關心 LGPL GPL,你是動態鏈接呢,

還是static,各個開發人員,大小公司,都在里面做出了非常不錯的產品,服務全球的消費者,

3 2017年后

IT行業的發展的基石,依然是芯片, iOS 2017年后已經全面支持 H.265 硬體編解碼,

Intel 2017年的 kaby cpu 開始支持 H.265 硬體編碼, 2019 年后的 coffee,全面支持 265 硬體編碼,所以目前,H.265 應該是主流了,

通過下圖,可以看看你的 CPU 是否支持 H.265 硬體編解碼,

FLASH 的沒落,RTMP 也很久不更新了,傳統 TCP 在音視頻傳輸程序中延遲的問題,中心化服務器帶來的流量,資費問題,需要一套技術上高效可靠,經濟實惠的音視頻傳輸框架,P2P 結合relay 的方式是最為理想的,所以對于中小型公司,做音視頻直播,視頻會議相關的產品,自研 UDP,P2P 是不太可能的,運營這樣一個研發團隊,一年的開銷是千萬級別的投入, 所以 webrtc,甚至第三方基于 webrtc開發的sdk,成了中小公司進入音視頻領域的最快做產品的方案,未來 WebRTC 在國內的應用,也會越來越流行,需要大量的開發者,

Metal/Vulkan/D3D 各大巨頭早已推出了下一個20年的全新的標準,MediaCodec/AVFoundation 成為移動平臺硬體編解碼的標配, 我經常告訴群里學員說,如果你沒有特殊的需求,在iOS 上,你可以直接使用硬體編解碼,不要使用FFmpeg了,在安卓上,很多年前,我們說的是硬編軟解,目前,也應該可以直接上硬體編解碼了, 人們不禁要問,FFmpeg 還有用嗎?OpenGL/ES 還要學嗎?

答案是肯定的,需要學習,通過學習 FFMpeg, 初學者進入音視頻領域用 FFmpeg 作為入門,能學到非常多的音視頻領域的基礎知識,體驗 FFmpeg 優雅的 c 語言封裝的 API,AVFormatContext,AVCodecContex,AVStream,AVPacket,AVFrame, PTS ,DTS,音視頻同步,音頻重采樣,RGB,YUV420P,X264 編碼器,AAC 編碼,libfdk-aac liblame mp4 容器,I P B 幀的特點,OpenGL/ES context,VAO VBO EBO FBO PBO 模型視圖矩陣,觀察者矩陣,投影矩陣推導,GLSL可編程管線,在數字影像處理領域的高效強大, 本人作為 2010 年畢業的從事音視頻開發的從業者,在商業產品中,可能用到的 FFmpeg API 非常少,有時候就30行以內的解碼代碼,但作為音視頻領域,曾經非常重要的技術框架,也不妨礙本人去學習它, 對于深入從事編解碼演算法的程式員,做芯片開發的程式員,FFmpeg解碼器,X264編碼器開源的代碼,都可以成為你非常好的參考資料,

同樣的問題,可以直接學習 Vulkan/Metal,而不用看 OpenGL/ES 嗎?

肯定是不能的,原因在于計算機圖形學的基礎知識,向量,坐標系,矩陣演算法,投影矩陣,觀察者矩陣,模型視圖矩陣,法線貼圖,這些推導程序,大量的資料,像glm這種非常重要的庫,3D空間的拾取演算法,理論資料,都基于OpenGL的,甚者是D3D的,所有很多時候,我們依然在從2000年左右的一些老程式員的文章,資料中學習,當我們熟悉了Metal/Vulkan API去寫專案的時候,比如你去寫一個渲染引擎,去寫一個互動式3D的建模工具,你遇到的問題,跟用 OpenGL 去寫遇到的問題一模一樣,同樣的 IndexBuffer,類似的VBO, 同樣的 shader,大部分情況,換了一種寫法,

4 未來?

新技術的革命,會創造一大批如雨后春筍的公司, 比如08年,你手里有一套 OpenGL ES的游戲引擎,拿來寫游戲,你就有可能創造幾十億價值的公司,2017年后移動互聯網紅利已經結束,

下一個10年,技識訓是那些技術,主角或許從移動App,變成了AI,邊緣計算,如果不是xx戰,今年海思的AI芯片,4T算力的可能會在下探到10個美金以下,芯片的大規模量產,價格下降,會帶動行業新一輪變革,

軟體開發者,也會有相應的全新的機會,音視頻,網路通訊,OpenGL/ES 都是必須要掌握的,從事相關開發,加上OpenCV, Tensorflow-lite. 深度學習基礎, 個人一點看法,僅供參考,

所以單純聊 FFmpeg 已經沒有什么意義,聊點音視頻,數字影像處理,網路通訊,跟 FFmpeg 相關的,或許更有參考價值,FFmpeg 的未來在哪里? 一項技術只能在一個合適的時間段解決一個特定的問題,

FFmpeg 或許在未來的某個產品里面,我們會用到它的一些功能,類似 OpenGL/ES 也一樣, 比如在 iOS 上,我們想做并行計算,做AI影像處理,那我們就不得不用 Metal,

開源與商業,個人的態度是尊重開源,嚴格按照開源協議來做商業產品,因為商業產品的成功,背后可以帶動就業,背后是無數個家庭,靠它吃飯,消費者也能從中獲益,

開源打破了壟斷,消除了行業壁壘,推動了社會的進步,希望國內的公司,作出更多好的產品,占領歐美市場,賺歐美市場的錢,占領制高點完成產業升級,程式員才能拿硅谷一樣高的薪水,

本人寫文章水平有限,時間有限,勉強看,不對的地方,請諒解,寫FFmpeg技術細節,單純寫FFmpeg20年發展歷史,是不完整的,所以引出了OpenGL 網路通訊等相關的框架,

以后,本人也會多鍛煉下文筆,多寫點單純的技術文章,謝謝把這么枯燥的文章看完的同學,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/239640.html

標籤:其他

上一篇:2015-2020: 5年,不問歸期,奮斗沒有終點

下一篇:Docker基礎

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more