如何開(kāi)發(fā)一款完整的App(原理篇)

前言

做直播APP也有一段時(shí)間,自身是多年直播觀眾县习,總結(jié)下這段時(shí)間研發(fā)的收獲以及業(yè)務(wù)介紹涮母。

1.功能介紹

直播APP的常用業(yè)務(wù)如下。

躁愿。1叛本、聊天

私聊、聊天室彤钟、點(diǎn)亮来候、推送、黑名單等逸雹;

营搅。2、禮物

普通禮物梆砸、豪華禮物转质、紅包、排行榜辫樱、第三方充值峭拘、內(nèi)購(gòu)、禮物動(dòng)態(tài)更新狮暑、提現(xiàn)等鸡挠;

。3搬男、直播列表

關(guān)注拣展、熱門(mén)、最新缔逛、分類(lèi)直播用戶(hù)列表等备埃;

。4褐奴、自己直播

錄制按脚、推流、解碼敦冬、播放辅搬、美顏、心跳脖旱、后臺(tái)切換堪遂、主播對(duì)管理員操作介蛉、管理員對(duì)用戶(hù)等;

溶褪。5币旧、房間邏輯

創(chuàng)建房間、進(jìn)入房間猿妈、退出房間吹菱、關(guān)閉房間、切換房間彭则、房間管理員設(shè)置毁葱、房間用戶(hù)列表等;

贰剥。6、用戶(hù)邏輯

普通登陸筷频、第三方登陸蚌成、注冊(cè)、搜索凛捏、修改個(gè)人信息担忧、關(guān)注列表、粉絲列表坯癣、忘記密碼瓶盛、查看個(gè)人信息、收入榜示罗、關(guān)注和取關(guān)惩猫、檢索等;

蚜点。7轧房、觀看直播

聊天信息、滾屏彈幕绍绘、禮物顯示奶镶、加載界面等;

陪拘。8厂镇、統(tǒng)計(jì)

APP業(yè)務(wù)統(tǒng)計(jì)、第三方統(tǒng)計(jì)等左刽;

捺信。9、超管

禁播悠反、隱藏残黑、審核等馍佑;

2.直播原理

。直播原理:把主播錄制的視頻梨水,推送到服務(wù)器拭荤,在由服務(wù)器分發(fā)給觀眾觀看。

疫诽。直播環(huán)節(jié):推流端(采集舅世、美顏處理、編碼奇徒、推流)

雏亚。服務(wù)端處理(轉(zhuǎn)碼、錄制摩钙、截圖罢低、鑒黃)

。播放器(拉流胖笛、解碼网持、渲染)

〕び唬互動(dòng)系統(tǒng)(聊天室功舀、禮物系統(tǒng)、贊)

3.直播的實(shí)現(xiàn)流程

4.架構(gòu)設(shè)計(jì)

業(yè)務(wù)模塊


視圖

1身弊、GiftView

顯示禮物辟汰,管理小禮物與豪華禮物動(dòng)畫(huà);

核心:

小禮物連擊效果阱佛,隊(duì)列存儲(chǔ)豪華禮物消息帖汞,播放完畢回調(diào)。

小禮物用CAAnimation動(dòng)畫(huà)和UIView Block動(dòng)畫(huà)凑术;

豪華禮物用CAAnimation動(dòng)畫(huà)和UIView Block動(dòng)畫(huà)+GCD協(xié)調(diào)涨冀;

2、MessageView

顯示聊天消息麦萤,彈幕消息鹿鳖。

核心:

聊天tableView,用NSMutableAttributedString顯示富文本壮莹;

- (CGRect)boundingRectWithSize:options: attributes:context:計(jì)算高度并緩存翅帜;

彈幕消息用隊(duì)列存儲(chǔ)彈幕,UIViewBlock動(dòng)畫(huà)循環(huán)播放命满,最多同時(shí)顯示條數(shù)限制涝滴;

3、RoomTableView

顯示房間列表

核心:

MJRefresh做上下拉刷新,以時(shí)間為軸歼疮;

4杂抽、ChatView

聊天界面,直播間內(nèi)半屏顯示韩脏,直播間外全屏顯示缩麸;

核心:

用第三方聊天界面,直播間內(nèi)用addChildViewController的方式赡矢,直接加載第三方ViewController杭朱;

控制器

1、ChatViewController

第三方聊天控制器做基類(lèi)吹散,自定義業(yè)務(wù)邏輯弧械,包括私聊送禮物、廣告屏蔽等空民,包括ChatListViewController和ChatDetailViewController刃唐。

2、WatchLiveViewController

觀看直播控制器界轩,包括LivePlayer(視頻流播放器)唁桩,房間業(yè)務(wù)邏輯相關(guān),接受聊天消息轉(zhuǎn)發(fā)給MessageView耸棒,切換前后臺(tái)(APP生命周期)控制;

3报辱、PushLiveViewController

推流直播控制器与殃,包括推流相關(guān)邏輯,直播定時(shí)器碍现,房間業(yè)務(wù)邏輯相關(guān)幅疼,聊天消息轉(zhuǎn)發(fā)給MessageView,主播離開(kāi)昼接、切換后臺(tái)等控制爽篷;

數(shù)據(jù)層

1、LiveRoom

房間的數(shù)據(jù)結(jié)構(gòu)慢睡,存儲(chǔ)房間信息逐工,包括管理員、主播ID漂辐、房間推流泪喊、拉流地址、房間用戶(hù)列表等等髓涯;

2袒啼、LiveUser

直播的用戶(hù)數(shù)據(jù)結(jié)構(gòu),包括昵稱(chēng)、頭像蚓再、ID、等級(jí)摘仅、榜單等靶庙;

3、ChatUser/Message

聊天的用戶(hù)數(shù)據(jù)結(jié)構(gòu)实檀,包括頭像惶洲、昵稱(chēng)、ID等膳犹,Message是消息類(lèi)型恬吕,包括直播間普通的Message、(節(jié)省流量)打包用的QueueMessage须床,私聊聊天的TextMessage铐料、PhotoMessage等;

服務(wù)層

1豺旬、IMService

IM功能钠惩,提供私聊,直播間消息廣播等族阅。

2篓跛、LiveService

推流和拉流功能,提供錄制坦刀、推送視頻流到服務(wù)器愧沟,拉取視頻流和播放視頻;

3鲤遥、LoginService

登陸功能沐寺,手機(jī)號(hào)碼登陸,第三方(QQ盖奈、微信混坞、新浪)登陸;

4钢坦、IAPService

內(nèi)購(gòu)功能究孕,蘋(píng)果內(nèi)購(gòu);

5爹凹、PayService

第三方支付蚊俺,微信支付和支付寶支付;

6逛万、PushService

推送功能泳猬,聊天消息推送批钠,直播開(kāi)播推送,活動(dòng)推送等得封;

7埋心、AnalysisService

統(tǒng)計(jì)功能,APP自身統(tǒng)計(jì)上傳到服務(wù)器忙上,第三方統(tǒng)計(jì)拷呆;

Pod庫(kù)

1、AFNetworking

負(fù)責(zé)所有Http請(qǐng)求疫粥,業(yè)務(wù)層會(huì)封裝Manager茬斧;

2、GPUImage

采集視頻梗逮,并對(duì)視頻流進(jìn)行美顏處理项秉;

3、RMStore

蘋(píng)果內(nèi)購(gòu)支持慷彤;

4娄蔼、SDWebImage

負(fù)責(zé)加載圖片,包括頭像底哗、禮物圖片等岁诉;

業(yè)務(wù)問(wèn)題分析

1、聊天室消息過(guò)多

產(chǎn)品運(yùn)營(yíng)一段時(shí)間后跋选,消息量不斷攀升涕癣,最高到100billion,后來(lái)IM方優(yōu)化后前标,量級(jí)穩(wěn)定在10billion坠韩,但是消息量仍舊過(guò)大。

通過(guò)對(duì)消息歷史記錄進(jìn)行數(shù)據(jù)分析候生,發(fā)現(xiàn)瓶頸在enter和exit消息,占比為84%绽昼。

分析:在線(xiàn)用戶(hù)交多唯鸭,頻繁進(jìn)出房的動(dòng)作導(dǎo)致需要不斷發(fā)送enter和exit消息,可以預(yù)計(jì)硅确,當(dāng)房間內(nèi)人數(shù)越來(lái)越多之后目溉,將會(huì)有更多的進(jìn)出房消息,同時(shí)增長(zhǎng)速度為平方級(jí)別菱农。

總結(jié):客戶(hù)端和服務(wù)器之間的實(shí)時(shí)消息過(guò)多缭付,同時(shí)都是密集操作。

解決方案:

人數(shù)較多的房間循未,等級(jí)小于一定級(jí)別(服務(wù)器下發(fā))則不發(fā)送進(jìn)出房消息陷猫;

級(jí)別較高的用戶(hù)進(jìn)入房間時(shí),會(huì)在進(jìn)房消息攜帶數(shù)據(jù)以同步房間信息;

2绣檬、房間活躍度計(jì)算

設(shè)有活躍度(禮物G足陨、聊天M) 、 在線(xiàn)人數(shù)N娇未、 直播時(shí)間T

G為本次直播收到的Y幣數(shù)

M為本次直播發(fā)出的消息數(shù)

N為本次直播在線(xiàn)人數(shù)

T為本次直播的分鐘數(shù)

本次直播的成本為N * k1 + M * k2墨缘,k1為帶寬成本常數(shù),k2為IM成本常數(shù)零抬。

聊天成本暫不考慮镊讼,那么成本為N * k1。

視頻帶寬的價(jià)格20元/M每個(gè)月平夜,用戶(hù)觀看的速度為150k/s左右蝶棋,那么每個(gè)用戶(hù)高峰成本為7元每個(gè)月,每日成本為2.3元褥芒。用戶(hù)人均每日觀看2小時(shí)嚼松,那么每分鐘的成本為0.02元。

我們的最高在線(xiàn)/活躍人數(shù)是0.18锰扶,那么一個(gè)普通用戶(hù)每分鐘的期望成本k1 = 0.18*0.02 = 0.004元献酗。

我們的每分鐘收入為x = G / T * 0.66 - N * 0.004

對(duì)于一個(gè)已經(jīng)在直播的主播,如果x 大于0坷牛,那么屬于為平臺(tái)賺錢(qián)主播罕偎,可以放在列表前面。

預(yù)計(jì):

按照目前的水平京闰,假設(shè)一個(gè)1000人觀看的主播颜及,每天2個(gè)小時(shí)的直播,收入應(yīng)該在10000Y幣蹂楣。

每小時(shí)應(yīng)該有5000Y幣俏站,每分鐘應(yīng)該有84個(gè)Y幣。我們的收入有5.6元痊土。

那么對(duì)于一個(gè)新開(kāi)直播的主播肄扎,她的預(yù)設(shè)x值為1.6。

總結(jié):

每分鐘按照收入x排序,

如果是已經(jīng)開(kāi)播的主播赁酝,x = G / T0.66 - N0.004犯祠;

如果是剛開(kāi)未滿(mǎn)一分鐘的主播,x=1.6酌呆。

3衡载、HTTP代理篡改get參數(shù)

通過(guò)HTTP代理工具,篡改移動(dòng)端發(fā)給服務(wù)器的get參數(shù)隙袁。舉個(gè)例子痰娱,用戶(hù)點(diǎn)的是豪華禮物弃榨,通過(guò)HTTP代理工具把發(fā)送給服務(wù)器的請(qǐng)求的禮物ID改為普通禮物的ID。

解決方案:

1猜揪、改用HTTPS惭墓;

2、添加校驗(yàn)碼而姐;

解釋下方案2腊凶,把所有的get參數(shù),key按照字符串順序排序拴念,value用"/"串起來(lái)钧萍,最后再加一串特定的字符,最終對(duì)這串值進(jìn)行MD5政鼠,把MD5的串添加到code字段风瘦。客戶(hù)端公般、服務(wù)器都對(duì)核心邏輯收到的消息万搔,進(jìn)行一次校驗(yàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末官帘,一起剝皮案震驚了整個(gè)濱河市瞬雹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刽虹,老刑警劉巖酗捌,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涌哲,居然都是意外死亡胖缤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)阀圾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哪廓,“玉大人,你說(shuō)我怎么就攤上這事初烘∥姓妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵账月,是天一觀的道長(zhǎng)综膀。 經(jīng)常有香客問(wèn)我澳迫,道長(zhǎng)局齿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任橄登,我火速辦了婚禮抓歼,結(jié)果婚禮上讥此,老公的妹妹穿的比我還像新娘。我一直安慰自己谣妻,他們只是感情好萄喳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蹋半,像睡著了一般他巨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上减江,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天染突,我揣著相機(jī)與錄音,去河邊找鬼辈灼。 笑死份企,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的巡莹。 我是一名探鬼主播司志,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼降宅!你這毒婦竟也來(lái)了骂远?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤钉鸯,失蹤者是張志新(化名)和其女友劉穎吧史,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體唠雕,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贸营,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岩睁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钞脂。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捕儒,靈堂內(nèi)的尸體忽然破棺而出冰啃,到底是詐尸還是另有隱情,我是刑警寧澤刘莹,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布阎毅,位于F島的核電站,受9級(jí)特大地震影響点弯,放射性物質(zhì)發(fā)生泄漏扇调。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一抢肛、第九天 我趴在偏房一處隱蔽的房頂上張望狼钮。 院中可真熱鬧碳柱,春花似錦、人聲如沸熬芜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)涎拉。三九已至瑞侮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鼓拧,已是汗流浹背区岗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毁枯,地道東北人慈缔。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像种玛,于是被迫代替她去往敵國(guó)和親藐鹤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容