基本概念
通過(guò)閱讀本文,您可以了解MediaBox音視頻SDK產(chǎn)品中常用名詞的基本概念。
產(chǎn)品定義
MediaBox音視頻SDK
MediaBox音視頻SDK整合了直播推流SDK、播放器SDK、短視頻SDK、美顏特效SDK等產(chǎn)品,為AUI Kits低代碼應(yīng)用方案提供端側(cè)音視頻能力,例如推流、連麥、播放、IM互動(dòng)等功能。您可以一站式獲取完備的音視頻能力,實(shí)現(xiàn)業(yè)務(wù)敏捷創(chuàng)新。更多信息,請(qǐng)參見(jiàn)什么是音視頻終端SDK。
AUI Kits
AUI Kits低代碼集成工具是阿里云基于豐富的音視頻實(shí)踐沉淀,提供的aPaaS產(chǎn)品,對(duì)MediaBox音視頻SDK進(jìn)行模塊化封裝,提供標(biāo)準(zhǔn)化的開(kāi)源UI組件。您可以根據(jù)業(yè)務(wù)需求直接使用AUI Kits進(jìn)行接入,降低研發(fā)成本和周期,提升業(yè)務(wù)效果。
AppServer
AppServer基于函數(shù)計(jì)算(FC)等方式為AUI Kits低代碼集成工具提供了一套快捷部署、靈活定制的后臺(tái)服務(wù)。直播間AppServer為AUI Kits互動(dòng)直播場(chǎng)景SDK提供了房間管理、連麥管理、用戶鑒權(quán)、信令管理等功能,只需要5~10分鐘即可完成后臺(tái)服務(wù)搭建。您也可以通過(guò)容器鏡像或源代碼構(gòu)建等方式進(jìn)行部署。
RTS 1.0與RTS 2.0的區(qū)別
對(duì)比項(xiàng) | RTS 2.0 | RTS 1.0 |
定義 | 邊緣推流,不經(jīng)過(guò)直播中心。如果想要錄制、轉(zhuǎn)碼,則需配置旁路轉(zhuǎn)推,轉(zhuǎn)推到一個(gè)RTMP域名上面,然后在RTMP域名上錄制。 | 直播中心推流,因此可以進(jìn)行錄制、轉(zhuǎn)碼等。 |
播放協(xié)議 | 支持ARTC(基于WebRTC)協(xié)議流的播放。 | |
端到端延時(shí) | 200~400ms。 | 500~1000ms。 |
使用限制 | 推流、播放側(cè)同時(shí)集成RTS SDK。 | 僅播放側(cè)集成RTS SDK。 |
抗弱網(wǎng)能力 | 全鏈路丟包30%的情況下可以流暢播放。 | 播放側(cè)丟包30%的情況下可以流暢播放。 |
兼容性 |
| |
覆蓋區(qū)域 | 全球 | |
最佳實(shí)踐 |
流媒體
點(diǎn)播、直播和推流的區(qū)別
推流:主播將本地音視頻源推送到阿里云視頻云服務(wù)器。
直播:直接觀看主播客戶端或直播中心實(shí)時(shí)推送過(guò)來(lái)的音視頻數(shù)據(jù),時(shí)間延遲一般不會(huì)太長(zhǎng)。
點(diǎn)播:視頻源已經(jīng)事先存儲(chǔ)于阿里云視頻云媒資庫(kù)內(nèi),觀眾隨時(shí)可以觀看。
常見(jiàn)的點(diǎn)播協(xié)議
目前常見(jiàn)的點(diǎn)播格式有3種:MP4、HLS和FLV。
MP4:MP4是一種經(jīng)典的文件格式,廣泛支持移動(dòng)終端和瀏覽器(包括iOS和大部分Android設(shè)備上的系統(tǒng)瀏覽器以及PC上的FLASH控件)。然而,MP4的視頻文件格式相對(duì)復(fù)雜,處理成本較高,并且由于其復(fù)雜的索引表結(jié)構(gòu),導(dǎo)致較長(zhǎng)時(shí)長(zhǎng)(如半小時(shí))的MP4文件在線播放時(shí)加載速度較慢,更適用于點(diǎn)播短視頻場(chǎng)景。
HLS:由蘋果公司推出的標(biāo)準(zhǔn),在移動(dòng)終端的瀏覽器上具有很好的支持。但在IE上的支持情況取決于FLASH的二次開(kāi)發(fā)工作(建議使用阿里云播放器SDK Web端)。HLS采用簡(jiǎn)潔的M3U8索引結(jié)構(gòu),能夠避免MP4索引慢的問(wèn)題,常用于點(diǎn)播中長(zhǎng)視頻場(chǎng)景。
FLV:Adobe公司推出的標(biāo)準(zhǔn),目前是直播平臺(tái)最常用的封裝格式,在PC端具有強(qiáng)大的FLASH支持,但在移動(dòng)終端只有通過(guò)App實(shí)現(xiàn)播放器才能支持,大部分手機(jī)端瀏覽器均不支持。
常見(jiàn)的直播協(xié)議
目前常見(jiàn)的直播協(xié)議有3種:RTMP、FLV和HLS。
RTMP:RTMP協(xié)議是一種功能強(qiáng)大的協(xié)議,可以用于推送和直播。核心理念是將視頻幀和音頻幀分割成小數(shù)據(jù)包,并在互聯(lián)網(wǎng)上進(jìn)行傳輸。此外,RTMP協(xié)議還支持加密,因此具有較高的隱私性。然而,由于拆包和組包的復(fù)雜性,當(dāng)面對(duì)海量并發(fā)時(shí),可能會(huì)出現(xiàn)一些不可預(yù)測(cè)的穩(wěn)定性問(wèn)題。
FLV:Adobe公司推出的標(biāo)準(zhǔn),該協(xié)議的格式非常簡(jiǎn)單。它只是在視頻幀和視頻頭部添加了一些標(biāo)記頭信息。由于其極簡(jiǎn)的設(shè)計(jì),F(xiàn)LV協(xié)議在延遲表現(xiàn)和大規(guī)模并發(fā)方面非常成熟。唯一的缺點(diǎn)是在移動(dòng)端瀏覽器上的支持非常有限。然而,作為移動(dòng)端App直播協(xié)議,F(xiàn)LV協(xié)議非常適用。
HLS:由蘋果公司推出的標(biāo)準(zhǔn),將視頻分割為5~10秒的小切片,并使用M3U8索引表進(jìn)行管理。客戶端下載到的視頻都是5~10秒的完整數(shù)據(jù),因此視頻的流暢性很好。然而,這種方法也會(huì)引入較大的延遲,一般為10~30秒(HLS的常見(jiàn)延遲范圍)。與FLV相比,HLS在iPhone和大多數(shù)Android手機(jī)瀏覽器上的支持非常好。
常見(jiàn)的推流協(xié)議
目前常見(jiàn)的推流協(xié)議是RTMP,阿里云視頻云還支持超低延時(shí)直播RTS推流。
RTMP:由主播端向直播中心服務(wù)器推流一般采用RTMP協(xié)議。
RTS:超低延時(shí)直播RTS是阿里云視頻直播的重要增值功能,可以提供客戶端易接入、超低延時(shí)、高并發(fā)、高清流暢的視頻直播服務(wù)。
SDK集成與使用
SDK License
MediaBox音視頻SDK是阿里云視頻云推出的終端SDK,提供場(chǎng)景化的終端音視頻能力,您可以通過(guò)申請(qǐng)免費(fèi)License、付費(fèi)購(gòu)買或消費(fèi)達(dá)標(biāo)贈(zèng)送獲取SDK的使用授權(quán)。
SDK License通過(guò)與應(yīng)用標(biāo)識(shí)一一綁定以實(shí)現(xiàn)對(duì)該應(yīng)用調(diào)用SDK進(jìn)行授權(quán)。例如,當(dāng)一個(gè)播放器SDK的License與應(yīng)用A綁定后,應(yīng)用A就可以使用播放器SDK的功能,每一個(gè)License最多可以綁定一款A(yù)ndroid應(yīng)用和iOS應(yīng)用。您也可以在視頻直播、視頻點(diǎn)播控制臺(tái)上新增和續(xù)期License,計(jì)費(fèi)詳情請(qǐng)參見(jiàn)計(jì)費(fèi)項(xiàng)。
在控制臺(tái)上完成創(chuàng)建應(yīng)用并綁定License后,會(huì)生成一套License File(證書文件)和License Key。在MediaBox音視頻SDK集成過(guò)程中,您需要將License File和Key配置到對(duì)應(yīng)的應(yīng)用中。MediaBox音視頻SDK將通過(guò)License File和Key來(lái)校驗(yàn)當(dāng)前應(yīng)用的授權(quán)情況。每個(gè)阿里云賬號(hào)下默認(rèn)生成唯一的License Key,按照應(yīng)用維度生成License File,不論License授權(quán)的內(nèi)容和類型,這組License File和Key都是唯一且不會(huì)變更。
命名沖突(duplicate symbol)
在集成MediaBox音視頻SDK時(shí)常遇到的一種編譯錯(cuò)誤,因?yàn)橐粋€(gè)進(jìn)程中不能有重名函數(shù)(編譯器會(huì)將函數(shù)編譯成symbol),如果出現(xiàn)重復(fù)的,就會(huì)給鏈接器帶來(lái)“選擇困難癥”。
目前,阿里云視頻云終端SDK之間,由于媒體組件化架構(gòu)設(shè)計(jì),不同SDK之間會(huì)存在沖突。如果需要用到兩個(gè)業(yè)務(wù)功能場(chǎng)景,請(qǐng)使用功能場(chǎng)景一體化包。例如短視頻和播放器業(yè)務(wù),請(qǐng)使用AliVCSDK_UGC包,不僅在功能上一致,而且做到更小的包體積。
直播推流SDK
碼率控制
一種編碼的優(yōu)化算法,用于控制視頻流碼流的大小。同樣的視頻編碼格式,碼流越大,包含的信息越多,對(duì)應(yīng)的圖像也就越清晰,反之亦然。
視頻丟幀
發(fā)送視頻幀時(shí),如果網(wǎng)絡(luò)非常差,導(dǎo)致視頻幀堆積嚴(yán)重,可以通過(guò)丟棄視頻幀來(lái)縮短推流的延時(shí)。
耳返
指主播可以通過(guò)耳機(jī)實(shí)時(shí)聽(tīng)到自己的聲音。例如,當(dāng)主播帶上耳機(jī)唱歌時(shí),需要把握音調(diào),這時(shí)就需要開(kāi)啟耳返功能。因?yàn)槁曇敉ㄟ^(guò)網(wǎng)絡(luò)傳入耳朵和通過(guò)空氣傳入耳朵差異很大,而主播需要直接聽(tīng)到觀眾端的效果。
混音
把多種來(lái)源的聲音整合至一個(gè)立體音軌或單音音軌中,推流SDK支持音樂(lè)和人聲的混音。
合流
把多種來(lái)源的視頻圖像數(shù)據(jù)根據(jù)位置疊加到同一個(gè)視頻畫面中。目前僅Android推流SDK支持。
動(dòng)態(tài)庫(kù)
即動(dòng)態(tài)鏈接庫(kù),與常用的靜態(tài)庫(kù)相反。動(dòng)態(tài)庫(kù)在編譯時(shí)并不會(huì)被拷貝到目標(biāo)程序中,目標(biāo)程序中只會(huì)存儲(chǔ)指向動(dòng)態(tài)庫(kù)的引用。在程序運(yùn)行時(shí),動(dòng)態(tài)庫(kù)才會(huì)被真正加載進(jìn)來(lái)。
Xcode加載動(dòng)態(tài)庫(kù)需要加載到Embedded Binaries中,而不是加載到Linked Frameworks and Libraries中。
短視頻SDK
視頻分辨率、碼率
視頻分辨率指的是視頻橫向和縱向上的有效像素,理論上視頻分辨率越高,圖像越清晰。但分辨率越高也意味著文件越大,處理越耗時(shí)。考慮到移動(dòng)端不同設(shè)備性能差異,不建議直接使用屏幕像素值作為視頻分辨率,建議設(shè)置分辨率720P及以下。
碼率又叫比特率,指的是每秒傳送的比特(bit)數(shù)。單位為bps(Bit Per Second)。壓縮視頻時(shí)給視頻指定碼率參數(shù),用以告訴視頻編碼器期望的壓縮后視頻的大小。在一定范圍內(nèi),碼率越高,視頻越清晰,文件也越大。
常見(jiàn)的視頻分辨率及建議碼率如下:
清晰度 | 1∶1 | 3∶4 | 9∶16 | 建議碼率(單位:bps) |
480P | 480×480 | 480×640 | 480×853 | 1000000~2000000 |
540P | 540×540 | 540×720 | 540×960 | 2000000~3000000 |
720P | 720×720 | 720×960 | 720×1280 | 2000000~4000000 |
1080P | 1080×1080 | 1080×1440 | 1080×1920 | 2000000~6000000 |
幀率
視頻幀率指的是每秒鐘顯示的圖像幀數(shù),單位Frame per Second(fps)。幀率越高,圖像越流暢,文件也越大。建議視頻幀率:25~30。
關(guān)鍵幀
幀是組成視頻圖像的基本單位,視頻文件是由多個(gè)連續(xù)的幀組成。關(guān)鍵幀也叫I幀,它是幀間壓縮編碼里的重要幀,解碼時(shí)僅用I幀的數(shù)據(jù)就可重構(gòu)完整圖像,I幀不需要參考其他畫面而生成。關(guān)鍵幀可以做為隨機(jī)訪問(wèn)(seek)的參考點(diǎn),可以當(dāng)成圖像。
GOP
Group of Picture(以下簡(jiǎn)稱GOP)顧名思義就是有一組幀組成的一個(gè)序列。一個(gè)GOP由關(guān)鍵幀開(kāi)始,后面跟隨者一組B幀和P幀。GOP過(guò)小,會(huì)導(dǎo)致I幀的比例增高,壓縮比降低。GOP過(guò)大,會(huì)導(dǎo)致隨機(jī)訪問(wèn)(seek)更耗時(shí),同時(shí),會(huì)導(dǎo)致倒播卡頓(倒播需要解碼一個(gè)GOP才能播放視頻幀)。SDK中GOP默認(rèn)值為5,建議GOP值為5~30。
編輯模塊實(shí)現(xiàn)視頻倒播功能時(shí),如果導(dǎo)入視頻GOP過(guò)大,需要先轉(zhuǎn)碼處理。
填充模式
當(dāng)素材圖片或視頻的分辨率長(zhǎng)寬比與導(dǎo)出視頻分辨率長(zhǎng)寬比不一致時(shí),會(huì)涉及填充模式的選擇。SDK支持兩種填充模式:
填充模式 | 處理方法 |
裁剪模式 | 保持長(zhǎng)寬比,裁剪圖片,只顯示中間區(qū)域。 |
縮放模式 | 保持長(zhǎng)寬比,使圖片能完整顯示,上下或左右填充顏色。 |
編碼方式
編碼方式有以下兩種:
編碼方式 | 編碼詳情 |
軟編 | 使用CPU進(jìn)行編碼。軟編可以配置的參數(shù)更豐富,同等碼率下生成的視頻更清晰,但編碼速度比較慢,CPU負(fù)載高,手機(jī)更容易發(fā)熱。 |
硬編 | 使用非CPU以外的硬件進(jìn)行編碼。硬編編碼速度更快,CPU負(fù)載低,但清晰度比軟編略差,部分安卓設(shè)備上可能存在適配性問(wèn)題。 |
資源說(shuō)明
SDK資源主要包括人臉識(shí)別模型資源、濾鏡資源和動(dòng)效濾鏡資源。SDK資源可以保存到網(wǎng)絡(luò)端,也可以直接內(nèi)資到安裝包中。考慮到SDK下載包的大小,建議您將SDK資源保存到網(wǎng)絡(luò)端,在啟動(dòng)App時(shí)下載。
由于Android平臺(tái)不支持Assets流,如果是打包到APK中,啟動(dòng)后必須將資源復(fù)制到SD Card中。資源文件及使用說(shuō)明可以在SDK下載包中獲取。
支持格式
支持導(dǎo)入的媒資格式:
類型 | 格式 |
視頻 | MP4、MOV、FLV |
音頻 | MP3、AAC、PCM |
圖片 | JPG、PNG、GIF |
視頻合拍
視頻合拍從產(chǎn)品功能層面是指兩路視頻(一路來(lái)自樣本視頻,一路來(lái)自設(shè)備攝像頭采集)按照指定的布局模式(左右分屏、上下分屏、畫中畫等)進(jìn)行合成,合成的視頻每一幀畫面將會(huì)同時(shí)包含兩路視頻的畫面,而合拍視頻的音頻部分則采用樣本視頻的音頻。以下為范例視圖,實(shí)際上SDK內(nèi)部支持開(kāi)發(fā)者自己組織布局,關(guān)于如何布局將在后面講述。
多源錄制
多源錄制可以支持View錄制、攝像頭錄制等多種視頻采集源按需組合的合拍錄制。從產(chǎn)品功能層面是指多個(gè)畫面數(shù)據(jù)來(lái)源(例如View錄制采集的畫面數(shù)據(jù)、攝像頭采集的畫面數(shù)據(jù)),按照指定的布局模式(左右分屏、上下分屏、畫中畫等)進(jìn)行合成,合成出來(lái)的視頻每一幀畫面將會(huì)同時(shí)包含上訴畫面數(shù)據(jù)來(lái)源。以下為范例視圖,實(shí)際上可支持開(kāi)發(fā)者自己組織布局,關(guān)于如何布局將在后面講述。
軌道
在上述視頻合拍概念中提及的兩路視頻在SDK中被抽象為兩個(gè)軌道:A軌道和B軌道,A軌道放設(shè)備采集的視頻,B軌道放樣本視頻,用軌道抽象有利于您理解軌道布局的概念。
在上述多源錄制中提及的多路畫面數(shù)據(jù)來(lái)源在SDK中被抽象為多個(gè)軌道,如A軌道放攝像頭采集畫面,B軌道放View錄制采集畫面,用軌道抽象有利于您理解軌道布局的概念。
軌道布局
軌道布局是軌道的屬性之一,用來(lái)描述該軌道的視頻畫面,在合拍生成的視頻中如何“擺放”,軌道布局在一個(gè)歸一化的坐標(biāo)系中,從兩個(gè)緯度來(lái)描述軌道布局信息,分別是中心點(diǎn)的坐標(biāo)和軌道size(即寬高信息)。
視頻合拍的軌道布局如下圖所示:
在該布局畫面中,軌道A和軌道B的畫面各占一半,因此,兩個(gè)軌道的寬度均為0.5,而高度則都為1.0,而軌道A的中心點(diǎn)坐標(biāo):(0.25,0.5),軌道B的中心點(diǎn)坐標(biāo):(0.75,0.5)。
多源錄制的軌道布局如下圖所示:
在該布局畫面中,軌道A和軌道B的畫面各占一半,因此,兩個(gè)軌道的寬度均為0.5,而高度則都為1.0,而軌道A的中心點(diǎn)坐標(biāo):(0.25,0.5),軌道B的中心點(diǎn)坐標(biāo):(0.75,0.5)。