作者:林冠巨集 / 指尖下的幽靈 掘金:juejin.im/user/587f0d… 部落格:www.cnblogs.com/linguanh/ GitHub : github.com/af913337456…
為了您的直觀體驗,請務必看完下面 gif 圖,原始碼 gitHub 連結在其之後。
做這個東西的目的是: 完善畢設: 一個沒依賴各種雲,而使用C++和Golang做後端的仿微信APP
為了避免大家浪費時間,直接先看下面的 Gif,略大,請耐心點。看完後,若你覺得會需要到,那麼就請聽我繼續。
git顯示,略大,請耐心
GitHub 連結
廢話一句:這個顯示只是其中一部分,重點是:FFmpeg + Camera 的錄製部分,所以,你的星星(star)也是一種更新通知 (我通知你)。
功能點
如果你看完上面的gif圖,你會發現如下幾點功能 (Function list):
1,直觀的
- 播放前,可以顯示封面縮圖
- 播放時,如果還沒有本地快取,那麼先進行下載
- 下載過程中,顯示圓型區域進度效果
- 下載後,播放完畢後可以迴圈播放
- 播放已經播放過的,是具備本地快取的,也就是既能播放網路,也能播放本地
2,隱藏的
- 低耗電量
- 低記憶體佔用
- 無延遲圖與視訊切換
- 低耦合,高內聚,幾行程式碼接入,一共3個類
解析
直觀的功能點,幾乎就是和新版微信
的一樣,從朋友圈點選一個視訊,然後進入到一個 Activity 頁面進行載入以及播放。
為什麼低耗電量和低記憶體佔用?
因為採用的是 SurfaceView 而不是 TextureView,圖與視訊切換的切換延遲也是這個原因。
在你的 Activity 中這樣使用
這樣就會以 id 為 activity_main 的 Relativelayout 為父容器裝載。 因為要避免記憶體洩露,所以你還需要做完下面的一些步驟,不會超過6行程式碼。技術點 (可以不看)
1,下載操作:
自定義 AsyncTask。PS:AsyncTask 比 Thread + handler 重量級卻方便(回撥進度),但是,如果是 即放即用,結束即銷燬,那麼,no need to think about this;
2,視訊播放組合拳: surfaceView + mediaPlayer
surfaceView 用作顯示,mediaPlayer 用來解碼 兩者關係: mediaPlayer 繫結 surfaceView。
為什麼不用 TextrueView?
3,進度區域
自定義 View,3個畫筆繪製,一個圓,一個邊,一個扇區。