感謝小編邀請,讓我寫下 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
標籤:其他
下一篇:Docker基礎
