视频播放器实例讲解

作者:创世魂

● 辅助说明

注意:本类位于“多媒体功能支持”模块中,必须添加此模块才能使用。

 

● 准备工作

 

界面如下图:

打开窗口设计器,拖放一个“线性布局器”

随后设置其“布局方向”“横向布局”


随后在“线性布局器”内,放入四个“按钮”

并且分别设置“文本”属性起名。


继续放一个“线性布局”和两个“按钮”,并给“按钮”起名。

最终达到如下图所示的效果。


最后在“基本组件”内找到“视频播放器”,拖放到设计器内。

并分别设置“组件宽度/高度类型”


点击“确定”保存布局后,会看到如下代码。

同时右键“按钮”添加“按钮被单击”事件接收方法。

 

 

一、视频播放器

 

● 本类说明

 

本类为窗口组件,如同“按钮”一样,可以在窗口设计器内看到。

本组件可以用来播放“本地(存储卡)、网络”“安卓资源”中的视频文件。

本播放器支持“3GP、MP4、avi”等主流视频格式。

注意:并非所有的视频格式都支持播放。

图片中提到的“媒体控制器”会在稍后的“媒体控制器类”中进行详细介绍。

 

 

● 视频(写)
● 加载完毕(事件)
● 播放
● 暂停
● 停止
● 释放
● 重新播放

 

以上七个为关联方法,此处统一讲解。

 

“视频(写)”帮助文档:

“写属性”的作用就是为当前“视频播放器”设置要播放的视频。

视频地址可以为“存储卡视频”“网络视频”

当需要播放本地视频时,直接使用“黄色方框”内的方法即可。

无论是播放“网络视频”还是“本地视频”,务必保证地址正确。

并且视频格式能够被播放器支持,否则必然播放失败。

 

“加载完毕(事件)”帮助文档:

当调用“视频”写属性后,一段时间后(两三秒钟)就会触发“加载完毕”事件。

触发本事件后,才可以调用“播放”方法播放视频。

 

“播放”帮助文档:

顾名思义,就是用来播放已经加载好的视频。

“加载完毕”事件触发后,本方法才能正常使用。

同时本方法也可用来播放被“暂停”的视频。

 

“暂停”帮助文档:

顾名思义,就是“暂停”当前正在播放的视频。

暂停后,可以调用“播放”方法继续播放视频。

 

“停止”帮助文档:

顾名思义,“停止”播放当前视频。

停止后可以调用“重新播放”方法来重新开始播放。

 

“释放”帮助文档:

如果播放的是网络视频,调用本方法后会“释放”掉缓冲内容,并且会停止当前视频的播放。

调用“重新播放”可以重新开始播放当前视频。

 

“重新播放”帮助文档:

顾名思义,就是将当前视频重新开始播放。

 

代码编写(1):

“按钮_被单击”事件下,通过“如果”来判断来源对象是哪个按钮。

然后执行对应的属性方法。

 

代码编写(2):

随后右键“视频播放器”选择“事件接收方法”

 

代码编写(3):

在弹出的窗口中,选择“视频播放器_加载完毕”,最后点击“添加”

 

代码编写(4):

添加后,利用“如果”判断来源对象,弹出一个加载完毕的提示框。

 

运行效果如下图(GIF):

大家可以看到,点击“加载视频”后就弹出了对应的“加载完毕”提示。

此时就可以点击“播放”按钮播放视频。

接下来点击“暂停”后,重新点击“播放”会继续从原来的位置播放视频。

如果点击“停止”后去点击“播放”此时是无效的。

必须点击“重新播放”,视频才能开始播放,并且视频加载后会自动开始播放。

同样“释放”被点击后,必须去点击“重新播放”才能开始播放当前视频。

 

● 可否快进(读)
● 可否快退(读)
● 可否暂停(读)
● 正在播放(读)

 

以上四个读属性,全部返回的是逻辑型。

作用就是判断当前播放器对象,“是否可以快进”“是否可以快退”“是否可以暂停”“是否正在播放视频”

调用方式:通过“如果”来判断“视频播放器1.XXX”的返回值即可。

 

界面准备:

打开“界面设计器”,修改其中四个按钮的标题。

分别为:“是否正在播放”“可否暂停”“可否快进”“可否快退”

最后点击“确定”保存修改。

 

代码编写如下图:

直接通过“如果”来判断这四个“读属性”的返回值即可。

然后弹出对应的提示。

 

运行效果如下图(GIF):

可以看到,只有点击了“播放”按钮,正式播放视频后才会提示“正在播放”

视频播放后,“快进、快退”“暂停”自然都处于可以操作状态。

 

 

● 现行位置(读)
● 长度(读)
● 缓冲百分比(读)

 

“现行位置(读)”帮助文档:

顾名思义,本属性的作用是读取“当前视频”播放位置。

返回值的单位为“毫秒”

 

“长度(读)”帮助文档:

顾名思义,本属性的作用可以读取当前视频的总时长。

返回值依然是毫秒。

 

“缓冲百分比(读)”帮助文档:

本属性和前两个属性不同之处在于,本属性只能用于“网络视频”

因为只有加载“网络视频”才会有缓冲,返回值为百分比。

例如:总时长100分钟,视频缓冲了1分钟,最终返回“1”

返回值占总时长的百分之一。

 

界面设计如下图:

打开界面设计器,修改其中“三个按钮”的文本属性。

分别为“现行位置”“长度”“缓冲百分比”

 

代码编写如下图:

在原来的代码中,分别修改“按钮3、4、5”下方的代码。

修改为“视频播放器1.XXX”读属性,“除1000”得到“秒”,最后利用“到文本”方法对其进行转换。

注意:缓冲百分比不用除1000.

最后将结果显示在“按钮6”的内容属性上。

 

运行效果如下图(gif):

最终可以看到,视频播放后成功的读取“现行位置”“长度”“缓冲百分比”

因本视频很短,所以“缓冲百分比”此时显示“100?。

也就意味着视频已经缓冲完毕。

大家在测试过程中可以找一个长视频做测试。

 

 

● 现行位置(写)
● 播放结束(事件)
● 得到信息(事件)

 

“现行位置(写)”帮助文档:

顾名思义,本写属性的作用就是用来,设置当前播放进度。

它的单位依然是毫秒,数值应小于等于“长度”属性的返回值。

 

“播放结束(事件)”帮助文档:

顾名思义,当前视频播放结束后会触发本事件。

 

“得到信息(事件)”帮助文档:

开始播放视频后会触发本事件,并且会返回相应的“消息类型”

需要注意的是“消息代码”参数并不是特定的代码。

 

代码编写(1):

直接在源代码的基础上,修改“按钮3”被单击的代码。

修改为“现行位置”写属性,属性值填写“长度”读属性。

可以将其它用不到的代码删除掉。

这样编写代码,当前视频会直接播放到“视频结尾”的位置。

 

代码编写(2):

右键“视频播放器”继续添加“事件接收方法”

这里依次添加“播放结束”“得到信息”

 

代码编写(3):

“播放结束”事件下,判断来源对象后,调用“提示框”方法做演示。

 

代码编写(4):

“得到信息”事件下,判断来源对象后。

继续使用“如果”来判断“消息类型”参数是否等于“播放消息类型.XXX”

然后弹出对应提示。

注意:并非每一条“消息类型”都会返回。

例如:消息类型中的“未知”只有在播放视频出现未知错误的时候,才会返回此消息类型。

 

运行效果如下图(GIF):

可以看到点击“加载视频”后,提示“加载完毕”

点击“播放”“得到信息”事件开始被触发。

依次弹出提示“开始缓冲”“缓冲完毕”“开始渲染”

当点击“现行位置”设置播放进度后,“播放结束”随之弹出。

 

● 播放出错(事件)

 

帮助文档如下图:

本事件顾名思义,播放出现错误时会触发本事件。

错误分两种:“错误类型”“错误代码”

错误类型可以通过“播放错误类型.XXX”判断。

错误代码可以通过“播放错误代码.XXX”判断。

 

代码编写(1):

首先在源代码的基础上,修改“视频”中的地址,随便输入一个错误的地址。

看看“播放出错”事件是否能被触发。

 

代码编写(2):

添加“播放出错”接收事件后,判断来源对象。

然后分别判断“错误类型”参数和“错误代码”参数,弹出对应提示。

 

运行结果如下图(GIF):

可以看到弹出一个“信息框”,此信息框是核心库内置的错误信息框。

除此之外还弹出了“错误类型”对应的“未知错误”提示,但是“错误代码”并未提示。

也就证明,一个错误的播放地址,并不会触发“错误代码”参数。

 

● 媒体控制器(读)

 

帮助文档如下图:

通过本读属性,可以用来显示当前“视频播放器”“媒体控制器”

控制内有“播放”“前进”“后退”等控制按钮,可以点击操作。

本属性会在“媒体控制器类”中详细介绍,此处不再讲解。

 

 

二、媒体控制器类

 

● 本类说明

 

通过本类中的方法,可以操作视频播放器的媒体控制器。

媒体控制器内包含“播放/暂停”“快进、快退”“上一首、下一首”等控制按钮。

 

● 显示
● 隐藏
● 是否显示(读)

 

“显示”帮助文档:

顾名思义,调用本方法可以显示当前视频播放器的“媒体控制器”

注意:如果“未加载”视频的情况下,本方法无效。

 

“隐藏”帮助文档:

顾名思义,隐藏当前视频播放器的媒体控制器。

注意:如果“未加载”视频的情况下,本方法无效。

 

“是否显示(读)”帮助文档:

顾名思义,判断当前媒体控制是否显示。

注意:如果“未加载”视频的情况下,本属性返回“假”

 

界面准备如下图:

打开界面设计器,修改其中三个按钮的“文本”标题。

修改后保存布局。

 

代码编写如下图:

媒体控制器有两种操作模式,分别如下。

第一:“显示”按钮被点击后。

定义“媒体控制器类”变量,设置参考。

然后通过“视频播放器1.媒体控制器”属性,读取控制器对象,赋值给定义的“媒体控制器”变量。

最后通过“变量”名调用“显示”方法,即可实现显示当前控制器。

第二:“隐藏”按钮被单击后。

直接输入“视频播放器1.媒体控制器.隐藏()”即可调用当前方法。

 

运行效果如下图(GIF):

可以看到,在没有播放视频的情况下,点击“显示”按钮并没有任何效果。

加载视频播放后,就可以对“媒体控制器”进行隐藏和显示操作。

同时控制器内的“播放/暂停”按钮,也可以操作。

 

● 显示时长(写)

 

帮助文档如下图:

本写属性的作用,用来设置当前播放器临时显示时长,单位毫秒。

真实时长显示后,本时长会隐藏。

通常情况下,本时长肉眼不可见,因此不再演示。

调用方法:“视频播放器1.媒体控制器.显示时长=10000”

 

 

● 锚点视图(写)

 

“锚点视图(写)”帮助文档:

简单来说,本写属性的作用,就是设置“媒体控制器”的显示位置。

而要显示的位置,可以设置为一个“窗口组件”

例如:“按钮”“文本框”或者当前的“视频播放器”都可以。

只要是窗口组件,都可以设置为显示视图。

 

界面设计如下图:

修改“按钮4”的标题为“锚点试图”,修改后保存布局。

 

代码编写如下图:

“锚点视图”被单击下,直接书写“视频播放器1.媒体控制器.锚点视图=XXX”即可。

例如:此处填写“按钮6”

 

运行效果如下图(GIF):

可以看到点击“锚点视图”后,“媒体控制器”从最下面来到了“按钮6”所在的位置。

并且“媒体控制器”大小也和“按钮6”一致。

因此大家在设置“锚点视图”时,一定要保证组件足够宽。

 

 

● 上一首被单击(事件)
● 下一首被点击(事件)

 

帮助说明:

以上两个事件均是由“媒体控制器”触发。

注意:在此之前,一定要进行“挂接事件”操作。

 

代码编写(1):

首先在当前窗口的“通知_被启动”方法下,进行挂接事件操作。

直接输入“挂接事件(视频播放器1.媒体控制器)”即可。

关于“通知_被启动”可看“窗口操作教程”

 

代码编写(2):

定义一个“媒体控制器类”变量,右键选择“事件接收方法”

在弹出的窗口中依次选择“上一首被点击”“下一首被点击”后,点击“添加”

 

代码编写(3):

添加后,通过“如果”命令分别指定来源对象,然后弹出对应提示。

 

运行结果如下图(GIF):

可以看到“媒体控制器”中的“上一首、下一首”按钮被点击后,成功弹出了对应提示。

如果不进行挂接事件操作,必然无法弹出提示。