Harmony IviewsSample SDK 开发文档

一、如何集成SDK

1.1 说明

目前我司有三个服务器如下:

1.2 代码集成

直播流程图

失败
成功
失败
成功
没有
没有
开始
获取连接token
是否获取成功
检查原因
结束
连接IOT
连接IOT是否成功
设备离线
发送直播指令
设置P2P超时
超时内是否返回P2P地址<指令9>
P2P超时失败
p2p成功
设置画面出现超时
超时内是否出现视频画面
画面出现超时失败
观看直播

集成过程

1、添加权限

找到项目的module.json5文件,这个文件一般在”项目名/entry/src/main“目录下,其中entry是项目创建时默认名称,若贵司项目有修改,需以实际为准。然后在module.json5这个json文件中,module属性下面,增加requestPermissions属性,并且添加下面几个权限

权限说明:

权限说明是否必须
ohos.permission.INTERNET网络权限是,基础权限必须
ohos.permission.GET_WIFI_INFO获取wifi信息否,如果设备需要使用AP配网,或获取WiFi信息,则必须
ohos.permission.MICROPHONE麦克风权限否,如果需要对讲功能,则必须
ohos.permission.ACCESS_BLUETOOTH访问蓝牙权限否,如果设备需要使用蓝牙配网,则必须

其中,麦克风权限和蓝牙权限需要用户授权,所以需要在权限申请里面,增加申请原因(reason)和使用场景(usedScene),内容根据项目实际进行填写,如何填写,可以查看鸿蒙开发文档--声明权限

2、添加动态库

①将IviewsSample项目里面entry/libs的文件,全部放入贵司对应的目录下

②将entry\src\main下面的cpp目录同样拷贝到贵司对应的目录下。

③在项目entry\srcbuild-profile.json5文件里面,增加对Native的配置

注:其中,path指向的是对应的CMakeLists.txt文件的路径,而abiFilters是需要编译哪些CPU架构,一般手机都是arm64-v8a,模拟器则是x86_64,可根据项目实际需要进行填写。

④在项目entry\srcoh-package.json5文件里面,增加对这几个动态库的引用

注意:上面的引用,引用路径如果不一样,需要修改!

cpp文件下的c++代码说明,这个是一个yuv渲染的程序,生成的动态库名称叫做iviews_yuv_render,如果贵司已经有cpp目录,需根据内部源码进行调整。

3、直播集成

①直播流程可以查看直播流程图

②将src/main/ets/api下面的代码拷贝进入项目

③在项目里面增加播放控件

在XComponent属性中:libraryname必须要和动态库里面的一样,否则会出错,如果贵司将cpp里面的代码调整过,库名改动过,这个也必须要改

④在连接连接设备之前,为了确保连接的地址没问题,需要先设置设备连接的IOT服务器地址

这个设置一般在项目启动时,或者用户修改了连接的服务器区域,区域和IOT地址见文档第一节内容。

⑤获取直播令牌(注意,不是登录的Token),这个是需要根据我司的登录Token去获取的,调用下面接口获取

⑥创建连接

参数说明:

uid:设备UID

token:直播令牌(不是登录的Token)

callback:连接和指令回调

device:设备类型

orientation:设备旋转角度

liveCallback:直播数据回调,包括yuv数据、码流变化、视频大小变化,如果不直播,改参数可以不传

两个回调创建如下

⑦观看直播,调用方法

⑧退出直播

直播时异常情况处理

由于网络环境、业务和一些不可控的因素,无法保障每次连接设备观看直播都能成功,这部分逻辑可结合直播流程图来分析,所以需要对一些异常情况做处理,这个过程需要根据企业的业务逻辑自行编写逻辑(提示用户、重连...)

  1. 获取连接令牌

    这个步骤是单纯的网络请求,根据请求结果做处理即可

  2. AvClient回调的clientResultCallBack方法,当参数avIndex小于0时。

    出现这种情况说明设备掉线或者无法连接服务器成功,这种情况建议关闭连接,释放资源

  3. 指令返回

    由于业务逻辑等问题,当收到指令27(APP_CTRL_DEVICE_OFFLINE)或10002(APP_CTRL_USER_ONLINE_RESP)时,说明设备离线或者被其他人占用,这种情况就可以关闭连接释放资源

  4. 当发送直播指令,若APP长时间没有收到P2P地址<指令9>

    出现这种情况,建议重连,即释放AvClient资源,然后走重新获取连接令牌的流程

  5. 当获取到P2P地址<指令9>,但是commandCallback回调的obj的值小于0

    这种情况说明建立P2P失败,无法建立连接通道,这种情况可以关闭连接,释放资源

  6. 当获取到P2P地址<指令9>,并且obj的值>=0,但是一直没有显示画面

    这种情况有可能是网络太差,导致画面数据传输有问题。若长时间没有显示,可以关闭连接重连。

  7. 排查具体是什么原因连接不上设备

    当你发现无法连接设备时,你可以在下述代码中,增加日志打印来确定是什么原因导致的。

    在AvClient里面找到下面的callback函数,然后增加打印:

    根据typelen的值,来判断是什么原因

    type值为TYPE.IVIEWS_CONNECTION

    type值为TYPE.IVIEWS_LOGIN

    type值为TYPE.P2P_CONNECTION

4、AP配网

AP配网的功能是通过连接设备WiFi,发送需要连接的网络信息给设备,设备根据网络信息连接网络,然后用户添加这个设备。而需要进行AP配网,则需要libiviews_lanudp.so这个库,具体的使用请查看entry\src\main\ets\pages\apconfig下面的代码。

5、蓝牙配网

蓝牙配网的功能是通过连接设备蓝牙,然后通过发送蓝牙配网请求,设备联网成功之后,会返回UID,然后用户根据UID添加设备,需要的蓝牙配网相关代码在entry\src\main\ets\pages\blconfig,而这个目录下面的manager目录则是相关的蓝牙配网以来代码。

二、如何删减不需要的库

1、设备不支持AP配网

①不使用pages/apconfig下面的代码

②删除对应动态库:libs/${OHOS_ARCH}/libiviews_lanudp.so,并且将cpp/types/libiviews_lanudp删除,移除entry/oh-package.json5里面libiviews_lanudp.so的引用

2、设备不支持蓝牙配网

①不使用pages/blconfig下面的代码

3、不需要变声功能

①删除SoundTouch.ets这个文件,然后报错的地方,全部删除

②删除对应动态库:libs/${OHOS_ARCH}/libiviews_st.so,并且将cpp/types/libiviews_st删除,移除entry/oh-package.json5里面libiviews_st.so的引用

4、设备不支持临时密码

①不使用pages/temporarypwd下面的代码

②删除对应动态库:libs/${OHOS_ARCH}/libiviews_psd.so,并且将cpp/types/libiviews_psd删除,移除entry/oh-package.json5里面libiviews_psd.so的引用

5、不需要录像功能

①删除Mp4Recoder.ets这个文件,然后报错的地方,全部删除

②删除对应动态库:libs/${OHOS_ARCH}/libiviews_voaac.so,并且将cpp/types/libiviews_voaac删除,移除entry/oh-package.json5里面libiviews_voaac.so的引用

 

 

最后编辑时间:2024年11月29日