序
多年來,影音、多媒體技術一直以各種各樣的形式對社會產生深刻影響,從專業領域的廣播電視到消費領域的個人數位攝影機等這些都已融入人們生活的各方面。進入網際網路時代,線上視訊、短視訊等娛樂場景,以及遠端會議、遠端醫療等專業應用進一步擴展了影音技術的應用領域,使其與現代文明的聯繫更加密不可分。
● 影音技術推動泛娛樂行業高速發展
從 21 世紀的最初幾年開始,線上視訊產業便漸漸開始興起。隨著寬頻網逐漸走入尋常百姓家,消費者們無須再忍受撥號網路緩慢的傳送速率,部分知名門戶網站也逐漸開始涉足線上視訊領域。此後線上視訊網站層出不窮,線上視訊行業呈現百花齊放的場景。
在視訊網站平台的發展起起伏伏之際,另一種線上視訊娛樂的形態——網路互動直播開始異軍突起。直播本是歷史最悠久的視訊應用之一,多年以來廣電領域的數位電視廣播、閉路電視系統一直是直播系統的最典型應用。進入網際網路時代,直播的整體形態與產品細節與傳統的閉路電視系統相比發生了翻天覆地的變化,最典型的升級是從主播到觀眾的單方面放送,轉變為主播與觀眾的雙向互動,網路互動直播從萌芽到興起,到最為繁榮的「千播大戰」,直到最終經歷多次的兼併和淘汰,其中的倖存者已經寥寥無幾。
除中、長視訊外,隨著以智慧手機為代表的移動智慧裝置的日漸普及,短視訊作為一項新的業務形態逐漸佔據了消費者的碎片時間。通常認為短視訊起源自本世紀早期的微電影、網路短片和校園 DV 等形態,伴隨著各種 UGC 視訊平台的蓬勃發展而越發興盛。在智慧行動裝置全面進入人們的生活後,透過行動裝置進行「短、平、快」風格的內容分享重新點燃了短視訊行業的星星之火,低成本、快節奏的短視訊拍攝成為人們分享生活和觀點的重要手段。行動短視訊平台憑藉其豐富的內容和對使用者心理與喜好的研究在使用者中產生了巨大影響,成為當前基於影音的泛娛樂場景中新的一極。
● 影音技術給商務與辦公領域帶來新生命
目前,遠端辦公已成為必然選擇。當前市場上多家科技企業發佈了多款遠端辦公產品軟體或一體式解決方案,典型的有 Microsoft 的 Teams、Google 的Google Meet、Zoom 等。這些產品的共同特點是基於網際網路、雲端運算等技術,整合了電子郵件、電子白板、遠端連接與桌面共用等模組,旨在為異地辦公的員工和團隊提供強大而可靠的交流和共用服務。建構一個穩定而完備的遠端辦公系統需要多個不同的系統精密配合,而即時影音通訊可謂其中技術最為複雜、挑戰最大的模組之一,其穩定性和性能直接決定了系統整體的性能與使用者體驗。
目前主流的即時影音通訊解決方案主要基於 WebRTC 標準。與傳統的 RTMP+CDN 系統相比,基於 WebRTC 的方案延遲更低,卡頓情況更少,且支援直接連線瀏覽器進行推流與播放。
● 影音技術具有廣闊的發展前景和學習價值
從上述影音應用的發展歷史我們可以看出,影音技術始終在行業內佔據重要地位。從線上視訊網站到互動直播,再到短視訊與即時影音通訊,當影音領域在某一個行業發展到頂峰,甚至隨後開始逐漸衰落時,也總是有另一個風口異軍突起成功接棒。究其原因在於,影音由於具有可以生動形象地攜帶大量資訊,且易於被人們快速理解的特性,已成為資訊傳輸效率最高的通訊媒介。幾乎所有的商業形態都可以透過影音技術實現資訊的快速理解與交換,實現效率的倍增。因此,近年來無論社會如何發展變化,影音領域依然以朝陽產業的面貌蓬勃發展。
另一方面,影音技術是軟體程式設計的一項高階技術,具有較高的存取控制門檻。一名優秀的影音專案師應當從原理到實踐做到融會貫通,至少需要掌握以下領域的知識與技能:
數學、資訊與編碼理論、電腦系統原理、演算法理論、程式設計語言(如 C++、Java、Go 等)、網路開發、跨平台軟體開發(如行動端、服務端和用戶端)和系統架構設計等。
因此,影音技術的學習之路比普通的軟體開發之路更加艱難、漫長。而另一方面,這也成為影音領域技術人員最好的護城河,為行業內的開發者提供了深入沉澱的機會。
● 本書的價值
影音技術並不是一項可以輕鬆掌握的技術,為了解決這個問題,許多天才程式設計師貢獻了多項開放原始碼專案對影音開發的底層技術進行了封裝與整合,以提升整體的開發效率,FFmpeg 便是其中的典型。作為最強大的影音開放原始碼項目之一,FFmpeg 提供了影音的編碼與解碼、封裝與解封裝、推拉流和影音資料編輯等操作,遮罩了許多底層技術細節,使得開發者可以將更多的精力專注在業務邏輯的實現上,大幅提升了開發如播放機、推流、影音編輯等用戶端或 SDK 等產品的效率。
儘管如此,對初學者來說,FFmpeg 提供的命令列工具和 SDK 的使用方法仍然較為困難。除影音的基本概念外,繁冗複雜的命令列參數與 API 常常讓初學者無從下手,除官方提供的文件外,幾乎沒有完備的技術資料可供參考。本書系統地講解了影音領域的基礎知識,並由淺入深地介紹了 FFmpeg 的基本使用方法,筆者希望本書的面世可以進一步降低影音開發的入門門檻,讓更多有志於從事影音開發的讀者可以為整個行業作出貢獻。
● 本書的內容及學習方法
本書內容分為三部分,各部分之間的內容相互連結但又相對獨立,讀者可以根據自身的需求按順序閱讀或選擇性學習。
◎ 第 1~6 章為本書的第一部分,主要講解影音技術的基礎知識,包括影音編碼與解碼標準、媒體容器的封裝格式和網路串流媒體協定簡介。建議對影音技術不夠熟悉的讀者從該部分開始閱讀,有一定基礎的讀者可以選擇泛讀或跳過該部分。
◎ 第 7~9 章為本書的第二部分,主要講解命令列工具 ffmpeg、ffprobe 和 ffplay的主要使用方法。命令列工具在架設測試環境、建構測試用例和排除系統 Bug 時常常造成重要作用。如果想要在實際工作中有效提升工作效率,那麼應熟練掌握 FFmpeg 命令列工具的使用方法。
◎ 第 10~15 章為本書的第三部分,主要講解如何使用 libavcodec、libavformat 等 FFmpeg SDK 進行編碼與解碼、封裝與解封裝,以及媒體資訊編輯等影音基本功能開發的方法。在實際的企業級影音專案中,通常採用呼叫 FFmpeg 相關的 API 而非使用命令列工具的方式實現最基本的功能,因此該部分內容具有較強的實踐意義,推薦所有讀者閱讀並多加實踐。此部分的程式實現基本來自 FFmpeg 官方文件中的範例程式,筆者在此基礎上進行了一定的改編。書中程式整體上遵循了範例程式的指導,穩定性較強,且更易於理解。
● 勘誤與聯繫方式
由於本書內容較為繁雜,且筆者在撰寫稿件的同時仍承擔繁重的最前線開發任務,因此書中極有可能出現部分疏漏或錯誤,望讀者們閱讀後不吝指正,提出寶貴的意見或建議,聯繫電子郵件:yinwenjie-1@163.com。
● 致謝
自本書初步策劃開始,截至今日已一年有餘。這是我第一次獨立撰寫書稿,其間所經歷的困難甚至痛苦不言而喻。最終初稿得以完成,首先必須感謝我的伴侶,在本書定稿的過程中,你完成了身份從女朋友到妻子的升級,沒有你的支持,本書斷無問世的可能。此外還必須感謝我的父母,你們的關愛、期望與督促,也是本書問世的源動力之一。
感謝博文視點的編輯老師,你們的專業程度一直令我嘆服。沒有你們從開始到最終的指導和幫助,本書是一定無法完成的。
感謝各個技術交流群中的同行與朋友,以及我的網誌與課程的讀者,有了你們的支持,我才克服了所經歷的困難,將本書帶到你們的面前。
希望在不久的將來,能有更多更有價值的內容貢獻給大家,謝謝!
殷汶杰