FFmpeg從入門到出家(背景介紹)

金山雲多媒體SDK團隊在移動直播、短視頻等項目中遇到了許多FFmpeg問題,特設立《FFmpeg從入門到出家》系列文稿,希望博君一笑的同時,能讓大家對FFmpeg有更深入的瞭解。

視頻流媒體中程中視頻數據的傳輸佔據了絕大部分的帶寬,如何提升編碼效率,使用更少的帶寬,提供更優質的畫面質量,是音視頻開發人員一直努力的重點。HEVC(High Efficiency Video Coding,也叫H.265)編碼格式的推出,給這一方向帶來了突破點,但由於其算法複雜度較高,前期未曾得到普遍應用,而隨着移動設備計算能力的提高和越來越多的設備開始支持HEVC的硬件編/解碼,直播平臺也開始逐漸引入HEVC視頻格式。

HEVC屬視頻編碼層面標準,如果在視頻流媒體中進行應用,還需要相應的封裝格式和流媒體協議的支持。鑑於直播的大部分推拉流協議是基於RTMP的,本文主要介紹如何在RTMP協議中增加對HEVC視頻編碼格式的支持,其他協議或私有協議,可參考本文自行添加。

1. 背景介紹

典型的直播框架通常包括三大部分,如下圖所示:

1、推流端:負責音視頻數據的採集、處理、編碼及封裝後將數據推送至源站;

2、服務端:涵蓋源站和CDN,接收來自推流端的音視頻數據,然後將數據分發至各播放端;

3、播放端:從CDN拉取直播數據,解複用、解碼後渲染音視頻數據;
FFmpeg從入門到出家(背景介紹)
圖1. 直播框架圖
引入HEVC編碼,涉及到的變動部分如上圖中紅色字體所標註:

1、編碼模塊:需要支持HEVC格式的編解碼,該部分不屬於本文的介紹範疇,我們有在其它文章中介紹如何在iOS11上進行HEVC的硬編硬解,感興趣的朋友可自行查閱;

2、封裝/傳輸模塊:RTMP、HTTP-FLV流媒體協議需要增加對HEVC視頻編碼格式的支持,該部分是本文介紹的重點。

相信廣大的音視頻開發者對於FFmpeg並不陌生,由於它在多媒體處理上提供的強大功能以及開源易於修改維護的特性,使得其被廣泛應用於各音視頻相關軟件中。官方FFmpeg中,並沒有對RTMP/FLV中進行HEVC的相關擴展,我們基於此作出了修改。本文後面介紹的就是如何在FFmpeg中,對RTMP進行HEVC擴展。如果您的開發工程中並沒有用到FFmpeg,可直接閱讀第四章節,也能夠很輕鬆的在您的代碼中增加這部分內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章