鸿蒙系统应用开发项目化教程 课件 项目5 开发视频播放器_第1页
鸿蒙系统应用开发项目化教程 课件 项目5 开发视频播放器_第2页
鸿蒙系统应用开发项目化教程 课件 项目5 开发视频播放器_第3页
鸿蒙系统应用开发项目化教程 课件 项目5 开发视频播放器_第4页
鸿蒙系统应用开发项目化教程 课件 项目5 开发视频播放器_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长沙民政职业技术学院鸿蒙应用开发在当前的移动互联网时代和流媒体时代,人们可以通过手机随时随地播放视频。本项目通过AVPlayer类和Video组件两种方式实现简单视频播放,让读者掌握基于HarmonyOS,用ArkTS语言实现视频播放的全流程鸿蒙应用开发项目五视频播放器用AVPlayer类实现视频播放

用Video组件实现视频播放目录CONTENTS掌握AVPlayer类和Video组件的使用;掌握播放器状态的变化;掌握资源文件的读取;掌握网络访问权限的设置;掌握视频播放的控制和切换;了解Swiper组件,List组件和Navigator组件的使用知识目标能用AVPlayer类和Video组件实现视频播放,能实现对视频播放器的控制能力目标培养文档阅读与理解能力培养代码编程规范意识的培养素养目标学习目标学习目标在当前的移动互联网时代和流媒体时代,人们可以通过手机随时随地播放视频。本项目通过AVPlayer类和Video组件两种方式实现简单视频播放器,让读者掌握基于HarmonyOS系统,用ArkTS语言实现视频播放的全流程。应用场景在HarmonyOS系统中,提供两种视频播放开发的方案:(1)AVPlayer:功能较完善的音视频播放ArkTS/JSAPI,集成了流媒体和本地资源解析,媒体资源解封装,视频解码和渲染功能,适用于对媒体资源进行端到端播放的场景,可直接播放mp4、mkv等格式的视频文件。(2)Video组件:封装了视频播放的基础能力,需要设置数据源以及基础信息即可播放视频,但相对扩展能力较弱。Video组件由ArkUI提供。视频播放开发方案PART-01用AVPlayer类实现视频播放AVPlayer类:功能较完善的音视频播放ArkTS/JSAPI,集成了流媒体和本地资源解析、媒体资源解封装、视频解码和渲染功能,适用于对媒体资源进行端到端播放的场景,可直接播放mp4、mkv等格式的视频文件。应用通过调用JS接口层提供的AVPlayer接口(图中②的部分)实现相应功能时,框架层会通过播放服务(PlayerFramework)解析成单独的音频数据流和视频数据流。音频数据流经过软件解码后输出至音频服务(AudioFramework)(图中④的部分),再至硬件接口层的音频HDI,实现音频播放功能。视频数据流经过硬件或者软件解码后输出至图形渲染服务(GraphicFramework)(图中⑤的部分),再输出至硬件接口层的显示HDI,完成图形渲染。视频播放流程编写视频播放应用时,关键的步骤是从XComponent组件获取窗口SurfaceID,和媒体资源一道传递给AVPlayer接口(图中①的部分)。视频播放流程XComponent组件可用于媒体数据写入,并将其显示出来。XComponent组件XComponent(value:{id:string,type:string,libraryname?:string,controller?:XComponentController})参数名参数类型必填描述idstring是组件的唯一标识,支持最大的字符串长度128。typestring是用于指定XComponent组件类型,可选值:-surface:组件内容单独送显,直接合成到屏幕。-component:组件内容与其他组件合成后统一送显。librarynamestring否应用Native层编译输出动态库名称。controllerXComponentcontroller否给组件绑定一个控制器,通过控制器调用组件方法。使用本地资源播放,必须确认资源文件可用可以从Context(应用上下文)中获取相应路径本地资源文件HAP视频文件即存放在resources/rawfile目录下的视频文件。可以通过ResourceManager.getRawFd方法获取resources/rawfile目录下对应rawfile文件的描述符。HAP资源文件播放网络视频时,需要申请权限ohos.permission.INTERNET网络视频文件文件形式视频资源文件播放网络视频时,需要申请权限ohos.permission.INTERNET。具体设置是在entry/src/main中的config.json文件,在module字段下配置权限。申请网络访问权限1"module":{2"reqPermissions":[3{4"name":"ohos.permission.INTERNET"5}6]}1"deviceConfig":{"default":{2"network":{3"cleartextTraffic":true4}5}},如果要支持http,需要config.json文件中deviceConfig字段下配置。推荐使用主流的播放格式,音视频容器、音视频编码属于内容创作者所掌握的专业领域,不建议应用开发者自制码流进行测试,以免产生无法播放、卡顿、花屏等兼容性问题。H264是所有设备均支持的视频格式,对于MPEG2,MPEG4,H263,VP8格式,不同设备的实际实现不同。建议开发者做对应的兼容处理,保证应用功能全平台兼容。主流的视频播放格式mp4,mkv的视频格式是H264/MPEG2/MPEG4/H263。视频文件的格式AVPlayer是播放管理类,用于管理和播放媒体资源。在调用AVPlayer的方法前,需要先通过createAVPlayer()构建一个AVPlayer实例。创建AVPlayer类时,首先需要导入media模块,然后通过调用media.createAVPlayer9+方法,以异步方式创建AVPlayer实例AVPlayer类方式1:通过注册回调函数获取AVPlayer实例。创建AVPlayer实例createAVPlayer(callback:AsyncCallback<AVPlayer>):void1importmediafrom'@ohos.multimedia.media';2letavPlayer3media.createAVPlayer((error,video)=>{4if(video!=null){5avPlayer=video;6('createAVPlayersuccess');7}else{8(`createAVPlayerfail,error:${error}`);9}10});语法示例创建AVPlayer实例方式2:通过Promise返回值获取AVPlayer实例创建AVPlayer实例createAVPlayer():Promise<AVPlayer>1importmediafrom'@ohos.multimedia.media';2letavPlayer3media.createAVPlayer().then((video)=>{4if(video!=null){5avPlayer=video;6('createAVPlayersuccess');7}else{8('createAVPlayerfail');9}10}).catch((error)=>{11(`AVPlayercatchCallback,error:${error}`);12});语法示例创建AVPlayer实例AVPlayer的状态转换AVPlayer的状态转换名称类型说明idlestring闲置状态,AVPlayer刚被创建createAVPlayer()或者调用了reset()方法之后,进入Idle状态。initializedstring资源初始化,在Idle状态设置url9+

或fdSrc9+属性,AVPlayer会进入initialized状态,此时可以配置窗口、音频等静态属性。preparedstring已准备状态,在initialized状态调用prepare()方法,AVPlayer会进入prepared状态,此时播放引擎的资源已准备就绪。playingstring正在播放状态,在prepared/paused/completed状态调用play()方法,AVPlayer会进入playing状态。AVPlayer的状态机,可通过state属性主动获取当前状态,也可通过监听stateChange事件上报当前状态,各种状态的具体含义见表AVPlayer的状态转换名称类型说明pausedstring暂停状态,在playing状态调用pause方法,AVPlayer会进入paused状态。completedstring播放至结尾状态,当媒体资源播放至结尾时,如果用户未设置循环播放(loop=1),AVPlayer会进入completed状态,此时调用play()会进入playing状态和重播,调用stop()会进入stopped状态。stoppedstring停止状态,在prepared/playing/paused/completed状态调用stop()方法,AVPlayer会进入stopped状态,此时播放引擎只会保留属性,但会释放内存资源,可以调用prepare()重新准备,也可以调用reset()重置,或者调用release()彻底销毁。releasedstring销毁状态,销毁与当前AVPlayer关联的播放引擎,无法再进行状态转换,调用release()方法后,会进入released状态,结束流程。errorstring错误状态,当播放引擎发生不可逆的错误,则会转换至当前状态,可以调用reset()重置,也可以调用release()销毁重建。AVPlayer的属性AVPlayer类的常用属性见下表。属性名后面的数字上标表示是API的版本。名称类型可读可写说明url9+string是是媒体URL,只允许在idle状态下设置,静态属性。支持的视频格式(mp4、mpeg-ts、webm、mkv)。fdSrc9+AVFileDescriptor是是媒体文件描述,只允许在idle状态下设置,静态属性。使用场景:应用中的媒体资源被连续存储在同一个文件中。surfaceId9+string是是视频窗口ID,默认无窗口,只允许在initialized状态下设置,静态属性。使用场景:视频播放的窗口渲染,纯音频播放不用设置。loop9+boolean是是视频循环播放属性,默认'false',设置为'true'表示循环播放,动态属性。videoScaleType9+VideoScaleType是是视频缩放模式,默认VIDEO_SCALE_TYPE_FIT_CROP,动态属性。audioInterruptMode9+audio.InterruptMode是是音频焦点模型,默认SHARE_MODE,动态属性。AVPlayer的属性AVPlayer类的常用属性见下表。属性名后面的数字上标表示是API的版本。名称类型可读可写说明state9+AVPlayerState是否音视频播放的状态,全状态有效,可查询参数。currentTime9+number是否视频的当前播放位置,单位为毫秒(ms),可查询参数。返回为(-1)表示无效值。duration9+number是否视频时长,单位为毫秒(ms),可查询参数。返回为(-1)表示无效值,直播场景默认返回(-1)。width9+number是否视频宽,单位为像素(px),可查询参数。返回为(0)表示无效值,height9+number是否视频高,单位为像素(px),可查询参数。返回为(0)表示无效值.AVPlayer的常用方法1和创建AVPlayer一样,AVPlayer类中的很多方法都有两种实现方式:注册回调函数的方式和返回Promise对象的方式。①prepare9+:准备播放视频。该方法必须在stateChange事件成功触发至initialized状态后,才能调用。②play9+:开始播放音视频资源,只能在prepared/paused/complete状态调用。1prepare(callback:AsyncCallback<void>):void//注册回调函数方式2prepare():Promise<void>//返回Promise对象方式1play(callback:AsyncCallback<void>):void//注册回调函数方式2play():Promise<void>//返回Promise对象方式AVPlayer的常用方法2③pause9+:暂停播放音视频资源,只能在playing状态调用。④stop9+:停止播放音视频资源,只能在prepared/playing/paused/complete状态调用。1pause(callback:AsyncCallback<void>):void//注册回调函数方式2pause():Promise<void>//返回Promise对象方式1stop(callback:AsyncCallback<void>):void//注册回调函数方式2stop():Promise<void>//返回Promise对象方式AVPlayer的常用方法3⑤reset9+:重置播放,只能在initialized/prepared/playing/paused/complete/stopped/error状态调用。⑥release9+:销毁播放资源,除released状态,都可以调用。1reset(callback:AsyncCallback<void>):void//注册回调函数方式2reset():Promise<void>//返回Promise对象方式1reset(callback:AsyncCallback<void>):void//注册回调函数方式2reset():Promise<void>//返回Promise对象方式AVPlayer的常用方法4⑦seek9+:跳转到指定播放位置,只能在prepared/playing/paused/complete状态调用。⑧setSpeed9+:设置倍速模式,只能在prepared/playing/paused/complete状态调用。seek(timeMs:number,mode?:SeekMode):voidsetSpeed(speed:PlaybackSpeed):void⑨setVolume9+:设置媒体播放音量,只能在prepared/playing/paused/complete状态调用。参数volume指定的相对音量大小,取值范围为[0.00-1.00],1表示最大音量,即100%。setVolume(volume:number):voidAVPlayer类的监听事件1视频播放的全流程包含:创建AVPlayer,设置播放资源和窗口,设置播放参数(音量/倍速/缩放模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。基于全流程场景,需要的监听事件如表所示。事件类型说明stateChange必要事件,监听播放器的state属性改变。error必要事件,监听播放器的错误信息。durationUpdate用于进度条,监听进度条长度,刷新资源时长。timeUpdate用于进度条,监听进度条当前位置,刷新当前时间。seekDone响应API调用,监听seek()请求完成情况。当使用seek()跳转到指定播放位置后,如果seek操作成功,将上报该事件。AVPlayer类的监听事件2事件类型说明speedDone响应API调用,监听setSpeed()请求完成情况。当使用setSpeed()设置播放倍速后,如果setSpeed操作成功,将上报该事件。volumeChange响应API调用,监听setVolume()请求完成情况。当使用setVolume()调节播放音量后,如果setVolume操作成功,将上报该事件。bitrateDone响应API调用,用于HLS协议流,监听setBitrate()请求完成情况。当使用setBitrate()指定播放比特率后,如果setBitrate操作成功,将上报该事件。availableBitrates用于HLS协议流,监听HLS资源的可选bitrates,用于setBitrate()。bufferingUpdate用于网络播放,监听网络播放缓冲信息。startRenderFrame用于视频播放,监听视频播放首帧渲染时间。videoSizeChange用于视频播放,监听视频播放的宽高信息,可用于调整窗口大小、比例。audioInterrupt监听音频焦点切换信息,搭配属性audioInterruptMode使用。如果当前设备存在多个媒体正在播放,音频焦点被切换(即播放其他媒体如通话等)时将上报该事件,应用可以及时处理。请使用AVPlayer类实现简单视频播放器的开发。任务实施基本任务只能实现一个视频文件的播放,多个视频文件如何切换播放呢?请你实现多个视频文件的切换播放。任务拓展在ArkTsAPI的@ohos.multimedia.media(媒体服务)中视频播放有VideoPlayer8+和AVPlayer9+,AVPlayer9+实现了AudioPlayer6+和VideoPlayer8+整合,升级了状态机和错误码,因此在进行视频播放的应用开发时,推荐使用AVPlayer9+。常见问题本任务通用AVPlayer实现了一个简单视频播放器的开发,介绍了从创建AVPlayer,设置播放资源和窗口,设置播放参数(音量/倍速/缩放模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源的播放的全流程。建议读者可进一步详细了解AVPlayer的状态机。任务小结PART-02用Video组件实现视频播放Video组件:封装了视频播放的基础能力,需要设置数据源以及基础信息才可以播放视频,但相对扩展能力较弱。Video组件由ArkUI提供。Video组件用于播放视频文件并控制其播放状态,常用于为短视频应用和应用内部视频的列表页面。当视频完整出现时会自动播放,用户点击视频区域则会暂停播放,同时显示播放进度条,通过拖动播放进度条指定视频播放到具体位置。Video组件Video是用于播放视频文件并控制其播放状态的组件。其接口形式如下:Video组件Video(value:{src?:string|Resource,currentProgressRate?:number|string|PlaybackSpeed,previewUri?:string|PixelMap|Resource,controller?:VideoController})语法参数名参数类型参数描述srcstring|Resource视频播放源的路径,支持本地视频路径和网络路径。CurrentProgressRatenumber|PlaybackSpeed视频播放倍速。number取值仅支持:0.75,1.0,1.25,1.75,2.0。previewUristring|PixelMap8+

|Resource预览图片的路径controllerVideoController控制器Video组件的主要属性如下:Video组件的属性名称参数类型默认值描述mutedbooleanfalse是否静音。autoPlaybooleanfalse是否自动播放。controlsbooleantrue控制视频播放的控制栏是否显示。objectFitImageFitCover设置视频显示模式。loopbooleanfalse是否单个视频循环播放。Video组件的主要事件如下:Video组件的事件名称功能描述onStart(event:()=>void)播放时触发该事件。onPause(event:()=>void)暂停时触发该事件。onFinish(event:()=>void)播放结束时触发该事件。onError(event:()=>void)播放失败时触发该事件。onPrepared(callback:(event?:{duration:number})=>void)视频准备完成时触发该事件,通过duration可以获取视频时长,单位为s。-duration:视频的时长。onSeeking(callback:(event?:{time:number})=>void)操作进度条过程时上报时间信息,单位为s。onSeeked(callback:(event?:{time:number})=>void)操作进度条完成后,上报播放时间信息,单位为s。onUpdate(callback:(event?:{time:number})=>void)播放进度变化时触发该事件,单位为s,更新时间间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论