媒体播放实例讲解

作者:创世魂

● 辅助说明

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

 

 

一、媒体播放基础类

 

 

● 本类说明

 

本类实现了对“视频和音频”播放。

 

 

● 新建
● 播放
● 暂停
● 停止
● 准备
● 释放
● 现行位置(读)

 

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

 

“新建”帮助文档:

顾名思义,通过本方法可以建立一个“媒体播放基础类”对象。

通过该对象可以进行播放“音乐”“视频”的操作。

需要注意的是,不需要执行“准备”可以直接“播放”媒体。

使用方法:直接在参数内填写“媒体路径”即可建立当前对象。

网络路径:“http://XXXX.mp4或mp3”

本地路径:取外部存储空间根目录 ().取文件名 ()+"/XX.mp4或mp3"

备注:如果要播放视频,必须要调用“展示组件”,不然无法显示播放画面。

 

“播放”帮助文档:

顾名思义,调用本方法后将会“播放”当前加载的媒体。

如果再次之前调用了“暂停”方法,将会从暂停的位置“继续播放”

如果执行了“停止”方法,必须要调用“准备/异步准备”才能调用本方法进行播放媒体。

 

“暂停”帮助文档:

顾名思义,“暂停”当前媒体的播放。

暂停后可调用“播放”继续播放。

 

“停止”帮助文档:

顾名思义“停止”当前媒体播放。

停止后可调用“准备/异步准备”来重新准备媒体,最后调用“播放”可重新播放。

 

“准备”帮助文档:

调用“媒体(写)”或者“加载媒体”方法后,想要执行“播放”方法。

必须调用本方法或“异步准备”才能开始播放。

除此之外,调用“停止”方法后,务必调用本方法才能重新播放。

 

“释放”帮助文档:

调用本方法后会停止播放当前媒体,并且释放所有占用的资源。

建议“退出/切换窗口”时,务必调用本方法释放资源。

 

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

顾名思义,读取当前媒体播放进度,单位毫秒。

 

界面准备如下图:

在原界面的基础上,修改所有“按钮标题”

随后拖放一个“文本框”组件,设置组件宽度类型为“匹配父组件宽度”

最后点击“确定”保存布局。

 

代码编写(1):

定义两个变量,类型分别为“媒体播放基础类”“时钟类”

注意:媒体播放器基础类要设置参考属性。

随后右键“时钟类”选择“事件接收方法”添加时钟周期事件。

 

代码编写(2):

添加完毕后如下图所示。

指定来源对象,设置“文本框1.内容”为当前媒体播放进度。

这样一来,就可以通过“时钟”定时获取当前播放进度。

 

代码编写(3):

“按钮_被单击”事件下,利用“如果”来判断每一个按钮被点击。

点击后执行对应的方法。

此处“新建”方法,我读取的是存储卡内的“音频文件”

如果要读取网络文件,直接填写“http://www.***.com/***.mp3”即可。

注意2:“时钟”务必要设置“周期”时间,设置时间后务必执行“启动”方法。

 

运行效果如下图(GIF):

通过“文本框1”的状态,可以看出,当前媒体的所有操作均处于正常状态。

 

● 新建2

 

帮助文档如下图:

本方法和“新建”不同之处在于,本方法是通过“原始数据资源”来加载媒体。

简单来说,通过“原始数据资源”可以将媒体文件内置到安卓APP中。

播放的媒体,就是内置的文件。

具体操作方法可以看“参数说明”

 

代码编写如下图:

根据参数说明,定义一个“原始数据资源”的变量,点击“按钮”导入一个媒体文件。

随后在“按钮1”被单击下,执行“新建2”方法,参数内直接填写“媒体文件”变量名即可。

演示效果参考“新建”方法。

 

● 媒体(写)

 

帮助文档如下图:

本写属性和“新建”不同之处在于,执行本属性后务必执行“准备/异步准备”方法,才能进行播放。

代码编写如下图:

调用本属性,需要提前将“媒体播放基础类”“参考”取消。

随后直接给本属性赋值本地媒体路径即可。

如果要读取网络媒体,直接填写“http://www.***.com/***.mp3”即可。

注意:调用本属性设置“媒体”,务必调用“准备/异步准备”方法才能播放。

演示效果参考“新建”方法。

 

● 加载媒体

 

帮助文档如下图:

本方法和“媒体”写属性不同之处在于,本方法可以自定义请求头。

如果不会填写请求头,默认为空即可。

参数2:通常情况下填写“本对象”即可,“本对象”就代表“当前窗口”

参数3:直接输入要播放的地址即可。

 

代码编写如下图:

直接在上一个方法的代码基础上,修改“媒体”写属性为“加载媒体”方法即可。

注意:使用本方法务必执行“准备/异步准备”才能进行播放媒体。

演示效果参考“新建”方法。

 

● 异步准备

 

帮助文档如下图:

简单来说使用根本方法,窗口不会在加载音乐时卡死。

加载“网络媒体”时,建议使用本方法准备。

调用方式,参考“准备”方法。

 

● 重置

 

帮助文档如下图:

本方法的作用就是将当前播放的媒体,进行重置操作。

即恢复到最开始加载媒体的初始化状态。

图文教程无法演示,自行测试。

 

 

● 置音量

 

帮助文档如下图:

顾名思义,设置当前媒体“左右声道”的音量。

调用方法:媒体播放基础类.置音量(媒体变量,20,20)。

图文教程无法演示,自行测试。

 

 

● 长度(读)
● 现行位置(写)

 

以上两个属性和“视频播放器”中的“长度(读)”“现行位置(写)”方法作用一致。

此处不再详细介绍,可参考视频播放器中的方法。

 

 

● 屏幕常量(写)
● 是否循环(写)
● 是否循环(读)
● 是否播放(读)

 

“屏幕常亮(写)”帮助文档:

顾名思义,调用本属性后,屏幕会保持常亮状态(即屏幕不会自动熄灭)。

注意:某些手机可能会强制息屏。

 

“是否循环(写)”帮助文档:

顾名思义,调用本属性后,可以设置当前媒体是否循环播放。

 

“是否循环(读)”帮助文档:

本读属性的作用,返回当前媒体是否正在循环播放。

循环播放返回“真”,否则返回假。

 

“是否播放(读)”帮助文档:

返回当前媒体,是否正在播放。

播放返回真,否则返回假。

 

界面准备如下图:

分别修改所有按钮的标题,达到如下图效果。

 

代码编写如下图:

按钮1被单击:执行“加载媒体”“准备”方法。

按钮2:执行“播放”,设置“时钟”

按钮3:执行“屏幕常亮”写属性(图文教程无法演示屏幕常亮,自行测试)。

按钮4:执行“是否循环”写属性。

按钮5、6分别执行“是否循环”“是否播放”读属性。

 

运行结果如下图(GIF):

通过“文本框1”的内容和弹出的“提示框”可以看到,所有方法均正常执行。

 

●下一首

 

帮助文档如下图:

顾名思义,调用本方法可以播放设置的“下一首”媒体。

需要注意的是,调用本方法并不会立刻播放下一首。

而是会在当前媒体播放完毕后,才会播放下一首。

 

界面准备如下图:

修改“按钮6”的文本标题为“下一首”

 

代码编写(1):

保存修改后,定义一个新的“媒体播放基础类”变量,变量名为“媒体播放2”

 

代码编写(2):

“时钟类_时钟事件”下,定义两个“文本型”变量。

分别给这两个变量赋值两个媒体的“播放进度”

最后将两个媒体变量连接后赋值给“文本框1.内容”

 

代码编写(3):

“按钮6”单击下,调用“媒体播放2”“加载媒体”方法,随后执行“准备”

最后将“媒体播放2”的变量放入“下一首”的参数中。

 

运行结果如下图(GIF):

播放的“test.mp3”是一个极短的音频文件,所以“循环播放”时当前播放进度一直是“0”.

“媒体2”的进度一直是一个负数。

当我点击“下一首”之后,“媒体2”的播放进度立刻就变成了正整数。

也就表明“倩女幽魂.mp3”开始播放,“test.mp3”停止播放。

 

● 展示组件(写)
● 视频宽度(读)
● 视频高度(读)

 

“展示组件(写)”帮助文档:

本写属性的作用,加载视频媒体时提供视频显示画面。

显示画面为“高级画板”,务必保证绑定的“高级画板”存在于窗口上。

 

“视频宽度(读)”帮助文档:

顾名思义,返回当前视频的宽度,并非最终显示界面的宽度。

注意:务必保证当前视频正常播放。

 

“视频高度(读)”帮助文档:

顾名思义,返回当前视频的高度,并非最终显示界面的高度。

注意:务必保证当前视频正常播放。

 

界面准备如下图:

修改“按钮1、按钮2”的标题。

随后从左侧组件找到“高级画板”拖放到设计器内。

设置“高级画板”组件宽度高度类型分别为“匹配父组件宽度/高度”

最后点击“确定”保存布局。

 

代码编写(1):

“时钟类_时钟事件”下,定义三个文本变量。

分别赋值:播放进度,视频宽度和高度。

最后将这三个变量用加号连接,赋值给文本框显示。

 

代码编写(2):

“按钮1”被单击下,执行“媒体”写属性设置一个网络视频。

随后务必首先调用“展示组件”写属性设置值为“高级画板1”

最后建议调用“异步准备”方法,准备视频,因为调用此方法软件界面不会卡顿。

“按钮2”被点击后,就执行“播放”方法并启动“时钟”

 

运行效果如下图(GIF):

依次点击“新建视频”“播放视频”后,视频成功在“高级画板”上显示出来。

并且视频占满了整个高级画板,视频进度也正常显示。

“视频高度/宽度”也成功读取(并非高级画板的高度/宽度)。

如果要“暂停、停止、释放”当前视频,直接调用对应的媒体方法即可。

 

 

二、媒体播放类

 

● 本类说明

 

帮助如下图:

本类继承自“媒体播放基础类”,通过本类可以调用“媒体播放基础类”的所有方法。

也就是说,通过本类也可以实现媒体播放功能。

除了继承自“媒体播放基础类”的方法之外,本类还有8个事件方法。

重点讲解这八个事件的使用方法。

 

 

● 准备完毕(事件)
● 得到信息(事件)
● 播放出错(事件)
● 播放结束(事件)
● 用户移动位置完毕(事件)
● 缓冲被更新(事件)
● 视频尺寸被改变(事件)

 

“得到信息(事件)”

“播放出错(事件)”

“播放结束(事件)”

以上三个事件参考“视频播放器”,此处不再详细介绍。

 

“准备完毕(事件)”帮助文档:

当执行“准备/异步准备”完毕后,会触发本事件。

用户可以在本事件下执行“播放”方法,或者其它操作。

 

“用户移动位置完毕(事件)”帮助文档:

简单来说,就是调用“现行位置”写属性后,本事件会触发。

 

“缓冲被更新(事件)”帮助文档:

播放“网络音乐/视频”时,缓冲进度改变后会触发本事件。

 

“视频尺寸被改变(事件)”帮助文档:

播放视频时,尺寸被修改后会触发本事件。

本事件会返回改变后的高度和宽度。

 

界面准备如下图:

首先在原界面的基础上,修改其中三个按钮的标题。

然后在左侧的组件栏找到“进度条”拖放到“文本框”下面。

然后调整“进度条”风格为“水平进度条”,宽度类型设置为“匹配父组件宽度”

最后点击“确定”保存布局。

 

代码编写(1):

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

 

代码编写(2):

依次选择“缓冲被更新”“准备完毕”“用户移动位置完毕”“视频尺寸被改变”这四个事件。

选择后依次添加即可。

注:“字幕被改变”事件经测试无效,不讲解。

 

代码编写(3):

1、在“缓冲被更新”事件下,将返回的“百分比”赋值给“文本框1”显示。

实际操作过程中,大家可以赋值给一个进度条显示。

2、“准备完毕”下可以填写“播放”方法,或者和此处一样弹出一个“提示框”

3、“用户移动位置完毕”事件下弹出一个“提示框”做演示。

4、“视频尺寸被改变”事件下,可以将返回的“高度和宽度”用一个“提示框”弹出做演示。


 

代码编写(4):

分别在这“三个按钮”被单击事件下,填写对应的方法。

注意:“进度条1.最大进度值”就是字面上的意思,设置当前进度条的最大进度。

 

代码编写(5):

“时钟事件”下,定时更新“进度条1”的当前进度为“媒体播放”的当前进度。

 

运行结果如下图(GIF):

通过当前GIF图片可以看出,每一个事件全部触发。

并且“缓冲进度”“播放进度”均正常加载。

虽然没有执行任何修改视频尺寸的代码,但是“视频尺寸被改变”依然被触发。

那是因为视频被压缩到了“高级画板1”内播放,尺寸自然发生了变化,然后触发了本事件。