SDK使用说明
1、简介
本SDK支持在真机和模拟器上使用,模拟器与真机存在差异,效果以真机为准。 SDK使用Native方式引入,包含:so文件、oh-package.json5、jvplayer.d.ts文件,下载Demo可直接运行代码。
demo下载地址:下载demo
SDK下载地址:下载SDK
2、环境要求
系统API要求鸿蒙NEXT API11 及以上,建议使用DevEcoStudio5.0或当前官网最新IDE版本。 支持手机系统:鸿蒙NEXT 3.0.0.31及以上版本
3、用法
下载SDK并解压缩,用法如下:
第一步:App项目目录下,entry目录(或其他hap包的同类目录)下创建libs目录,将播放库压缩包解压到libs目录中。
第二步:App项目目录下,entry目录(或其他hap包的同类目录)下,编辑oh-package.json5文件,指定SDK所在目录,dependencies字段修改如下
"dependencies": {
"libjvplayer.so": "file:./libs"
}
第三步:Index.ets或其他自定义模块中,引入Native库,
import jvPlayer from "libjvplayer.so";
第四步:使用,示例如下:
XComponent({id: "video1", type: 'surface', libraryname: 'jvPlayer'}) // 注意,项目中有多个XComponent时,id需要全局唯一
Button("GetVersion").onClick(()=>{jvPlayer.GetVersionDetail();})
Button("Init").onClick(
()=>{ // 初始化与App生命周期相同,App启动后尽快执行,只执行一次
jvPlayer.Init(1, '/logs', (player_id:number, event_type:number, event_state:number, json_data:string)=>{
switch (event_type) {
case JPET_PLAY:
if(JPS_VIDEO_DECODE_SUCCESS == event_state) {
jvPlayer.Show(player_id, 'video1', 0, 0, 100, 100);
}
break;
default:
break;
}
}, ()=>{});
})
Button("Connect").onClick(()=>{jvPlayer.Connect('公有云url', 0, 1);})
第五步:需申请网络,MIC权限,如下:
ohos.permission.INTERNET
ohos.permission.MICROPHONE
打开App项目目录下-> entry/src/main/module.json5文件,和deviceTypes字段并列,增加以下代码:
"requestPermissions":[
{
"name" : 'ohos.permission.INTERNET',
"reason": "$string:reason",
"usedScene": {
"abilities": [
"FormAbility"
],
"when":"always"
}
},
{
"name" : 'ohos.permission.MICROPHONE',
"reason": "$string:reason",
"usedScene": {
"abilities": [
"FormAbility"
],
"when":"always"
}
}
]
以上内容为集成SDK的全部步骤,具体使用可参考Demo工程。SDK的主要接口使用说明在第四章节进行介绍。
4、SDK主要接口以及简单说明
/**
* @brief 初始化,App启动后尽快执行,只执行一次
* @param log_level 日志级别,0:无日志,1:所有日志,2:调试级别,3:信息级别。(app发布时,应将日志级别改为0或3,建议3)
* @param log_path 日志存放路径,utf8编码
* @param event_callback事件回调,格式参考上面函数定义:event_callback
* @param frame_callback,暂不支持
* @return 错误码
*/
export const Init: (log_level: number, log_path: string, event_callback: Function, frame_callback: Function) => number;
/*
* @brief Init函数第三个参数的原型
* @param player_id 播放器id
* @param event_type 参考:jvplayer.d.ts中jav_player_event_type_e的定义
* @param event_state 参考jvplayer.d.ts中不同type对应的state定义
* @param json_data json字符串描述信息,参考:jav_player_def.json
*/
export const event_callback: (player_id:number, event_type:number, event_state:number, json_data:string) => void;
/**
* @brief 获取版本号信息,utf8编码
* @return 版本信息字符串
*/
export const GetVersion: () => string;
export const GetVersionDetail: () => string;
/**
* @brief 连接媒体
* @param url 连接媒体所需的信息,支持:rtmp url、本地媒体文件路径:d:\1.mp4、平台返回的json串,utf8编码
* @param channel_index 通道标号,从0开始,p2p连接时有效
* @param stream_index 码流标号,p2p连接时有效,实时预览从0开始;传-1时,仅用作云视通1.0不预览实时流,获取设备信息等类似业务
* @return 成功返回player_id,失败返回0
*/
export const Connect: (url: string, channel_index: number, stream_index: number) => number;
/**
* @brief 录像回放
* @param url p2p连接所需的信息(平台返回的json串),utf8编码
* @param channel_index 通道标号,从0开始
* @param stream_index 码流标号,从0开始
* @param begin_time rfc3339 格式的时间,如:2020-06-27T17:18:00.000+08:00
* @param end_time rfc3339 格式的时间,如:2020-06-27T17:18:00.000+08:00
* @return 播放器id
*/
export const PlayRecord: (url: string, channel_index: number, stream_index: number, begin_time:string, end_time:string) => number;
/**
* @brief 断开连接,异步操作,无回调。所有返回的播放id都应调用此接口进行销毁
* @param player_id 播放器id
* @return 无
*/
export const Disconnect: (player_id: number) => number;
/**
* @brief 显示画面,可重复调用(设置显示区域),目前第二次以及后续的调用windows_id无效
* @param player_id 播放器id
* @param xcomponent_id xcomponent组件的字符串id
* @param left 屏幕坐标,显示位置最左侧(手机平台传入0)
* @param top 屏幕坐标,显示位置最顶侧(手机平台传入0)
* @param right 屏幕坐标,显示位置最右侧(手机平台传入xcomponent组件的宽)
* @param bottom 屏幕坐标,显示位置最底侧(手机平台传入xcomponent组件的高)
* @return 无
*/
export const Show: (player_id: number, xcomponent_id: string, left: number, top: number, right: number, bottom: number) => number;
/**
* @brief 回放暂停
* @param player_id 播放器id
* @return 无
*/
export const Pause: (player_id: number) => number;
/**
* @brief 恢复回放
* @param player_id 播放器id
* @return 无
*/
export const Resume: (player_id: number) => number;
/**
* @brief 单帧
* @param player_id 播放器id
* @return 无
*/
export const Step: (player_id: number) => number;
/**
* @brief 倍速
* @param player_id 播放器id
* @param speed 取值(-4~0~4)播放速度为:2^speed
* @return 无
*/
export const SetSpeed: (player_id: number, speed: number) => number;
/**
* @brief 跳转
* @param player_id 播放器id
* @param time_pos rfc3339 格式的时间,如:2020-06-27T17:18:00.000+08:00
* @return 无
*/
export const Skip: (player_id: number, time_pos: string) => number;
/**
* @brief 抓拍画面,适用于直播和回放
* @param player_id 播放器id
* @param format 0:bmp,1:jpg,2:png其他暂不支持
* @param fullname 抓图文件名(全路径)
* @return 无
*/
export const Snapshot: (player_id: number, format: number, fullname: string) => number;
/**
* @brief 开始录像
* @param player_id 播放器id
* @param format 0:mp4,其他暂不支持
* @param save_path 存储路径
* @param name_prefix 录像文件名前缀,录像名为:prefix_开始时间_结束时间.mp4
* @return 无
*/
export const RecordStart: (player_id: number, format: number, save_path: string, name_prefix: string) => number;
/**
* @brief 停止录像
* @param player_id 播放器id
* @return 无
*/
export const RecordStop: (player_id: number) => number;
/**
* @brief 开始下载
* @param url p2p连接所需的信息(平台返回的json串),utf8编码
* @param channel_index 通道标号,从0开始
* @param stream_index 码流标号,从0开始
* @param begin_time rfc3339 格式的时间,如:2020-06-27T17:18:00+08:00
* @param end_time rfc3339 格式的时间,如:2020-06-27T17:18:00+08:00
* @param format 0:mp4,其他暂不支持
* @param save_path 存储路径
* @param name_prefix 录像文件名前缀,录像名为:prefix_开始时间_结束时间.mp4
* @return 成功返回player_id,失败返回0
*/
export const DownloadTimeStart: (url: string, channel_index: number, stream_index: number, begin_time: string, end_time: string, format: number, save_path: string, name_prefix: string) => number;
/**
* @brief 停止下载
* @param player_id 播放器id
* @return 无
*/
export const DownloadStop: (player_id: number) => number;
/**
* @brief 开启语音对讲
* @param url 开启对讲所需的信息,支持:rtmp url、平台返回的json串(p2p)
* @param channel_index 通道标号,从0开始,p2p连接时有效
* @return 对讲id,失败返回0
*/
export const IntercomStart: (url: string, channel_index: number) => number;
/**
* @brief 停止语音对讲
* @param player_id 对讲id
* @return 无
*/
export const IntercomStop: (player_id: number) => number;