云天励飞AI流调识别接口无需PHP推流,PHP仅需调用/v1/ai/track/start发起任务并轮询结果;回调为raw JSON,须用php://input读取并校验签名;去重应使用stream_id+event_time+track_id组合键存Redis。
AI_传监控流调识别 接口到底要不要 PHP 直接推流不要。PHP 本身不支持持续 TCP/RTSP 流式写入,fsockopen 或 cURL 都无法维持长连接推送视频帧流,强行用 curl_setopt($ch, CURLOPT_TIMEOUT, 0) 模拟长连只会卡死或超时断开。云天励飞该接口实际要求的是:由边缘设备(如 IPC、NVR)或专用流媒体服务(如 SRS、ZLMediaKit)将 RTSP 流转成 HTTP-FLV / WebSocket / GB28181 上报,PHP 只负责「发起识别任务」和「轮询结果」。
/v1/ai/track/start 启动目标追踪任务这是 PHP 唯一需要主动发起的 POST 请求。关键在请求体格式和鉴权方式
—— 云天励飞多数私有部署环境用 Access-Token Header,而非 OAuth2。参数必须严格匹配其 OpenAPI 文档字段名(注意大小写):
stream_url 填的是已接入平台的流地址 ID 或内部流路径(如 rtsp://192.168.1.100:554/stream1),不是公网可直访 URLtarget_type 常见值为 person、vehicle,不能填中文或自定义字符串callback_url 必须是能被云天服务器公网访问的 PHP 脚本地址(如 https://your.com/callback.php),且需支持 POST + application/json
Content-Type: application/json,否则返回 415 Unsupported Media Type
POST /v1/ai/track/start HTTP/1.1
Host: ai-cloud.tianyilife.com
Authorization: Bearer your-jwt-token
Content-Type: application/json
{
"stream_url": "stream_abc123",
"target_type": "person",
"callback_url": "https://your.com/callback.php",
"max_track_num": 5
}
$_POST 为空,但 file_get_contents('php://input') 能读到数据因为云天励飞回调默认发的是 raw JSON,不是 application/x-www-form-urlencoded。PHP 不会自动解析 raw body 到 $_POST,必须手动处理:
file_get_contents('php://input') 读原始体json_decode($raw, true) 解析,检查 $data['event_type'] === 'track_result'
signature 字段(如有),云天通常用 HMAC-SHA256 + 密钥签名,PHP 需调用 hash_hmac('sha256', $raw, $secret) 校验{"code":0},否则会被重试多次track_result 事件云天励飞回调不保证 exactly-once,尤其在网络抖动时可能重复推送。不能只靠 frame_id 去重 —— 它在不同摄像头间不唯一。推荐组合去重键:
stream_id + event_time + track_id 拼接成唯一键(如 s1001_1715234400123_t456)SETNX 判断是否已存在event_time 是毫秒时间戳,PHP 中用 (int)$data['event_time'] / 1000 转成标准 Unix 时间便于存储真正难的不是调通接口,而是处理回调乱序、重复、丢失 —— 这些问题在测试环境几乎不暴露,上线后才集中爆发。