聲網Agora.io的首席iOS研發工程師龔宇華,周日受邀在開源中國源創會深圳站進行了分享,以下是演講內容,主要解答一個問題:如何自己做一個snapchat?
上圖是最近幾個月在美國很火的app——Houseparty。Appannie的數據顯示,App Store的排名一直穩定在前三。這個APP團隊之前做過一個另一個APP——比incloud更早的直播。很多巨頭坐不住了,Facetime、Line開始集成多人視頻功能。
Snapchat,是視頻聊天軟體,獨特之處在於視頻聊天中加入了變臉、特效等功能,比如上圖中間的吐彩虹的活動,在國外引發了病毒式傳播。
上圖是Faceu激萌。朋友圈中應該經常能看到Faceu生成的截圖。Faceu和Snapchat一樣,都加入了變臉特效,具有非常好的傳播性。
那麼,接下來就開始進入正題:
如何使用Agora的SDK快速實現Houseparty和Snapchat的合體——多人聊天和變臉功能。
第一步,要實現多人視頻。多人交流,延時必須是毫秒級的,如果延時達到幾秒,交流會受到嚴重影響。
上圖是使用Agora SDK後臺的延時分布。橫坐標時間戳,縱坐標是傳輸延時。79.9%的通話延時在150ms以內。
上圖是使用Agora SDK後臺的丟包率分布。聲網Agora.io通過抗丟包技術、伺服器就近接入、伺服器骨幹網優化、骨幹網動態路由等技術進行了多種改進。經過這些改進,我們可以看到上圖的效果,丟包在1%以內的時間點有94.2%,超過20%丟包不到2%。
但是,如果有人網絡特別差,那麼Agora SDK提供了一個接口供開發者選擇:想保證畫面的質量而犧牲流暢,還是犧牲流暢換質量。這兩個方案,與APP的使用場景關聯。一個秀場直播的APP,開發者可能傾向於保證畫面的質量,哪怕用戶看得稍微卡一點,只要卡的畫面還是美美的,用戶也可以接受。如果在直播、視頻交流場景下,開發者選擇保證流暢,犧牲質量,說不定臉上有很多馬賽克。什麼樣的場景會相反?比如直播體育賽事,那麼需要優先保證流暢度,哪怕犧牲一些畫面質量。如果選錯了,用戶在看直播的時候,隔壁老王已經在歡呼了,而此人的畫面還卡在球空中。
上圖是使用Agora SDK實現的多人通話demo。7個人在視頻聊天,最後一排中間是我自己。在7人視頻通話場景中,有一個用戶很敏感的問題——流量。我自己的數據並不需要接收,我需要接收的是另外6個人的數據。那麼,如何解決數據量特別大的問題?下排小窗口,畫面非常小,如果我接收高解析度的數據,顯示在這麼小的窗口,不合理,浪費。Agora SDK提供大小流接口,我可以通過這個接口單獨請求小窗口的5個人的數據,請求低解析度的小流,大圖美女請求高解析度的大流。
除此之外,大小流還可以有另一個功能。我收到的6組數據是獨立的,這使得APP開發時,自己可以隨便布局。如果用戶現在想看左下角的美女,APP可以直接把左下角的視圖放大,同時把大圖縮小。這是一種靈活的使用場景,既降低流量,又能根據用戶的需求,靈活的請求大小流。至此,第一步實現多人視頻聊天,已經完成了。
第二步,要在視頻聊天中集成變臉、臉部特效、美顏。美顏相機,是對照片進行人臉識別,在此基礎上進行修改。視頻中實現美顏功能是一樣的處理。如果你不想自己做這件事,Agora 也有實時濾鏡SDK。最簡單的濾鏡是對顏色做偏移,高級的濾鏡是在人臉識別固定特徵位置做貼紙素材。美顏包括磨皮、瘦臉、大眼,集成在Demo裡可以得到下圖這樣的效果。
至此,我們就用Agora SDK和Agora 實時濾鏡SDK完成了Demo。如果你感興趣,可以下載這個開源demo來自己動手實踐一下。每個月有1萬分鐘免費,在做調研的階段,可以自己測試質量如何。聲網Agora.io在全球部署了100個數據中心,極大的優化了傳輸質量。這意味著APP集成了SDK後,是天然的全球化,不需要國內做一個,國外做一個。
最重要的來了,文中提到的開源demo,下載地址:
https://github.com/AgoraLab/OpenLive_iOS
ps:運行demo前,需要訪問Agora官網註冊帳號獲取自己的app id才能成功運行demo。
點擊閱讀原文,註冊帳號。