仿:Android - 微信 - 朋友圈 - 小视频播放,多 4 句废话算我输

作者:林冠宏 / 指尖下的幽灵

腾讯云+社区:https://cloud.tencent.com/developer/user/1148436/activities 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/

为了您的直观体验,请务必看完下面 gif 图,源码 gitHub 链接在其之后。

做这个东西的目的是: 完善毕设: 一个没依赖各种云,而使用C++和Golang做后端的仿微信APP

为了避免大家浪费时间,直接先看下面的 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行代码。

技术点 (可以不看)

1,下载操作:

自定义 AsyncTask。PS:AsyncTask 比 Thread + handler 重量级却方便(回调进度),但是,如果是 即放即用,结束即销毁,那么,no need to think about this;

2,视频播放组合拳: surfaceView + mediaPlayer

surfaceView 用作显示,mediaPlayer 用来解码 两者关系: mediaPlayer 绑定 surfaceView。

为什么不用 TextrueView?
3,进度区域

自定义 View,3个画笔绘制,一个圆,一个边,一个扇区。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jack-Cui

Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言     近期,有些朋友问我一些关于...

4367
来自专栏Linyb极客之路

前端性能优化-雅虎军规35条

合并图片(如css sprites,内置图片使用数据)、合并CSS、JS,这一点很重要,但是要考虑合并后的文件体积。

1005
来自专栏Samego开发资源

web性能测压工具 | siege

2068
来自专栏菩提树下的杨过

如何在不影响asp.net默认安全性的前提下使用ckeditor/fckeditor?

asp.net默认情况下,不允许提交包含html源代码的表单,这在很大程度上防止了跨站(提交)攻击,但是ckeditor/fckeditor之类的富文本编辑器肯...

2149
来自专栏JavaQ

深入Spring Boot (十):整合Mybatis框架详解

Spring Boot整合Mybatis支持XML配置和全注解两种方式,本篇将详细解说这两种方式的Mybatis整合,主要包含以下5部分内容: 数据源配置; 数...

3949
来自专栏菩提树下的杨过

Spring Security笔记:Remember Me(下次自动登录)

前一节学习了如何限制登录尝试次数,今天在这个基础上再增加一点新功能:Remember Me. 很多网站,比如博客园,在登录页面就有这个选项,勾选“下次自动登录”...

2606
来自专栏青蛙要fly的专栏

项目需求讨论- 手机锁屏及APP退到后台后自动锁定功能

大家好,又到了新一期的项目需求讨论,很多APP都有安全的意识,比如一些银行的APP,你登录后,看一些东西,然后这时候锁屏了。或者是按了Home键退到了后台,这时...

703
来自专栏Java架构沉思录

OAuth 2.0是什么?看这篇文章就够了。

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。

723
来自专栏玄魂工作室

CTF实战4 HTTP协议及嗅探抓包

HTTP(Hypertext Transfer Protocol)中文<超文本传输协议>,是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是Int...

612
来自专栏恰同学骚年

CMS项目实践学习总结

  这个暑假把ITCAST的2011年2月的.NET就业班的视频看了一遍,因为以前把免费的2010版和2011版的视频都看了一遍,所以这次选择了其中的几个部分作...

775

扫码关注云+社区