生活随笔
收集整理的這篇文章主要介紹了
Android项目-IPTV经验总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文鏈接: https://blog.csdn.net/feather_wch/article/details/81251771
個人項目總結的內容,對你們沒有任何幫助。千萬不要看。
IPTV總結
版本: 20180917-2(1700)
- IPTV總結
- iptv
- 登陸
- 擴展知識點
- 負載均衡
- Token和Session
- 轉發和重定向
- AES和Base64
- 項目中實戰
- 網絡請求
- 播放
- 升級策略
- 產品包訂購
- 首頁海報
- 預約(直播、影視、連續劇)
- 消息推送
- DLNA
- 性能優化
- 布局優化
- 代碼優化
- 內存優化
- 功耗優化
- 網絡優化
- 內存泄露優化
- 版本兼容適配
- 影視頁面
- 即將上線、直播看什么
- 播放器相關
- 下載
- 換膚
- 數據緩存
- 參考資料
iptv
1、IPTV是什么?
IPTV即交互式網絡電視
2、EPG服務器是什么?
IPTV的一個子系統,用于向用戶提供節目等各方面服務。
登陸
1、登陸流程
graph
TD;
A(登陸頁面_60號業務_密碼驗證);
B(獲取EncryToken_61號業務_Getencrytoken.jsp_EPP負載均衡);
C(獲取UserToken_63號業務_Moblieusertoken.jsp);
A-->
B;
B-->C;
2、60/61號業務講解
將用戶賬號/密碼發送到服務器,驗證是否有效。走61號業務獲取EncryToken,此時會進行EPG的負載均衡。EncryToken是用于后續的加密認證。
3、62/63號業務
帶上驗證加密串去獲取用戶令牌驗證加密串:對EncryToken、時間戳、隨機字符串等按照一定組合生成了一個字符串,然后通過AES加密算法進行加密,對加密后的結果用Base64算法轉換為字符串。其他會返回EPG服務器新地址、特定請求的實際地址(搜索服務器等)、JSESSIONID。
擴展知識點
負載均衡
4、負載均衡是什么?
負載均衡是一種網絡技術將多個服務器以等價地位的方式組成一個服務器集合,將服務器的負載分攤到所有服務器上面。
5、EPG負載均衡
是指用戶登錄EPG1,EPG1會將用戶信息交給一個總控的Manager,Manager通過判斷進行負載均衡,然后將合適的服務器如EPG3的地址交給EPG1,EPG1將地址重定向到EPG3.
Token和Session
6、EncryToken是什么?
加密令牌 :業務管理平臺為用戶分配的臨時身份證明,只用于認證加密。在62/63號業務,利用該Token去獲取UserToken
7、UserToken
用戶令牌:用于表明用戶的身份。項目中多用于訂購產品包等需要驗證用戶身份的情況。
8、Token和Session
Session的狀態是存儲在服務器端,客戶端只有session id;而Token的狀態是存儲在客戶端
9、Token和Session的區別
Session基于Cookie實現,應用重啟后丟失。Token是為了防止Cookie被清除。廣義來說一切維護用戶狀態的技術都是session,一切動態生成的服務端有能力鑒別真假而本身無涵義的字符串都是token
10、sessionID
Session用于解決Http協議中不能維持狀態的問題,只存儲于服務器,不進行網絡傳輸,相對于Cookie更安全些第一次訪問服務器會在服務器端生成一個session,有一個sessionid和它對應。tomcat生成的sessionid叫做jsessionid。
轉發和重定向
11、轉發和重定向的區別
轉發是服務器行為,重定向是客戶端行為請求次數:
轉發:客戶端只進行了一次請求重定向:客戶端進行了兩次請求內部機制不同:
轉發: 服務端必須是在同一個web容器下的url,不能再轉向到其他的web路徑上。中間傳遞的是自己的容器內的request。重定向: 新的location可以重定向到任何URL上,實質是客戶端發起了兩次請求,也就沒有request傳遞的概念。
12、轉發的流程和原理
客戶端發送http請求web服務器接受此請求服務端在內部完成請求處理和轉發動作將目標資源發送給客戶端。對于客戶端來說依然是第一次訪問的路徑,也就是客戶端感覺不到服務端進行了轉發。轉發行為就是客戶端只進行了一次訪問請求。
13、重定向的流程
客戶端發送http請求服務端接受請求后發送302狀態碼響應及對應新的location給客戶端客戶端發現302狀態碼后會在發起一個新的http請求,請求的url是新的location地址新的location可以重定向到任何URL上客戶端可以觀察到地址的變換。
AES和Base64
14、AES(高級加密標準)
是對稱密鑰加密中最流行的算法之一。
15、Base64的作用?
Base64編碼的作用:由于某些系統中只能使用ASCII字符。Base64就是用來將非ASCII字符的數據轉換成ASCII字符的一種方法。
項目中實戰
16、LoginFragment登陸頁面
會先初始化Preference(存儲用戶名、是否記住賬號)、初始化等待登陸的Dialog初始化LoginImp。點擊“登陸”按鈕后,會檢查網絡,然后通過LoginImpl.requestLogin()發起登陸請求請求完成后,會通過EventBus調用到自身的onEventMainThread()方法登錄失敗會彈出提示登陸成功后: 會有登陸成功提示框,確認后退出登陸頁面。
17、LoginImp封裝登陸流程
requestLogin(): 通過SDKLoginMgr.startLogin()發起登陸請求。游客賬號和密碼是配置在配置頁面中。SDK發起登陸請求后,會回調:onLoginReturn()接口,判斷返回碼登陸成功: 會去設置用戶語言、用戶媒體服務類型,并且保存用戶名、密碼、EPG的地址、SessiondId和FrameID(模板ID),模板涉及到服務端的jsp接口。登錄失敗: 將結果打包好后,發送EventBus到登陸頁面。此外登陸成功后,還會開啟后臺的服務,包括推送服務、本地直播提醒和影視預約的服務、以及定時更新用戶Token的服務。 然后發送成功的EventBus到登陸頁面。并且有一個回調onHeartbeatReturn()接口進行心跳保活
18、SDKLoginMgr
封裝登陸業務的SDK封裝了60/61號業務,將用戶賬號/密碼發送到服務器進行驗證,然后走61號業務獲取EncryToken,并且會進行EPG的負載均衡。封裝了62/63號業務,利用EncryToken加密令牌,去獲取UserToken(用戶令牌),此外該業務會返回EPG服務器新地址、特定請求的實際地址(搜索服務器等)、JSESSIONID。
短信驗證碼登陸
19、短信驗證碼登陸的實現
利用短信接口發送驗證碼到用戶手機走短信登陸接口去進行用戶的登陸。短信登陸接口分為兩個情況:
一種是直接內部會走服務端的60/61-62/63業務,獲取到用戶Token、Epg地址、特殊服務器地址、SessionbID等關鍵數據另一種業務系統較老,從短信登陸接口獲取到該手機號對應的密碼,然后額外使用登陸SDK封裝的功能去進行登錄。
網絡請求
1、項目網絡請求的方法?
對OKHttp進行封裝。采用線程池-CachedThreadPool接收到返回數據后切換到UI線程,回調給上層。
2、OkHttp3提供了Cookie的自動管理
客戶端請求登陸后,服務端會返回帶有唯一登陸認證信息Session的Response(存放在Cookie中),如何實現在下次請求時自動放入呢?OkHttp3提供了自動管理也可以手動添加。
播放
播放器初始化
1. 查詢VOD/Channel/片花/時移/TVOD 播放等的URL ;
1. 播放器初始化
1. 播放器open
1. 播放器start
1. 播放器pause
1. 播放器resume
1. 播放器stop
1. 播放器seek跳轉到具體位置
continuePlayplayerStart()openPlayerToPlay
是否需要支持加密播放的URL進行重定向IBasePlayer.open url =
AbstractPlayer.class openInternal
升級策略
產品包訂購
我的訂購
首頁海報
專題
預約(直播、影視、連續劇)
1、直播預約
用戶預約該節目單,等到達節目單時間,前5分鐘的時候,服務端就會推送消息到客戶端客戶端彈窗提示。選擇進入“消息中心”或者“直接播放”直接播放就是會進入TV詳情頁面,因為暫時節目單還沒到,因此會播放當前正在播放的內容。等到了時間,就會繼續播放。
1、直播進行預約
調用預約接口,將直播的節目單的節目code,內容code, 還有電信code。媒體類型等十幾個數據。預約成功:return 0預約失敗:return 其他code和erro msg
消息推送
1、后臺Service利用Socket和服務端進行長連接。
2、持續和服務端發送心跳包
3、Socket斷線重連
定時發送心跳包。socket.connect會有異常SocketTimeOutException表示連接超時,因此進行重連。
4、如何和服務端通信
發送數據:獲取OutPutStream向里面write數據讀取數據:獲取InpuSTream,從中read數據。
5、獲取到推送的消息
服務端會通過該長連接向客戶端發送消息客戶端接收,按照事先規定的格式進行解析。
DLNA
投屏
回甩
性能優化
布局優化
移除了四層過度繪制:
1. 給Activity設置了主題,并將背景設置為null。
1. Activity中主動調用getWindow().setBackgroundDrawable(null);消除默認Window背景
1. 原來項目中存在一個老舊的側滑菜單。該菜單已經廢棄卻依然占據了一次過度繪制。因此將該側滑菜單進行了移除。
1. 將MainFragment的背景設置為透明色。
層級優化
將最多的17層布局,優化到了7層。
1. 用約束布局對所有頁面進行優化。
1. 一些動態欄目,在一些局點上用不到,因此使用ViewStub進行優化。
1. 用include對通用UI進行了優化
1. 用merge標簽配合include減少了布局層級。
代碼優化
移除了所有早前遺留內容里面的Hashtable用SparseArray在一定情況下替換了HashMap
內存優化
使用線程池進行優化,減少系統開銷。Bitmap優化listview等列表優化,在滑動時禁止加載,避免了快速滑動的性能問題。
功耗優化
將執行后后臺任務的Service換為IntentServiceToast在后臺時,不會在生效。
網絡優化
三級緩存
內存泄露優化
一個第三方開源庫,控件存儲了Activity Context,并且在內部的靜態數據集合上存儲了控件,但是在Activity退出的時候,沒有將這個靜態的內部集合中的控件移除,最終導致了內存泄露10MB。
版本兼容適配
影視頁面
即將上線、直播看什么
播放器相關
下載
換膚
數據緩存
參考資料
OkHttp3簡單的使用說明和Cookie自動化管理管理
總結
以上是生活随笔為你收集整理的Android项目-IPTV经验总结的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。