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;

results matching ""

    No results matching ""