全部产品
云市场

使用指南

更新时间:2019-03-12 16:34:57

LinkVisual SDK使用说明

初始化及销毁

  • 调用lv_get_version打印版本信息
  • 完成lv_init所需要的参数,并且运行成功
  • lv_init成功后,在需要退出的时候调用lv_destroy进行销毁

下行消息通知

Link Kit SDK初始化后,将Link Kit回调的物模型服务类消息通过调用LinkVisual的linkkit_adapter_tsl_service给LinkVisual进行处理。

视频直播功能

  • 在LinkVisual SDK初始化时,注册以下三个回调,

    • lv_start_push_streaming_cb;
    • lv_stop_push_streaming_cb;
    • lv_on_push_streaming_cmd_cb。
  • 当LinkVisual SDK收到推流通知时,

    • LinkVisual SDK会调用lv_start_push_streaming_cb回调;
    • 设备调用lv_stream_send_config发送音视频参数;
    • 设备调用lv_stream_send_video发送视频数据;
    • 设备调用lv_stream_send_audio发送音频数据。
  • 当LinkVisual SDK收到停止推流通知时,

    • LinkVisual SDK会调用lv_stop_push_streaming_cb回调;
    • 设备停止调用lv_stream_send_video;
    • 设备停止调用lv_stream_send_audio;
    • 设备自行处理音视频采集的资源释放。
  • 直播时,

    • LinkVisual SDK会通过lv_on_push_streaming_cmd_cb回调通知设备强制I帧;
    • 设备调用lv_stream_send_config发送音视频参数;
    • 设备调用lv_stream_send_video发送一个I帧。

视频点播功能

  • 在LinkVisual SDK初始化时,注册以下四个回调

    • lv_start_push_streaming_cb
    • lv_stop_push_streaming_cb
    • lv_on_push_streaming_cmd_cb
    • lv_query_storage_record_cb
  • 当LinkVisual SDK收到查询设备本地录像列表通知时,

    • LinkVisual SDK会调用lv_query_storage_record_cb回调;
    • 设备应完成录像列表查询并回报。
  • 当LinkVisual SDK收到点播指定的文件的推流通知时,

    • LinkVisual SDK会调用lv_start_push_streaming_cb回调;
    • 设备调用lv_stream_send_config发送音视频参数;
    • 设备调用lv_stream_send_video发送视频数据;
    • 设备调用lv_stream_send_audio发送音频数据。
  • 当LinkVisual SDK收到结束点播推流通知时,

    • LinkVisual SDK会调用lv_stop_push_streaming_cb回调;
    • 设备停止调用lv_stream_send_video;
    • 设备停止调用lv_stream_send_audio;
    • 设备自行处理音视频采集的资源释放。
  • 点播过程中LinkVisual SDK收到暂停、恢复播放、seek等通知时,

    • LinkVisual SDK会调用lv_on_push_streaming_cmd_cb通知设备。

图片服务

  • 在LinkVisual SDK初始化时,注册trigger_pic_capture_cb这个回调。

  • 当LinkVisual SDK收到抓图通知时,

    • LinkVisual SDK会调用trigger_pic_capture_cb回调;
    • 设备调用lv_post_alarm_image上报抓图。
  • 设备主动上报移动报警、声音报警等事件时,

    • 调用lv_post_alarm_image上报对应图片。

附录:LinkVisual SDK API定义

  • LinkVisual SDK初始化
  1. /**
  2. @brief SDK初始化
  3. @param [IN] config: SDK配置参数集合
  4. @return lv_error_e
  5. */
  6. int lv_init(const lv_config_s *config);

其中,结构体lv_config_s用于定义包括三元组等基础信息。

  1. /* 配置参数结构体 */
  2. typedef struct lv_config_s {
  3. /* 三元组信息 */
  4. char product_key[PRODUCT_KEY_LEN + 1];
  5. char device_name[DEVICE_NAME_LEN + 1];
  6. char device_secret[DEVICE_SECRET_LEN + 1];
  7. /* SDK的日志配置 */
  8. lv_log_level_e log_level;
  9. lv_log_destination log_dest;
  10. char log_dest_file[LOG_DEST_FILE_LEN + 1];
  11. /* 音视频推流服务 */
  12. lv_start_push_streaming_cb start_push_streaming_cb;
  13. lv_stop_push_streaming_cb stop_push_streaming_cb;
  14. lv_on_push_streaming_cmd_cb on_push_streaming_cmd_cb;
  15. /* 语音对讲服务 */
  16. lv_start_voice_intercom_cb start_voice_intercom_cb;
  17. lv_stop_voice_intercom_cb stop_voice_intercom_cb;
  18. lv_voice_intercom_receive_metadata_cb voice_intercom_receive_metadata_cb;
  19. lv_voice_intercom_receive_data_cb voice_intercom_receive_data_cb;
  20. /* 存储录像查询命令 */
  21. lv_query_storage_record_cb query_storage_record_cb;
  22. /* 触发设备抓图 */
  23. lv_trigger_pic_capture_cb trigger_pic_capture_cb;
  24. /* 触发设备录像 */
  25. lv_trigger_record_cb trigger_record_cb;
  26. } lv_config_s;
  • LinkVisual SDK销毁
  1. /**
  2. * @brief SDK销毁
  3. *
  4. * @param [IN] void
  5. *
  6. * @return lv_error_e
  7. */
  8. int lv_destroy(void);
  • LinkVisual SDK版本信息
  1. /**
  2. * @brief 获取SDK版本信息
  3. *
  4. */
  5. void lv_get_version(void);
  • LinkKit下行消息处理
  1. /**
  2. * @brief linkkit适配器,将物模型中的服务类消息注入该函数中,由LinkVisual代为处理
  3. *
  4. * @param [IN] lv_linkkit_adapter_tsl_service_s: 服务类消息结构体入参
  5. *
  6. * @return lv_error_e
  7. */
  8. int linkkit_adapter_tsl_service(const lv_linkkit_adapter_tsl_service_s *in);
  • 通知开始推流
  1. /**
  2. * @brief 通知设备开始推流
  3. *
  4. * @param [IN] service_id: 推流服务ID
  5. * @param [IN] type: 推流服务的类型
  6. * @param [IN] param: 可变参数,根据type会有不同
  7. * type == LV_STREAM_CMD_LIVE,param->pre_time为预录时间,单位:s
  8. * type == LV_STREAM_CMD_STORAGE_RECORD_BY_FILE,param->file_name为请求播放的录像文件名
  9. *
  10. * @retval < 0 : Fail.LV_STREAM_CMD_STORAGE_RECORD_BY_FILE
  11. * @retval 0 : Success.
  12. *
  13. * @notice: type == LV_STREAM_CMD_LIVE时,需要调用lv_stream_start_service()来开启服务,
  14. * 并调用lv_stream_send_video()/lv_stream_send_audio()直接开始推流;
  15. * type == LV_STREAM_CMD_STOARGE_RECORD_BY_FILE或type == LV_STREAM_CMD_STORAGE_RECORD_BY_TIME时,
  16. * 需要调用lv_stream_start_service()来开启服务,
  17. * 并等待lv_on_push_streaming_cmd_cb()中的消息通知,当lv_on_push_streaming_cmd_cb()中通知LV_STORAGE_RECORD_START时,
  18. * 调用lv_stream_send_video()/lv_stream_send_audio()开始推流
  19. * @see lv_stream_start_service() lv_on_push_streaming_cmd_cb()
  20. */
  21. typedef int (*lv_start_push_streaming_cb)(int service_id, lv_stream_type_e type, const lv_stream_param_s *param);
  • 通知停止推流
  1. /**
  2. * @brief 通知设备停止推流
  3. *
  4. * @param [IN] service_id: 推流服务ID
  5. *
  6. * @retval < 0 : Fail.
  7. * @retval 0 : Success.
  8. */
  9. typedef int (*lv_stop_push_streaming_cb)(int service_id);
  • 推流过程中控制消息
  1. /**
  2. * @brief 推送直播/存储录像流的过程中,需要支持的命令
  3. *
  4. * @param [IN] service_id: 推流服务ID
  5. * @param [IN] cmd: 命令类型
  6. * @param [IN] timestamp: 时间戳参数,单位为秒
  7. * cmd == LV_STORAGE_RECORD_SEEK时可用,其他命令无意义
  8. *
  9. * @retval < 0 : Fail.
  10. * @retval 0 : Success.
  11. */
  12. typedef int (*lv_on_push_streaming_cmd_cb)(int service_id, lv_on_push_streaming_cmd_type_e cmd, double timestamp);
  • 推送音视频参数信息
  1. /**
  2. * @brief 在发送实际视音频数据前发送视音频相关配置,用于直播推流和存储录像播放
  3. *
  4. * @param [IN] service_id: 服务ID,来自回调 lv_start_push_streaming_cb
  5. * @param [IN] bitrate_kbps: 目标码率,单位为kbps,0~8000
  6. * @param [IN] duration: 回放的文件长度,直播置为0
  7. * @param [IN] video_param: 视频的相关参数配置
  8. * @param [IN] audio_param: 音频的相关参数配置
  9. *
  10. * @return lv_error_e
  11. * @see lv_start_push_streaming_cb()
  12. */
  13. int lv_stream_send_config(int service_id,
  14. unsigned int bitrate_kbps,
  15. double duration,
  16. const lv_video_param_s *video_param,
  17. const lv_audio_param_s *audio_param);
  • 推送视频数据
  1. /**
  2. * @brief 发送视频数据
  3. *
  4. * @param [IN] service_id: 服务ID
  5. * @param [IN] buffer: 视频数据指针
  6. * @param [IN] buffer_len: 视频数据长度
  7. * @param [IN] key_frame: 视频帧是否为关键帧
  8. * @param [IN] timestamp_ms: 视频帧时间戳,单位:ms
  9. *
  10. * @return lv_error_e
  11. */
  12. int lv_stream_send_video(int service_id,
  13. unsigned char* buffer,
  14. unsigned int buffer_len,
  15. bool key_frame,
  16. unsigned int timestamp_ms);
  • 推送音频数据
  1. /**
  2. * @brief 发送音频数据
  3. *
  4. * @param [IN] service_id: 服务ID
  5. * @param [IN] buffer: 音频数据指针
  6. * @param [IN] buffer_len: 音频数据长度
  7. * @param [IN] timestamp_ms: 音频帧时间戳,单位:ms
  8. *
  9. * @return lv_error_e
  10. */
  11. int lv_stream_send_audio(int service_id,
  12. unsigned char* buffer,
  13. unsigned int buffer_len,
  14. unsigned int timestamp_ms);
  • 录像列表查询
  1. /**
  2. * @brief 查询存储录像列表
  3. *
  4. * @param [IN] start_time : 查询的开始时间,UTC时间,秒数
  5. * @param [IN] stop_time : 查询的结束时间,UTC时间,秒数
  6. * @param [IN] num : 录像查询的数量
  7. * @param [IN] id : 该次查询的会话标识符,需要回传到on_complete
  8. * @param [IN] on_complete : 返回录像列表的函数,目前仅支持同步调用,否则会超时;
  9. * num返回实际所查询到的数量,id回传,lv_query_storage_record_response_s里放置录像列表信息。
  10. *
  11. * @return void
  12. */
  13. typedef void (*lv_query_storage_record_cb)(unsigned int start_time,
  14. unsigned int stop_time,
  15. int num,
  16. const char *id,
  17. int (*on_complete)(int num, const char *id,
  18. const lv_query_storage_record_response_s *response));
  • 主动上传报警图片
  1. /**
  2. * @brief 报警事件图片上传
  3. *
  4. * @param [IN] buffer: 事件图片数据指针
  5. * @param [IN] buffer_len: 事件图片数据长度
  6. * @param [IN] type: 事件类型,lv_event_type_e
  7. * @param [IN] id: 当type=LV_TRIGGER_PIC时,需要回传lv_trigger_pic_capture_cb中的id,其他为空
  8. *
  9. * @return lv_error_e
  10. * @see lv_trigger_pic_capture_cb()
  11. */
  12. int lv_post_alarm_image(const char* buffer,
  13. int buffer_len,
  14. lv_event_type_e type,
  15. const char *id);
  • 触发设备抓图
  1. /**
  2. * @brief 触发设备抓图
  3. *
  4. * @param [IN] id: 触发ID,需回传
  5. *
  6. * @retval < 0 : Fail.
  7. * @retval 0 : Success.
  8. * @see lv_post_alarm_image()
  9. */
  10. typedef int (*lv_trigger_pic_capture_cb)(const char *id);