基礎概念
短視頻SDK是阿里云開源的一款播放器組件,擁有視頻強大的播放功能,支持視頻錄制、視頻合拍、視頻拼接等能力。本文介紹短視頻SDK中涉及的一些基本概念,以便于您更好地理解短視頻SDK。
License
短視頻SDK服務需要開通License,開通方式請參見獲取短視頻SDK License。
開通License后,請確保提交package/bundle id和Android Studio/XCode中對應配置保持一致。
視頻分辨率
視頻分辨率指的是視頻橫向和縱向上的有效像素,理論上視頻分辨率越高,圖像越清晰。但分辨率越高也意味著文件越大,處理越耗時。移動端考慮到不同設備性能差異,建議設置分辨率720P及以下。常見的視頻分辨率如下:
清晰度 | 1:1 | 3:4 | 9:16 |
480P | 480*480 | 640*480 | 853*480 |
540P | 540*540 | 720*540 | 960*540 |
720P | 720*720 | 960*720 | 1280*720 |
1080P | 1080*1080 | 1440*1080 | 1920*1080 |
不要直接使用屏幕像素值作為視頻分辨率。
碼率
碼率又叫比特率,指的是每秒傳送的比特(bit)數(shù)。單位為bps(Bit Per Second)。壓縮視頻的時候給這個視頻指定碼率參數(shù),用以告訴視頻編碼器期望的壓縮后視頻的大小。在一定范圍內(nèi),碼率越高,視頻越清晰,文件也越大。建議碼率:
清晰度 | 建議碼率 |
480P | 1000000~2000000 |
540P | 2000000~3000000 |
720P | 2000000~4000000 |
1080P | 2000000~6000000 |
幀率
視頻幀率指的是每秒鐘顯示的圖像幀數(shù),單位Frame per Second(fps)。幀率越高,圖像越流暢,文件也越大。建議視頻幀率:25~30。
關鍵幀
幀是組成視頻圖像的基本單位,視頻文件是由多個連續(xù)的幀組成。關鍵幀也叫I幀,它是幀間壓縮編碼里的重要幀,解碼時僅用I幀的數(shù)據(jù)就可重構(gòu)完整圖像,I幀不需要參考其他畫面而生成。關鍵幀可以做為隨機訪問(seek)的參考點,可以當成圖像。
GOP
Group of Picture(以下簡稱GOP)顧名思義就是有一組幀組成的一個序列。一個GOP由關鍵幀開始,后面跟隨者一組B幀和P幀。GOP過小,會導致I幀的比例增高,壓縮比降低。GOP過大,會導致隨機訪問(seek)更耗時,同時,會導致倒播卡頓(倒播需要解碼一個GOP才能播放視頻幀)。SDK中GOP默認值為5,建議GOP值為5~30。
編輯模塊實現(xiàn)視頻倒播功能,如果導入視頻GOP過大,需要先轉(zhuǎn)碼處理。
填充模式
當素材圖片或視頻的分辨率長寬比與導出視頻分辨率長寬比不一致時,會涉及填充模式的選擇。
SDK支持兩種填充模式:
填充模式 | 處理方法 |
裁剪模式 | 保持長寬比,裁剪圖片,只顯示中間區(qū)域。 |
縮放模式 | 保持長寬比,使圖片能完整顯示,上下或左右填充顏色。 |
編碼方式
編碼方式有以下兩種:
編碼方式 | 編碼詳情 |
軟編 | 使用CPU進行編碼。軟編可以配置的參數(shù)更豐富,同等碼率下生成的視頻更清晰;但是編碼速度比較慢,CPU負載高,手機更容易發(fā)熱。 |
硬編 | 使用非CPU硬件進行編碼。硬編編碼速度更快,CPU負載低;但清晰度比軟編略差,部分安卓設備上可能存在適配性問題。 |
資源說明
SDK資源主要包括人臉識別模型資源、濾鏡資源和動效濾鏡資源。SDK資源可以保存到網(wǎng)絡端,也可以直接打包到apk中。考慮到SDK下載包的大小,建議您將SDK資源保存到網(wǎng)絡端,在啟動App時下載。
SDK不支持assets流,如果是打包到apk中,啟動后必須將資源拷貝到SD Card中。資源文件及使用說明可以在SDK下載包中獲取。
支持格式
類型 | 格式 |
視頻 | MP4、MOV、FLV |
音頻 | MP3、AAC、PCM |
圖片 | JPG、PNG、GIF |
視頻合拍
視頻合拍從產(chǎn)品功能層面看,就是兩路視頻(一路來自樣本視頻,一路來自設備攝像頭采集),按照指定的布局模式(左右分屏,上下分屏,畫中畫等)進行合成,合成出來的視頻每一幀畫面將會同時包含兩路視頻的畫面,而合拍視頻的音頻部分則采用樣本視頻的音頻。以下為范例視圖,實際上SDK內(nèi)部支持開發(fā)者自己組織布局,關于如何布局將在后面講述。
多源錄制
多源錄制可以支持View錄制、攝像頭錄制等多種視頻采集源按需組合的合拍錄制。從產(chǎn)品功能層面看,就是多個畫面數(shù)據(jù)來源(例如View錄制采集的畫面數(shù)據(jù)、攝像頭采集的畫面數(shù)據(jù)),按照指定的布局模式(左右分屏、上下分屏、畫中畫等)進行合成,合成出來的視頻每一幀畫面將會同時包含上述畫面數(shù)據(jù)來源。以下為范例視圖,實際上可支持開發(fā)者自己組織布局,關于如何布局將在后面講述。
軌道
在上述視頻合拍概念中提及的兩路視頻在SDK中被抽象為兩個軌道:A軌道和B軌道,A軌道放設備采集的視頻,B軌道放樣本視頻,用軌道抽象有利于開發(fā)者理解軌道布局的概念。
在上述多源錄制中提及的多路畫面數(shù)據(jù)來源在SDK中被抽象為多個軌道,如A軌道放攝像頭采集畫面,B軌道放View錄制采集畫面,用軌道抽象有利于開發(fā)者理解軌道布局的概念。
軌道布局
軌道布局是軌道的屬性之一,用來描述該軌道的視頻畫面,在合拍生成的視頻中如何“擺放”,軌道布局在一個歸一化的坐標系中,從兩個緯度來描述軌道布局信息,分別是中心點的坐標和軌道size(即寬高信息)。
視頻合拍的軌道布局如下圖所示:
在該布局畫面中,軌道A和軌道B的畫面各占一半,因此,兩個軌道的寬度均為0.5,而高度則都為1.0,而軌道A的中心點坐標:(0.25,0.5),軌道B的中心點坐標:(0.75,0.5)。
多源錄制的軌道布局如下圖所示:
在該布局畫面中,軌道A和軌道B的畫面各占一半,因此,兩個軌道的寬度均為0.5,而高度則都為1.0,而軌道A的中心點坐標:(0.25,0.5),軌道B的中心點坐標:(0.75,0.5)。