SDK使用说明

1、接入必读
  • 本SDK只包含真机调试的功能,不支持任何模拟器的调试。
  • 设备添加流程请参考Demo源码,注意设备状态。
  • Android的Demo使用so库加jni文件的方式引入SDK,下载Demo可直接运行代码。
2、简介

本文档用于澄清慧视云开放平台SDK Android版本接口之间的关系以及接口调用顺序。

3、环境准备

支持 Android studio 1.4及以上版本

支持 JDK 7.0以上版本

支持 Android 手机系统4.0以上版本,包含华为鸿蒙系统

支持NDK 21版本

4、环境配置
1.安装SDK
方式一:使用Gradle安装

如果是之前才用过直接下载方式的需要删除之前拷贝进来的所有so库文件以及jar包

allprojects {
    repositories {
        maven { url "https://jitpack.io" }

    }
}
dependencies {
    /*SDK核心模块,必须依赖*/
    implementation 'com.github.jovision:jvplayer:***'
}
方式二:直接下载安装

下载SDK并解压缩

使用默认配置,不需要修改build.gradle。在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录,jni.java文件复制到com.jovision.jvplayer包下即可。

2.配置权限

在AndroidManifest.xml中配置权限:

<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
        <!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
5、SDK初始化

可以直接在首页启动后调用播放库的初始化。

/**
 * @brief 初始化
 * @param object 事件回调对象,需实现void OnJavEvent(int player_id, int event_type, int event_state, String json_data);
 * @return 错误码
 */
public static native int javPlayerInit( Object object );
6、直播流程
1.视频连接
/**
 * @brief 连接媒体
 * @param info 连接媒体所需的信息,支持:url、本地媒体文件路径:d:\1.mp4、平台返回的json串,utf8编码
 * @param channel_index 通道标号,从0开始,p2p连接时有效
 * @param stream_index 码流标号,从0开始,p2p连接时有效
 * @return 成功返回player_id,失败返回0
 */
public static native int javPlayerConnect(String info, int channel_index, int stream_index);

参数说明

参数 参数类型 参数说明
info String 走p2p协议可直接把平台返回json串传入,走jvmp协议需要将jvmp字段解析出来传入
channel_index int 通道标号,从0开始;
stream_index int 码流标号,0为主码流,1为次码流,默认传0;

连接回调处理

void OnJavEvent(int player_id, int event_type, int event_state, String json_data){
        if (event_type == 0) {
        if (event_state == 9) {
        //解码成功,显示画面在SurfaceView上
        Jni. javPlayerShow (playerId, mSurfaceHolder.getSurface(), 0, 0, mSurfaceHolder.getSurfaceFrame().width(),                                                 mSurfaceHolder.getSurfaceFrame().height());
        } else {

        }
        }
        }

回调参数说明

参数 参数类型 参数说明
player_id int 连接返回player_id,用来对应画面;
event_type int 事件类型,取值如下: 0:直播或者回放连接事件; 1:按时间回放进度; 2:按文件回放进度; 3:录像事件; 4.:对讲事件 5:录像下载事件
event_state int 事件类型为0时,事件状态,取值如下: 0:无状态; 1:已连接; 2:连接失败; 3:连接限制(p2p连接时,设备连接达到上线了) 4:连接中断(网络异常或服务中断) 5:连接断开(正常断开,可用于判断录像回放结束)7:正在缓冲 8:解码失败 9:解码成功,收到解码成功后即可调用show接口来预览图像
json_data String 携带数据,例如录像回放的进度信息;
2.显示画面
/**
* @brief 显示画面,可重复调用(设置显示区域),目前第二次以及后续的调用windows_id无效
* @param player_id 播放器id
* @param surface 窗口句柄(安卓平台传入surface,IOS平台传入view)
* @param left 屏幕坐标,显示位置最左侧(手机平台传入0)
* @param top 屏幕坐标,显示位置最顶侧(手机平台传入0)
* @param right 屏幕坐标,显示位置最右侧(手机平台传入view的宽)
* @param bottom 屏幕坐标,显示位置最底侧(手机平台传入view的高)
* @return 无
*/
public static native void javPlayerShow(int player_id, Object surface, int left, int top, int right, int bottom);

注:此方法需在UI线程调用;

3.视频断开
/**
 * @brief 断开连接,异步操作,无回调。所有返回的播放id都应调用此接口进行销毁
 * @param player_id 播放器id
 * @return 无
 */
public static native void javPlayerDisconnect(int player_id);

playerId是调用连接媒体接口成功后返回的;

4.开关视频声音
/**
 * @brief 是否静音
 * @param player_id 播放器id
 * @param enable 0 静音, 1 播放
 * @return 无
 */
public static native void javPlayerMute(int player_id, int enable);

参数说明:

参数 参数类型 参数说明
player_id int 连接视频返回的player_id
enable int 1:播放;0:静音;

注意:只有单分屏时才可调用该方法;回放画面声音也是这个方法;

7、回放流程
1.播放回放
/**
 * @brief 录像回放
 * @param p2p_info 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
 */
public static native int javPlayerPlayRecord(String p2p_info, int channel_index, int stream_index, String begin_time, String end_time);

参数说明:

参数 参数类型 参数说明
p2p_info String 服务器返回的json串,Gson解析异常造成的的问题,可参考Android常见问题
channel_index int 通道标号,从0开始;
stream_index int 码流标号,0为主码流,1为次码流,默认传0;
begin_time String 开始时间,rfc3339固定格式,例如2020-07-01T00:00:00.000+08:00,取值为获取到的录像文件的开始时间转成对应格式;
2.视频连接状态回调
void OnJavEvent(int player_id, int event_type, int event_state, String json_data){
        if (event_type == 0) {
        if (event_state == 9) {
        //解码成功,显示画面在SurfaceView上
        Jni. javPlayerShow (playerId, mSurfaceHolder.getSurface(), 0, 0, mSurfaceHolder.getSurfaceFrame().width(), mSurfaceHolder.getSurfaceFrame().height());
        //连接成功之后,每秒收到回调接收当前播放的时间戳
        } else {

        }
        }
        }

:回调参数参考视频连接。

3.控制当前回放的暂停及播放
/**
 * @brief 回放暂停
 * @param player_id 播放器id
 * @return 无
 */
public static native void javPlayerPause(int player_id);
/**
 * @brief 恢复回放
 * @param player_id 播放器id
 * @return 无
 */
public static native void javPlayerResume(int player_id);
4.设置回放播放速度
/**
 * @brief 倍速
 * @param player_id 播放器id
 * @param speed 取值(-4~0~4)播放速度为:2^speed
 * @return 无
 */
public static native void javPlayerSetSpeed(int player_id, int speed);

参数说明:

参数 参数类型 参数说明
player_id int 连接返回player_id,用来对应画面;
speed int 倍速,取值为-4~0~4,播放速度为2^speed;
5.回放根据具体时间跳转
/**
 * @brief 跳转
 * @param player_id 播放器id
 * @param time_pos rfc3339 格式的时间,如:2020-06-27T17:18:00.000+08:00
 * @return 无
 */
public static native void javPlayerSkip(int player_id, String  time_pos);

参数说明:

参数 参数类型 参数说明
player_id int 连接返回player_id,用来对应画面;
time_pos String 指定时间,rfc3339固定格式,例如2020-07-01T00:00:00.000+08:00;
8、对讲流程
1.开启对讲
/**
 * @brief 开启语音对讲
 * @param info 开启对讲所需的信息,支持:url、平台返回的json串(p2p)Gson解析异常造成的的问题,可参考Android常见问题
 * @param channel_index 通道标号,从0开始,p2p连接时有效
 * @return 对讲id,失败返回0
 */
public static native int javPlayerIntercomStart(String info, int channel_index);

channel_index:

NVR 设备对讲:传 -1

IPC 设备对讲:传 0

NVR 通道对讲:从0开始

2.结束对讲
/**
 * @brief 停止语音对讲
 * @param player_id 对讲id
 * @return 无
 */
public static native void javPlayerIntercomStop(int player_id);
3.对讲状态回调

回调参数说明:

参数 参数类型 参数说明
player_id int 连接返回player_id,用来对应画面;
event_type int 事件类型,取值如下: 0:直播或者回放连接事件; 1:按时间回放进度; 2:按文件回放进度; 3:录像事件; 4.:对讲事件 5:录像下载事件
event_state int 事件类型为4时,事件状态,取值如下: 0:无状态; 1:开始对讲成功; 2:开始对讲失败; 3:对讲中断;4:对讲结束
json_data String 携带数据,无;
9、抓拍
/**
 * @brief 抓拍画面,适用于直播和回放
 * @param player_id 播放器id
 * @param format 0:bmp,1:jpg,2:png其他暂不支持
 * @param fullname 抓图文件名(全路径)
 * @return 无
 */
public static native void javPlayerSnapshot(int player_id, int format, String fullname);
10、本地录像
1.开启录像
/**
 * @brief 开始录像
 * @param player_id 播放器id
 * @param format 0:mp4,其他暂不支持
 * @param save_path 存储路径
 * @param name_prefix 录像文件名前缀,录像名为:prefix_开始时间_结束时间.mp4
 * @return 无
 */
public static native void javPlayerRecordStart(int player_id, int format, String save_path, String name_prefix);

本地录像回调对应状态说明:

:int类型,从0开始

枚举值 说明
JRS_NONE 无状态
JRS_START_RECORD 开始录像
JRS_CREATE_PACKAGE_OK 创建录像文件成功,收到json数据,详见:player_record
JRS_CREATE_PACKAGE_FAILED 创建录像文件失败
JRS_CLOSE_PACKAGE_OK 关闭录像文件成功,收到json数据,详见:player_record
JRS_CLOSE_PACKAGE_FAILED 关闭录像文件失败
JRS_WRITE_FAILED 写入失败
JRS_STORE_THE_WARNING 存储空间不足
JRS_STOP_RECORD 关闭录像
2.停止录像
/**
 * @brief 停止录像
 * @param player_id 播放器id
 * @return 无
 */
public static native void javPlayerRecordStop(int player_id);
11、切换码流

先把码流的连接断开,然后重新创建新码流连接即可。(换码流连接)

12、设备本地录像远程下载
1.下载分为两个方式:按时间段下载和按文件下载。
/**
 * @brief 开始下载按时间段
 * @param info 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
 * @param format 0:mp4,其他暂不支持
 * @param save_path 存储路径
 * @param name_prefix 录像文件名前缀,录像名为:prefix_开始时间_结束时间.mp4
 * @return 无
 */
public static native void javPlayerDownloadTimeStart(String info, int channel_index, int stream_index, String begin_time, String end_time, int format, String save_path, String name_prefix);
/**
 * @brief 开始下载,传入开始结束时间是内部为了计算文件总时长
 * @param info p2p连接所需的信息(平台返回的json串),utf8编码
 * @param file_name 按文件下载时需传入文件名
 * @param begin_time rfc3339 格式的时间,如:2020-06-27T17:18:00.000+08:00
 * @param end_time rfc3339 格式的时间,如:2020-06-27T17:18:00.000+08:00
 * @param format 0:mp4,其他暂不支持
 * @param save_path 存储路径
 * @param name_prefix 录像文件名前缀,录像名为:prefix_开始时间_结束时间.mp4
 * @return 无
 */
public static native int javPlayerDownloadFileStart(String info, String file_name, String begin_time, String end_time, int format, String save_path, String name_prefix);
2.暂停下载
/**
 * @brief 暂停下载
 * @param player_id 播放器id
 * @return 无
 */
public static native void javPlayerDownloadPause(int player_id);
3.继续下载
/**
 * @brief 继续下载
 * @param player_id 播放器id
 * @return 无
 */
public static native void javPlayerDownloadResume(int player_id);
4.停止下载
/**
 * @brief 停止下载
 * @param player_id 播放器id
 * @return 无
 */
public static native void javPlayerDownloadStop(int player_id);
13、摄像机配置网络

声波配网播放声波

/**
 * @brief 开始播放声波
 * @param data 要生成声波的字符串
 * @param times 重复次数
 * @return 无
 */
public static native void utlStartSoundWave(String data, int times);

/**
 * @brief 停止播放声波
 * @return 无
 */
public static native void utlStopSoundWave() ;
14、其他
1. AAC文件录音及播放
  1. 录制AAC文件
/**
 * @brief 开始采集声音到文件(AAC编码格式ADTS文件格式),仅支持手机端,不能与语音对讲功能同时使用
 * @param channels 通道数,目前仅支持1通道
 * @param sample_rate 采样率,支持8000、16000
 * @param sample_bits 采样位宽,支持8、16
 * @param fullname aac文件路径
 * @return 无
 */
public static native void utlStartCollectSoundToAACFile(int channels, int sample_rate, int sample_bits, String fullname);

/**
 * @brief 停止采集声音,结束文件写入
 * @return 无
 */
public static native void utlStopCollectSound();
  1. 播放AAC文件
/**
 * @brief 播放aac格式的声音文件(AAC编码格式ADTS文件格式),仅支持手机端,不能与语音对讲功能同时使用
 * @param channels 通道数,目前仅支持1通道
 * @param sample_rate 采样率,支持8000、16000
 * @param sample_bits 采样位宽,支持8、16
 * @param fullname aac文件路径
 * @return 无
 */
public static native void utlPlayAACFile(int channels, int sample_rate, int sample_bits, String fullname);

/**
 * @brief 停止播放aac声音文件
 * @return 无
 */
public static native void utlStopPlayAACFile();
2. 图片解密
/**
 * @brief 解密aes加密的文件
 * @param src_file_full_name 源文件
 * @param key 密钥
 * @param iv 向量
 * @param dst_file_full_name 目标文件
 * @return 0:成功,<0:失败
 */
public static native int utlAesCbcDecryptFile(String src_file_full_name, String key, String iv, String dst_file_full_name);

results matching ""

    No results matching ""