1. 程式人生 > >《視訊直播技術詳解》系列:(5)處理

《視訊直播技術詳解》系列:(5)處理

原文來自七牛雲,感謝原作者。

本片我們將介紹處理部分。網際網路直播中,常見視訊處理功能如美顏、視訊水印、濾鏡、連麥等。

視訊或者音訊完成採集之後得到原始資料,為了增強一些現場效果或者加上一些額外的效果,我們一般會在將其編碼壓縮前進行處理,比如打上時間戳或者公司 Logo 的水印,祛斑美顏和聲音混淆等處理。在主播和觀眾連麥場景中,主播需要和某個或者多個觀眾進行對話,並將對話結果實時分享給其他所有觀眾,連麥的處理也有部分工作在推流端完成。

開放式設計 


如上圖所示,處理環節中分為音訊和視訊處理,音訊處理中具體包含混音、降噪和聲音特效等處理,視訊處理中包含美顏、水印、以及各種自定義濾鏡等處理。對於七牛這樣的直播雲服務來說,為了滿足所有客戶的需求,除了要提供這些「標準」處理功能之外,我們還需要將該模組設計成可自由接入自定義處理功能的方式。

常見視訊處理功能

1. 美顏 

都說「80% 的主播沒有美顏根本沒法看」,美顏是直播產品中最常見的功能之一。最近準備在香港上市的美圖公司的主打產品就是美顏相機和美拍,有媒體戲稱其會衝擊化妝品行業,其實就是美顏的效果的功勞,讓美女主播們不化妝也可以自信的直播,而美顏相機的使用者則可以拍出「更好的自己」。

美顏的主要原理是通過「磨皮+美白」來達到整體美顏的效果。磨皮的技術術語是「去噪」,也即對影象中的噪點進行去除或者模糊化處理,常見的去噪演算法有均值模糊、高斯模糊和中值濾波等。當然, 由於臉部的每個部位不盡相同,臉上的雀斑可能呈現出眼睛黑點的樣子,對整張影象進行「去噪」處理的時候不需要將眼睛也去掉,因此這個環節中也涉及到人臉和面板檢測技術。

七牛直播雲提供的 iOS 和 Android 推流 SDK 中內建了美顏功能,你可以根據自己的需要選擇開關美顏功能,並且能夠自由調節包括美顏,美白,紅潤等在內的引數。其中 iOS 端 SDK PLCameraStreamingKit 的引數設定如下:

1)按照預設引數開啟或關閉美顏:

  1. -(void)setBeautifyModeOn:(BOOL)beautifyModeOn;

2)設定美顏程度,範圍為 0 ~ 1:

  1. -(void)setBeautify:(CGFloat)beautify;

3)設定美白程度,範圍為 0 ~ 1

  1. -(void)setWhiten:(CGFloat)whiten;

4)設定紅潤程度,範圍為 0 ~ 1

  1. -(void)setRedden:(CGFloat)redden;

2. 視訊水印 

水印是圖片和視訊內容中常見的功能之一,它可用於簡單是版權保護,或者進行廣告設定。處於監管的需求,國家相關部門也規定視訊直播過程中必須打上水印,同時直播的視訊必須錄製儲存下來儲存一定的時間,並在錄製的視訊上打上水印。

視訊水印包括播放器水印和視訊內嵌水印兩種方式可供選擇,對於播放器水印來說,如果沒有有效的防盜措施,對於沒有播放鑑權的推流,客戶端拿到直播流之後可以在任何一個不帶水印的播放器裡面播放,因此也就失去了視訊保護的能力。綜合考慮雲端錄製對於水印的需求,我們一般會選擇「視訊內嵌水印」的方式打水印。

七牛直播雲提供的 iOS 和 Android 推流 SDK 中也內建了水印功能,你可以根據自己的需要新增水印或移除水印,並且能夠自由設定水印的大小和位置。其中 iOS 端 SDK PLCameraStreamingKit 的引數設定如下:

1)新增水印

  1. -(void)setWaterMarkWithImage:(UIImage *)wateMarkImage position:(CGPoint)position; 

該方法將為直播流新增一個水印,水印的大小由 wateMarkImage 的大小決定,位置由 position 決定,需要注意的是這些值都是以採集資料的畫素點為單位的。例如我們使用AVCaptureSessionPreset1280x720 進行採集,同時 wateMarkImage.size 為 (100, 100) 對應的origin 為 (200, 300),那麼水印的位置將在大小為 1280x720 的採集畫幅中位於 (200, 300) 的位置,大小為 (100, 100)。

2)移除水印

  1. -(void)clearWaterMark;

3. 濾鏡 

除了上面提到的美顏和水印之外,視訊中還有很多其它的處理效果也在這個環節完成。七牛直播雲提供的 SDK 在開放性設計基礎之上,通過資料來源回撥介面,可以支援各種自定義濾鏡的接入。

為了實現豐富的濾鏡效果,在 iOS 端可以考慮使用 GPUImage 這個庫,這是一個開源的基於GPU的圖片或視訊的處理框架,內建了多達120多種常見的濾鏡效果。有了它,新增實時的濾鏡只需要簡單地新增幾行程式碼,還可以基於這個庫自己寫演算法實現更豐富端效果。GPUImage 地址:https://github.com/BradLarson/GPUImage

同時,Google 官方也開源了一個偉大的庫,覆蓋了 Android 上面很多多媒體和圖形影象相關的處理:https://github.com/google/grafika

4. 連麥


連麥是互動直播中常見的需求,其流程如上圖所示。主播和部分觀眾之間可以進行實時互動,然後將互動結果實時播放給其他觀眾觀看。

基於以上業務需求,我們很容易想到基於單向直播原理,在主播端和連麥觀眾端進行雙向推流和雙向播流的方式互動,然後在服務端將兩路推流合成一路推送給其他觀眾。但 RTMP 帶來的延遲決定了這種方式無法做到使用者可接受的互動直播。

實際上,互動直播的主要技術難點在於:

1)低延遲互動:保證主播和互動觀眾之間能夠實時互動,兩者之間就像電話溝通,因此必須保證兩者能在秒級以內聽到對方的聲音,看到對方的視訊;

2)音畫同步:互動直播中對音畫同步的需求和單向直播中類似,只不過互動直播中的延遲要求更高,必須保證在音視訊秒級傳輸情況下的秒級同步。

3)音視訊實時合成:其他觀眾需要實時觀看到對話結果,因此需要在客戶端或者服務端將畫面和聲音實時合成,然後以低成本高品質的方式傳輸觀眾端。

在視訊和電話會議領域,目前比較成熟的方案是使用思科或者 WebEx 的方案,但這些商用的方案一不開源,二比較封閉,三成本比較高。對於互動人數比較少的互動直播,目前市場上比較成熟的方案是使用基於 WebRTC 的實時通訊方案。


上圖是一個基於 WebRTC 協議實現多方實時通訊的示意圖,本地使用者(主播)和遠端使用者(連麥觀眾)之間的連線通過 RTCPeerConnection API 管理,這個 API 包裝了底層流管理和信令控制相關的細節。基於該方案可以輕鬆實現多人(14 人以下)的多方實時通訊,如下圖所示:


當然,在通訊人數少的情況下,其複雜度相對簡單,如 2 人情況下。但人數增多至 4 人之後,其可選的網路結構就增多了,如上圖所示,可以每個點之間形成自組織網路的方式通訊,也可以以 1 人為中心形成星型通訊網路,還可以讓大家都通過一個集中式的服務端進行通訊。


作為一個高效能、可伸縮的直播基礎服務提供商,七牛直播雲經過評估選擇了以主播為中心形成星形通訊網路,支援主播和多個觀眾之間的互動質量。同時,為了保證合成後的音視訊實時傳輸到其他觀眾端,這裡採用經過改造的 UDP 協議傳輸:

1. 通過 UDP 降低傳輸延遲。

2. 在 UDP 之上進行傳輸控制,保證使用者互動體驗 QoS。

相關推薦

視訊直播技術系列5處理

原文來自七牛雲,感謝原作者。 本片我們將介紹處理部分。網際網路直播中,常見視訊處理功能如美顏、視訊水印、濾鏡、連麥等。 視訊或者音訊完成採集之後得到原始資料,為了增強一些現場效果或者加上一些

視訊直播技術系列4採集

原文來自七牛雲,感謝原作者。 採集是整個視訊推流過程中的第一個環節,它從系統的採集裝置中獲取原始視訊資料,將其輸出到下一個環節。視訊的採集涉及兩方面資料的採集:音訊採集和影象採集,它們分別對應

視訊直播技術系列2架構

從大分類來講,視訊直播系統架構,大體可分為三角形架構,梯形架構。依照不同的行業領域、或業務需求來講,三角形架構與梯形架構也存在有一些差別。 典型的三角形架構 典型的三角形架構如下圖所示: 該圖展示了

視訊直播技術系列之一開篇

作者:七牛雲 隨著網際網路使用者消費內容和互動方式的升級,支撐這些內容和互動方式的基礎設施也正在悄悄發生變革。手機裝置拍攝視訊能力和網路的升級催生了大家對視訊直播領域的關注,吸引了很多網際網路創業者或者成熟企業進入該領域。 七牛雲作為一家以基礎服務能力見長的雲端計

視訊直播技術系列之二處理

視訊或者音訊完成採集之後得到原始資料,為了增強一些現場效果或者加上一些額外的效果,我們一般會在將其編碼壓縮前進行處理,比如打上時間戳或者公司 Logo 的水印,祛斑美顏和聲音混淆等處理。在主播和觀眾連麥場景中,主播需要和某個或者多個觀眾進行對話,並將對話結果實時分享給其他所

視訊直播技術系列之一採集

關於直播的技術文章不少,成體系的不多。我們將用七篇文章,更系統化地介紹當下大熱的視訊直播各環節的關鍵技術,幫助視訊直播創業者們更全面、深入地瞭解視訊直播技術,更好地技術選型。 本系列文章大綱如下: (一)採集 (二)處理 (三)編碼和封裝 (四)推流和傳輸 (

視訊直播技術系列之五推流和傳輸

七牛雲於 6 月底釋出了一個針對視訊直播的實時流網路 LiveNet 和完整的直播雲解決方案,很多開發者對這個網路和解決方案的細節和使用場景非常感興趣。結合七牛實時流網路 LiveNet 和直播雲解決方案的實踐,我們用八篇文章,更系統化地介紹當下大熱的視訊直播各環節的關鍵技

視訊直播技術直播的推流排程

作為直播傳輸的第一步,推流排程對於直播鏈路的影響非常大。本篇文章將針對這個話題,從傳輸的角度,講一講網易雲信直播是如何做好推流排程的。 直播推流是什麼 首先,直播推流,即主播將自己的本地客戶端採集編碼後的視訊資料“推”出去。推流會涉及到兩個問題:視訊推到哪裡去了以

視訊直播技術之推流和傳輸

宣告:本文為CSDN原創投稿文章,未經許可,禁止任何形式的轉載。 作者:七牛雲 責編:錢曙光,關注架構和演算法領域,尋求報道或者投稿請發郵件[email protected],另有「CSDN 高階架構師群」,內有諸多知名網際網路公司的大牛架構師,

視訊直播技術處理

宣告:本文為CSDN原創投稿文章,未經許可,禁止任何形式的轉載。 作者:七牛雲 責編:錢曙光,關注架構和演算法領域,尋求報道或者投稿請發郵件[email protected],另有「CSDN 高階架構師群」,內有諸多知名網際網路公司的大牛架構師,

視訊直播技術(4)推流和傳輸

宣告:本文為CSDN原創投稿文章,未經許可,禁止任何形式的轉載。 作者:七牛雲 責編:錢曙光,關注架構和演算法領域,尋求報道或者投稿請發郵件[email protected],另有「CSDN 高階架構師群」,內有諸多知名網際網路公司的大牛架構師,歡迎架構師加微信

視訊直播技術之編碼和封裝

七牛雲於6月底釋出了一個針對視訊直播的實時流網路LiveNet和完整的直播雲解決方案,很多開發者對這個網路和解決方案的細節和使用場景非常感興趣。 結合該實時流網路LiveNet和直播雲解決方案的實踐,我們將用七篇文章,更系統化地介紹當下大熱的視訊直播各環節的關鍵技術,幫

TCP/IP學習筆記5-- ICMPinternet 控制報文協議

1.概述      ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料

Android RxJava操作符系列 變換操作符

urn 原因 轉換 需要 生產 依賴 reat 入門 所有 Rxjava,由於其基於事件流的鏈式調用、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。Github截圖 如果還不了解 RxJava,請看文章:Android:這是一篇 清晰 &

2018最新視訊加密技術一機一碼怎麼用?

視訊加密技術應用範圍很廣,可以說大部分的視訊所有者都希望自己的視訊是有條件才能給使用者看的。尤其是線上教育、行業培訓、特殊單位(比如醫院、大學、出版社等)等等。不同的行業和加密的目的不同,使用的視訊加密技術也有所差距,不過在長期的基礎累積中,點量軟體發現有些對視訊加密的需求是通用的,這裡小編就做個詳細的解釋。

JDK的Proxy技術實現AOP,InvocationHandler和Proxy——Spring AOP

上一章已經講到了想要完成AOP的設計原理以及要實現AOP功能,得需要使用代理模式: 本章就介紹一個實現動態代理的兩種方式之一——JDK中的Proxy技術 AOP實現原理(使用JDK中的Proxy技術實現AOP功能,InvocationHandler和Proxy(Class)詳解

EonStor GSe Pro 1000攻略內功深厚提升效能的資料服務

最大800GB的SSD快取池 快取是一個透明儲存資料的元件,以便將來可以更高效的處理資料請求,是儲存的核心組成部分之一,特別適合讀密集型的應用。由於控制器的記憶體容量有限,SSD快取能夠利用高速的SSD來擴充套件儲存系統的快取池容量,並且儲存經常訪問的資料。隨著SSD快取容量的增加,更多熱資料可以儲存在SS

P2P技術(一)NAT——詳細原理、P2P簡介(轉再)

這是一篇介紹NAT技術要點的精華文章,來自華3通訊官方資料庫,文中對NAT技術原理的介紹很全面也很權威,對網路應用的應用層開發人員而言有很高的參考價值。   《P2P技術詳解》系列文章 ➊ 本文是《P2P理論詳解》系列文章中的第2篇,總目錄如下:   ➋

視訊加密技術一機一碼怎麼用?

視訊加密技術應用範圍很廣,可以說大部分的視訊所有者都希望自己的視訊是有條件才能給使用者看的。尤其是線上教育、行業培訓、特殊單位(比如醫院、大學、出版社等)等等。不同的行業和加密的目的不同,使用的視訊加密技術也有所差距,不過在長期的基礎累積中,點量軟體發現有些對視訊加密的需求是

PWA(Progressive Web App)入門系列PWA關鍵技術Manifest

前言 前面說過,讓Web App能夠達到Native App外觀體驗的主要實現技術就是PWA中的manifest技術,本章會詳細說明manifest的實現,及各個引數的具體含義,還將瞭解如何定義Web App的啟動圖示、啟動樣式等。 簡介 manifest是一種簡單的json