仿:Android - 微信 - 朋友圈 - 小視頻播放,多 4 句廢話算我輸


作者:林冠宏 / 指尖下的幽靈
掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8
博客:http://www.cnblogs.com/linguanh/
GitHub : https://github.com/af913337456/

為了您的直觀體驗,請務必看完下面 gif 圖,源碼 gitHub 鏈接在其之后。

做這個東西的目的是:
完善畢設: 一個沒依賴各種雲,而使用C++和Golang做后端的仿微信APP


為了避免大家浪費時間,直接先看下面的 Gif,略大,請耐心點。看完后,若你覺得會需要到,那么就請聽我繼續。

gif 鏈接 http://123.57.244.105:8081/commentthumb/GIF.gif
git顯示,略大,請耐心

GitHub 鏈接

廢話一句:這個顯示只是其中一部分,重點是:FFmpeg + Camera 的錄制部分,所以,你的星星(star)也是一種更新通知 (我通知你)。

https://github.com/af913337456/WeChatVideoView

功能點

如果你看完上面的gif圖,你會發現如下幾點功能 (Function list):

1,直觀的

  • 播放前,可以顯示封面縮略圖
  • 播放時,如果還沒有本地緩存,那么先進行下載
  • 下載過程中,顯示圓型區域進度效果
  • 下載后,播放完畢后可以循環播放
  • 播放已經播放過的,是具備本地緩存的,也就是既能播放網絡,也能播放本地

2,隱藏的

  • 低耗電量
  • 低內存占用
  • 無延遲圖與視頻切換
  • 低耦合,高內聚,幾行代碼接入,一共3個類

解析

直觀的功能點,幾乎就是和新版微信的一樣,從朋友圈點擊一個視頻,然后進入到一個 Activity 頁面進行加載以及播放。

為什么低耗電量和低內存占用?

因為采用的是 SurfaceView 而不是 TextureView,圖與視頻切換的切換延遲也是這個原因。

在你的 Activity 中這樣使用


這樣就會以 id 為 activity_main 的 Relativelayout 為父容器裝載。
因為要避免內存泄露,所以你還需要做完下面的一些步驟,不會超過6行代碼。
git顯示,略大,請耐心

技術點 (可以不看)

1,下載操作:

自定義 AsyncTask。PS:AsyncTask 比 Thread + handler 重量級卻方便(回調進度),但是,如果是 即放即用,結束即銷毀,那么,no need to think about this;

2,視頻播放組合拳: surfaceView + mediaPlayer

surfaceView 用作顯示,mediaPlayer 用來解碼
兩者關系: mediaPlayer 綁定 surfaceView。

為什么不用 TextrueView?
3,進度區域

自定義 View,3個畫筆繪制,一個圓,一個邊,一個扇區。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM