1. 介绍
此篇Codelab文档是基于实现一个简易播放器的高阶篇。在已实现视频播放功能的基础上,实现分布式跨设备视频操作。应用效果图如下:
2. 搭建
HarmonyOS环境
我们首先需要完成HarmonyOS开发环境搭建,可参照如下步骤进行。
2.1 安装DevEco Studio,详情请参考下载和安装软件。
2.2 设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
-如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
-如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
2.3 开发者可以参考以下链接,完成设备调试的相关配置:
-使用真机进行调试
-使用模拟器进行调试
3. 代码结构
实现一个简易播放器已对视频播放和播放界面代码结构做了讲解,本次Codelab只对视频列表页、视频迁移设备列表、迁移后控制界面及迁移服务核心代码做讲解,对于完整代码,我们会在6参考提供下载方式。代码结构图如下:
provider:该目录包含CommonProvider、ViewProvider和AdvertisementProvider。CommonProvider是一个ListContainer 多样式提供者管理类。ViewProvider结合CommonProvider使用,可以把布局文件中需要赋值的控件单独提取出来进行赋值。AdvertisementProvider实现广告视频资源定时滚动的效果。
ImplVideoMigration.idl:接口中定义了视频迁入、迁出、根据控制码对视频进行远程控制方法。
data:该目录包括滚动视频广告对象封装、即将上映视频对象封装以及视频图片格式定义。
VideoMigrateService:供远端连接的Service Ability。
manager:该目录下的文件为ImplVideoMigration.idl在编译时自行生成,初始生成位置为entry\build\generated\source\idl\com\huawei\codelab。
MediaUtil:对广告和视频列表对象初始化赋值。
config.json:配置文件,新增权限配置如下图:
ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允许监听分布式组网内的设备状态变化。
ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允许获取分布式组网内的设备列表和设备信息。
ohos.permission.GET_BUNDLE_INFO:用于查询其他应用的信息。
ohos.permission.DISTRIBUTED_DATASYNC:用于允许不同设备间的数据交换。
ohos.permission.INTERNET:用于允许设备访问网络。
4. 创建应用程序布局文件
在路径"resources/base/
layout"文件夹下创建video.xml为应用主页面,展示要播放的视频列表。
<DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:width="match_parent"
ohos:height="match_parent"
ohos:orientation="vertical">
<DirectionalLayout
ohos:height="match_content"
ohos:width="match_parent"
ohos:orientation="vertical"
>
<!--滚动的视频图片-->
<DependentLayout
ohos:id="$+id:video_advertisement_container_view"
ohos:width="match_parent"
ohos:left_margin="20vp"
ohos:height="175vp"
ohos:top_margin="20vp"
ohos:right_margin="12vp"
......
video.xml采用垂直方向的线性布局方式。整个页面分为三部分的内容。从上至下依次是PageSlider滚动广告布局,即将上映视频图标布局,可左右滑动的ListContainer布局。
PageSlider是一个描述滚动页面的组件,PageSliderIndicator是一个将滚动页面组件和其它组件比如图标、按钮等组合管理的管理器。本应用程序展示的滚动广告页面采取的是三组广告图片和图片title组成的PageSlider,广告图片和图片title组合样式由AdvertisementProvider定义。AdvertisementMo初始化代码如下:
public AdvertisementMo(int sourceId, String description) {
this.sourceId = sourceId;
this.description = description;
}
videoAdvertisementMos.add(new AdvertisementMo(ResourceTable.Media_video_advertisement0, "玩心释放 尽情创想"));
videoAdvertisementMos.add(new AdvertisementMo(ResourceTable.Media_video_advertisement1, "玩心释放 尽情创想"));
videoAdvertisementMos.add(new AdvertisementMo(ResourceTable.Media_video_advertisement2, "一起创造 焕新假期"));
AdvertisementProvider对滚动视频广告组件以list形式进行封装。
public class AdvertisementProvider<T extends Component> extends PageSliderProvider {
private List<T> componentList;
public AdvertisementProvider(List<T> componentList) {
this.componentList = componentList;
}
}
......
更多详细内容请下载附件查看