主流视频客户端核心代码的实现

Android原生的VideoView的样式真心弱爆了,但是拥有巨大用户量的网易新闻客户端居然使用的就是这个,真心服了网易的产品经理。目前主流的视频网站,国内的如优酷、土豆、爱奇艺、搜狐,国外的如最具代表性的youtobe,它们一同在移动互联网的浪潮下竞逐,也都推出了对应的移动视频客户端。不知从何时起,他们推出的客户端基本都统一了视频播放界面的交互风格。当然这种交互的风格如此风靡,肯定有其内在的原因,那就是它让客户端更加迎合用户的操作习惯,更加的智能。现在只要一看到视频播放界面,总会不由自主的会用手指左右滑动屏幕,期待有特定的交互响应。

下面我们就简单介绍下这种交互风格的几大特征。

1、播放界面不会固定横屏或者竖屏,而是随传感器自动旋转屏幕,并且无缝的衔接播放的视频

2、手指左滑屏幕,快退;手指右滑屏幕,快进

3、在左半屏,手指下滑,调低亮度;手指上滑,调高亮度;退出当前页面,恢复亮度

4、同样的有个Seekbar也可以调整进度,样式一般自定义

5、视频上面会有两个遮罩浮层,一个在顶部,一个在底部;点击屏幕,遮罩层会自动显示,再点击会自动隐藏

6、调整音量的Toast一般也是自定义的

7、视频横屏,全屏显示

交代完几点酷炫的共同特征,我也正是朝着这几个目标前进的。欣慰的是,所有的这些功能也都给实现了,代码也都放在Github上了,可以先把玩下看看效果,相信会给你眼前一亮的感觉。尤其是那些正在饱受实现痛苦的同学,这时候看到你就爽了。先看下效果。

有朋友给建议说,多讲点基础和要点,要贴点代码。我觉得建议很好,所以呢,代码以后会少贴,想看源码的话,直接去Github clone下来。如果你有好的想法,或者代码哪里写的不尽如意,也欢迎大家提交pull request。

下面说几点大家可能需要注意的地方。

一、为什么需要重写VideoView,原生的不好嘛?

VideoView,和WebView一样,是Android中重量级的控件,都需要时间去缓冲,大量的操作需要用在渲染上。所以可以想象他们对内存的压力还是蛮大的,不过有Google大神们的Framework层的强力支持,开销的事情基本不用上层程序员操心。VideoView作为如此重要的一个控件,导致很多手机厂商都在对它进行自己的定制化修改,这也造就了VideoView的碎片化。可能同一套的视频代码,在不同手机上的显示的效果可能相去甚远。而且原生的VideoView是不支持全屏播放的,而是视频的大小为多少,展现在手机上的就有多大,超屏的话按照全屏等比例缩放。所以完全有必要写出一套VideoView去做兼容。

二、手指的交互是如何实现的?

Android中判定手指位置和滑动距离可以通过两种方式,一种是设置OnTouchListener的回调监听,另一种是使用手势监听类GestureDetector,然后在OnGestureListener里面做回调监听。我采用的是第一种,通过判断手指落下的位置和手势的位移的不同,进而去实现不同的逻辑。

三、遮罩层自动隐藏如何实现的?

默认进入视频播放页面,遮罩层是显示的。当视频播放开始,5秒钟后,遮罩层会自动隐藏。当遮罩层不显示的时候,点击屏幕,遮罩层弹出,再点击,就隐藏。显示和隐藏都伴随这动画的执行,效果不错。有人会说,简单的定时器Timer不就搞定了嘛。我建议大家尽量在Android中编码尽量少用Timer,可以选择使用Handler的延迟执行方法postDelayed(Runnable r, long delayMillis)方法。

四、横竖屏切换的无缝对接的实现方式

出门右转,查看历史消息《由Android屏幕旋转说起》,看完你就了解了。

好了,今天的干货都到此为止。

源码地址:https://github.com/JackCho/AndroidVideoView

如果觉得对你有所帮助,欢迎大家订阅我的微信公众账号——Android干货分享(ID:android_share)。下面是微信的二维码,为你提供及时高质的Android干货。

时间: 2024-09-29 11:10:02

主流视频客户端核心代码的实现的相关文章

Darwin Streaming Server 核心代码分析

基本概念 首先,我针对的代码是Darwin Streaming Server 6.0.3未经任何改动的版本. Darwin Streaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对Darwin Streaming Server核心代码的理解. Reactor模式是典型的事件触发模式,当有事件发生时则完成相应的Task,Task的完成是通过调用相应的handle来实现的,对于handle的调用是由有限个数的Thread来完

【转】Darwin Streaming Server 核心代码分析

无意中看到了dqzhangp的一篇博客,分析了DSS的核心架构,读完顿时感觉豁然开朗,茅塞顿开,写得非常的鞭辟入里,言简意赅,我想没有相当的功力是写不出这样的文章的,情不自禁转到自己空间来,生怕弄丢了. 基本概念   首先,我针对的代码是Darwin StreamingServer 6.0.3未经任何改动的版本. DarwinStreaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对DarwinStreaming Serv

自定义cas客户端核心过滤器authenticationFilter

自定义cas客户端核心过滤器AuthenticationFilter 关于cas客户端的基本配置这里就不多说了,不清楚的可以参考上一篇博文:配置简单cas客户端.这里是关于cas客户端实现动态配置认证需要开发说明. 往往业务系统中有些模块或功能是可以不需要登录就可以访问的,但是添加了cas客户端之后,通过cas客户端filter中的url-pattern来设置需要过滤的url,有时根本无法满足实际业务的需求,这里笔者就通过对cas客户端中源码的阅读,和对认证流程的理解,对cas客户端做了些改动,

Python3网络爬虫(八):爱奇艺等主流视频网站的VIP视频破解(在线观看+视频下载)

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.前言 没有会员,想在线观看或下载爱奇艺.PPTV.优酷.网易公开课.腾讯视频.搜狐视频.乐视.土豆.A站.B站等主流视频网站的VIP视频?又不想充会员怎么办?博主本次写的VIP视频破解助手也许可以帮你解决烦恼. 二.软件使用说明 1.软件下载 软件运行平台:Windows 注意:该软件已经打包成exe可

iOS网络开发-打造自己的视频客户端

一.展示实现 效果      客户端:                                      服务器端:            二.创建表 1 create table CourseVideo 2 ( 3 VideoID int IDENTITY(1,1) NOT NULL, 4 CourseID int NOT NULL, 5 VideoName varchar(500) NULL, 6 VideoPath [varchar](100) NULL, 7 VideoImage

对Java tutorial-examples中hello2核心代码分析

1.在hello2中有两个.java源文件分别是GreetingServlet.Java和ResponseServlet.jva文件主要对以下核心代码做主要分析. 1 String username = request.getParameter("username"); //获取表单数据 2 if (username != null && username.length() > 0) { 3 RequestDispatcher dispatcher = //定义一

高稳定、低延时、高并发RTMP播放器流媒体音视频播放器EasyPlayer-RTMP-iOS器如何将核心代码打包成静态库

背景分析 RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写.该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种.RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信.支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等. EasyPlayer-RTMP

Libgdx: android单机斗地主支持局域网wifi联网的网络模块核心代码

这个作品是我最近写的,结合我的毕业设计的通信模块和之前的单机版斗地主.我已经上架到豌豆荚了,贴了点广告,看看能不能赚点茶钱.可是一点也不乐观.因此我想分享给大家源码.只要不用于商业. 下面先贴网络模块的核心代码,第一次写这种逻辑用的udp, 经验不够,没有写的那么好看. 这里是我上架的apk,大家下载来试试也无妨: 地址 http://www.wandoujia.com/apps/com.hj.joker package com.hj.net; import java.io.ByteArrayI

从阅读Discuz的核心代码并给出注释的经历分析程序员该如何阅读代码?

本文标签:   程序员 php Discuz的核心代码 框架 深度学习框架 阅读优秀的代码,是技术水平成长的最佳途径.记得每个进来的新人,我都做过阅读优秀代码的要求,但几乎都只能坚持很少一段时间而已. 前晚大家还在开玩笑的讨论,都是因为看了前人的一些写法,才学会了一些乱七八糟的花招. 晚上我又开始重新阅读Discuz的核心代码,花了1h多的时间,才完成一个core文件的注释. 注释后的代码: <?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * Th