剛來公司還沒轉正時,接觸視頻方面的第一個任務是將一系列JPEG圖片封裝為AVI視頻文件。當時我沒有接觸過FFMPEG,而且也不知道公司項目代碼上能不能用第三方庫,所以就自己看AVI格式文檔,自己寫代碼組裝。通過這個任務,對AVI格式有了了解,另外第一次將數據結構中的雙向鏈表應用到實際工作中。完成后交付給其它部門的同事。至于到底有沒有使用我寫的模塊,就不得而知了。
后來工作上涉及到視頻方面的知識越來越多,我也開始學習ffmpeg,還對jpeg、bmp文件讀寫進行封裝。后來將其結合MFC編寫小工具,在產品的字符疊加、Gama調節等方面進行調試使用。在研發項目時,其它部門同事不懂上位機軟件,上達領導層要求我們做支持,這些知識也幫了不少忙。
再后來,接觸平臺底層視頻采集方面的多了,發現自己對YUV顏色空間了解不夠。又去搜索學習,同時還參考常見的YUV播放器寫了一個屬于自己的YUV播放器。并支持多種YUV格式。做此工具,純粹是為了學習YUV轉RGB格式,因此那段時間,甚至將像素點畫出來做對照。經過實打實式的練習后,終于對YUV格式有了比較深入的了解。
再后來,被合并到另一個部門,合并之初大領導叫我們幾個搞平臺的人到辦公室,有意安排我們向流媒體方向發展,計劃很宏偉,領導承諾讓我們專注去搞——當然事實是不可能的。隨后部門制定的計劃中有很多項是流媒體的,于是我開始接觸h264標準。但標準中的語法描述實在晦澀難懂,對于學習新知識,我一向不習慣只看理論,也看不透。只有用代碼去接觸才能了解。當時市面上的h264碼流分析工具幾乎是商用的且不開源。公司購買的軟件亦只能在一臺PC上運行。后來找到雷博寫的h264碼流分析工具,使用了開源的h264碼流分析庫。于是我也參考著使用MFC自己實現。
不到一年時間吧,公司策略似乎要著手h265研發。于是我也著手了解h265。經過慎重考慮,決定在原來的碼流分析工具基礎上添加h265的支持,接著便使用ffmpeg實現h264、h265裸視頻文件的播放、轉碼保存功能。當時分析工具較少且要授權,試用版功能有很多限制。有感于雷博的開源精神,我所寫的YUV播放器及碼流分析器都開源放到github網站。
所有這些實踐,都基于MFC,因為不熟悉其它界面庫,另外也是因為MFC是我第一個認真自學的界面庫,對此有感情?!两裎疫€能清晰記得許多年前的暑假在大學宿舍邊聽《似是故人來》寫MFC的情形。
工作后對視頻方面的知識,我都是斷斷續續地接觸、學習的,無他,工作所需。比如學習h264,是因為公司打算自己實現h264視頻編碼。而做YUV播放器則完全是為了提高自身技能所實施的。如果不是當時下決心寫,以公司策略隨時變化的管理風格,我還沒緩過神來已經被安排另一個事務了,也不可能有自己寫的工具開源出來。我還記得很多個傍晚,老婆在炒菜,而我在VS寫h265語法解析。
李遲 2016.10 中旬