Tange Cloud for Device
 Rev.355
载入中...
搜索中...
未找到
使用卡录像和回放库

Linux下提供库文件librec.a,里面包含录像和回放两个功能。如果设备有自己录像实现,可以只使用回放。

非Linux系统只提供回放库libpb.a

录像只支持mp4格式;回放支持mp4文件,如果提供自己的READER实现,也可以支持别的文件格式。

一、支持录像(仅Linux)

因为卡录像功能的可靠性同硬件有很大关系,所以我们不为本功能提供担保和支持。用户应该自己实现录像功能并解决各种兼容性问题

录像:

  • 包含头文件 tgrec.h
  • 在sd卡准备好后调用 TgRecInit(...)
  • 调用 TgRecStart()/TgRecStop() 开始或停止录像。调用时机由应用层自己控制
  • 如果需要,调用 TgRecConfig()设置录像文件的限制

回放:

详细的使用说明见tgrec.h头文件和 PlaybackSdc.c

二、仅支持回放

单独使用录像回放功能,应用层要实现两个回调函数:

  • GETFILELIST: 用于查询录像文件,返回 FILEITEM 列表数组。
  • GETPATHFOMFILEITEM: 用于返回 FILEITEM对应的文件的路径

步骤:

  • 包含 fplayer.h头文件
  • 调用下面的接口注册回调 (说明见下方 回调说明)

    void PlayerSetCallbacks(GETFILELIST getFileList, GETPATHFROMFILEITEM pathOfFile);
  • 如果录像文件为mp4格式,调用 PlayerSetDefaultMp4Reader()注册文件读取器。否则要实现自己的READER接口,并调用 PlayerSetDefaultReader()注册。
  • 将demo中的PlaybackSdc.c文件和librec.a(或libpb.a) 加到工程。注释掉PlaybackSdc.c开始处对 TANGE_SDC_STORAGE的定义
  • TCI_CMD_LISTEVENT_REQ/TCI_CMD_RECORD_PLAYCONTROL 命令交给 PlaybackSdc.cPlaybackCmd()处理

    #include "fplayer.h"
    PlayerSetCallbacks(getFileList, pathOfFile);
    int p2p_cmd_handler(p2phandler_t handle, int cmd, int len)
    {
    switch(cmd)
    {
    PlaybackCmd(handle, cmd, len);
    break;
    ...
    }
    }

回调说明

typedef struct {
char path[32]; //文件表示,内容任意(由PlayerSetCallbacks()传入的 getFileList回调返回,pathOfFile回调解释)
time_t t_start; //录像起始的UTC时间
int t_len; //文件时长(s)
int event; //ECEVENT 类型
} FILEITEM;
// 文件查询回调接口定义
// @param t_start 查询的起始UTC时间
// @param t_end 结束UTC时间
// @param nItems 用于返回记录数
// @return 按时间升序排列的文件列表
typedef FILEITEM *(*GETFILELIST)(time_t t_start, time_t end, /*out*/int *nItems);
// 获取录像文件路径
// @param 用于返回文件绝对路径
// @param pItem GETFILELIST 回调返回的文件表示
typedef void (*GETPATHFROMFILEITEM)(/*out*/char *path, const FILEITEM *pItem);
/* 设置回放过程会用到的查询回调 */
void PlayerSetCallbacks(GETFILELIST getFileList, GETPATHFROMFILEITEM pathOfFile);

需要说明的是,FILEITEM::path 只有32个字节长。如果文件绝对路径长度超出32字节,固件需要换一种缩减的路径表示方式。并在GETPATHFROMFILEITEM 回调中展开。

例子:

static void GetPathFromFileItem(char *path, const FILEITEM *pItem)
{
sprintf(path, "absolute/path/to/%s", pItem->path);
}

录像和回放模拟测试

编译demo时,加上 rec=y 参数。生成的程序支持录像和回放模拟。

使用 -s 录像根目录 启动demo。例子:

./tg_demo -u 1801057CABCDE -d data -s .

使用当前目录为录像根目录。data为模拟程序用到的数据文件目录。

录像库会在录像根目录下创建以日期命名的目录。录像文件和索引保存在子目录里。

demo运行起来后,触发一个事件(例如输入snd 回车),会生成一个事件录像文件。app上可以回看。