短視頻自研還是選擇第三方?技術選型前必看的自檢清單

2017 年,短視頻成為了內容創業的新風口,各種短視頻 App 如雨後春筍般先後上線。隨著互聯網內容消費升級,視頻越來越像文字、圖片一樣,成為每一個 App 不可或缺的一部分。

為了能夠更好地聚焦於業務,早日完成短視頻 App 的上線,越來越多的公司傾向於選擇一家靠譜的短視頻 SDK 來起步,怎麼定義靠譜?要關注哪些指標?僅功能滿足就可以了嗎? —— 顯然不夠,下面我們站在 App 開發者的角度,來看看什麼樣的短視頻 SDK 會有著更好的口碑和滿意度 ?在你技術選型前,我們一起看看下在這份自檢清單。

1. 包體是否足夠小

App 的包體大小,對獲取用戶有著至關重要的作用,特別是在線下的推廣活動中,包體太大,下載費時費流量,很多用戶會失去耐心,從而直接導致 App 的推廣效果大打折扣。

而 App 的包體大小,除了自身的代碼量,也會受到第三方庫的包體影響,因此,短視頻 SDK 包體越小,對於減小 App 包體大小越有幫助,開發者才會越喜歡。

那麼,如何做到儘可能的減小 SDK 的包體呢 ?

  • 盡一切努力使用 Android/iOS 系統原生的 API,不怕難用,不怕踩坑
  • 良好的模塊劃分,不同的功能生成不同的動態庫,客戶可選擇性的拆卸和裁剪
  • 所使用的第三方庫,充分配置編譯選項和功能裁剪,只打包必須的功能、單獨抽離所需的模塊.

2. SDK 是否開放

使用第三方的 SDK,最怕的是像個黑盒,過於封閉,想配置的參數無法配置,需要的狀態也沒有回調,直接導致產品經理給出的 UI 和交互方案無法實現。因此,SDK 的開放性,越來越成為開發者選型的關鍵因素。

那麼,SDK 如何做到儘可能的開放呢 ?

  • 凡可配置的參數,一律提供配置,比如:攝像頭參數、編解碼參數、美顏參數、混音參數等等
  • 凡可回調的數據,一律提供回調,比如:攝像頭採集的視頻幀、紋理 ID,麥克風采集的音頻幀等等
  • 凡運行過程中的狀態,一律提供通知,比如:拍攝狀態、轉碼進度、取消事件等等

另外,還需要儘可能地跟 SDK 上下游廠商建立良好的合作關係,比如 美顏、濾鏡、人臉貼紙特效、大眼瘦臉等供應商,讓客戶可以隨時快速接入和替換任意一家廠商,從而加快產品迭代和上線的速度。

3. 性能是否足夠好

雖然手機的性能越來越強大,但 CPU 使用率居高不下、發熱厲害、內存消耗大、運行速度慢的 App 非常影響用戶體驗,因此,無論是 App 本身,而是第三方 SDK,性能永遠是值得關注的重點。

SDK 如何做到更好的性能呢 ?其實就一條:充分地利用 GPU,盡一切可能減少 CPU 消耗,對於短視頻 SDK 的開發,具體有哪些值得關注的點呢 ?

  • 音視頻編解碼儘可能地使用硬編/硬解
  • 視頻/圖像的處理,儘可能使用 OpenGL,包括:美顏、濾鏡、水印、剪裁、旋轉等等
  • 儘可能更高效地編寫 OpenGL 代碼,使用一些提高效果的特性,包括:VBO, VAO, FBO, PBO 等等
  • 動態管理 so,沒有用到的不載入;動態管理內存,使用時再分配
  • 合併處理流程,各種音視頻特效和處理,依次記錄狀態,待保存的時候,再調用演算法處理

4. UI 和 SDK 邏輯是否徹底分離

優秀的 SDK,一定要儘可能避免把 UI 的界面和邏輯包含進去,不然 SDK 的使用者,很難滿足產品經理的 UI 和交互設計要求,做出差異化的效果。

那麼,SDK 如何做到與 UI 邏輯徹底地分離呢 ?

需要充分分解每一個短視頻的功能需求,搞清楚每一個需求的實現原理,哪部分是 UI 的,哪部分是核心的,前者寫到 Demo 上,而後者則寫入 SDK 裡面。

就拿短視頻剪輯這個功能點來舉個例子,下圖所示是短視頻的一個熱點功能,對短視頻截取中間某一段片段。

仔細思考這個功能點,其實關鍵點在於:

  • 獲取視頻中的連續圖像在列表中進行展示
  • 繪製左右游標,以確定剪輯的起始和結束的時間點
  • 讀取視頻文件,丟棄時間區間以外的視頻幀,保留剩餘視頻幀

屬於 UI 的部分:

  • 用列表顯示視頻幀圖像
  • 繪製左右游標,支持手勢拖動
  • 根據視頻的總時長和游標的位置,計算出起始和結束的時間點

屬於 SDK 的部分:

  • 提供視頻的時長
  • 提供視頻幀總數
  • 提供解碼後的每一幀視頻數據
  • 提供剪輯函數,參數為:起始和結束的時間戳
  • 完成剪輯處理,輸出剪輯後的視頻文件

這樣分離好了之後,再去編寫 SDK 的介面和 UI 的 Demo 代碼,就非常清晰了。

5. 是否有良好的可支持性

優秀的 App 和 SDK,首先一點就是要穩定可靠,不會動不動就奔潰。具備良好的可支持性的產品,往往更容易受到青睞。

什麼是可支持性 ?

舉個例子,就像家裡買的某些品牌的洗衣機或者空調,在出故障的時候,液晶屏幕上會打出一些錯誤碼,當你給售後打電話的時候,售後往往能夠根據描述的信息以及錯誤代碼很快地定位到問題或者給出臨時的解決方案。

如何讓短視頻 SDK 具有更好的可支持性呢 ?

關鍵在於一套健全而規範的日誌系統,可以有效提高技術支持和開發者排查問題的速度和效率,那麼,設計這樣一套完善的日誌系統,有哪些關鍵點呢 ?

  • 支持配置 SDK 的輸出日誌級別,如:ERROR, WARN, INFO, DEBUG, VERBOSE
  • SDK 初始化的時候輸出關鍵的排障信息,如:應用包名,SDK 版本,設備機型,系統 OS 版本,關鍵配置等
  • 規範的日誌格式,如:<SDK TAG>:<Module TAG>:<Class TAG>:<Message>,可以快速方便地過濾出各個模塊的運行狀態
  • 健全的問題排查手冊/文檔,讓每一個錯誤碼都有文檔可依,開發者可以完成簡單初步的問題分析

6.小結

總而言之,設計一款優秀並且口碑好的短視頻 SDK,並不是簡簡單單堆積一些功能就夠了,看上去功能豐富和實際開發過程中是否好用還有很大的差距。

七牛雲近期推出的一套完整的短視頻解決方案,不僅 SDK 包體小、性能優異、穩定可靠,而且開放易用,有著健全的生態鏈,集成多個第三方美顏、濾鏡、AR 貼紙廠商,是一款良心之作,歡迎大家申請試用。


推薦閱讀:

短視頻「抖音」會不會火一把就死?

TAG:短视频 | 直播 | 音视频 |