全部产品
云市场
云游戏

直播/监控流预测

更新时间:2019-10-25 19:01:00

准备阶段:

  • 开通直播/监控服务,并且已经将流推送到直播/监控平台。
  • 将直播流/监控流的ID拼接出来,调用智能视觉接口进行流预测。
  • 已经在智能视觉里,训练出自己的模型(图片分类,或者物体检测)或系统模型。

StreamId 如何获取:

  • 推流到直播服务获取StreamId:
  • 推流到监控服务获取StreamId:
    • 从监控API查询流信息接口获取相应App、PlayDomain、Name;streamId拼接规则为:rtmp://PlayDomain/App/Name

下面将以直播流为例,描述对直播流进行预测的场景。

1. 获取需要进行预测的流StreamId
2. 创建流预测接口。
  1. CreateStreamPredictRequest request = new CreateStreamPredictRequest();
  2. // 直播控制台拷贝出来的StreamId。
  3. request.setStreamId(streamId);
  4. // 设置视频流来源, 监控服务:VS, 直播服务:Live
  5. request.setStreamType("Live");
  6. // 检测的模型,可以通过获取迭代列表接口"DescribeIterations"获取迭代的模型ID,一次最多支持5个模型的检测。
  7. request.setModelIds(modelId);
  8. // 设置推流到VS或者Live, 是否自动触发识别任务
  9. request.setAutoStart("false");
  10. // 流预测时,保存结果有问题的地址前缀。
  11. request.setOutput("http://ivison-test.oss-cn-beijing.aliyuncs.com/ivision-test/");
  12. // 配置消息通知,当前只支持MNS队列。
  13. JSONObject notify = new JSONObject();
  14. notify.put("MNSQueue", "ivison-test-queue");
  15. request.setNotify(notify.toJSONString());
  16. CreateStreamPredictResponse response = vars.getClient().getAcsResponse(request);
  17. String predictId = response.getPredictId();
3. 开始流预测。
  1. StartStreamPredictRequest request = new StartStreamPredictRequest();
  2. // 创建流预测时,返回的预测ID。
  3. request.setPredictId(predictId);
  4. StartStreamPredictResponse response = vars.getClient().getAcsResponse(request);
4. 接收流预测消息。

MNS如何接收消息见MNS收消息示例代码。具体的消息格式见预测流消息回调格式说明

  1. // 收到的消息,转换为列表
  2. JSONArray resultArray = JSONObject.parseArray(message.getMessageBodyAsString());
5. 查询流预测结果。
  1. DescribeStreamPredictResultRequest request = new DescribeStreamPredictResultRequest();
  2. request.setPredictId(predictId);
  3. request.setModelId(vars.getModelId());
  4. request.setAcceptFormat(FormatType.JSON);
  5. DescribeStreamPredictResultResponse response;
  6. do {
  7. response = vars.getClient().getAcsResponse(request);
  8. for (DescribeStreamPredictResultResponse.StreamPredictData data : response.getStreamPredictDatas()) {
  9. System.out.println(JSON.toJSONString(data));
  10. }
  11. request.setNextPageToken(response.getNextPageToken());
  12. } while(response.getNextPageToken() != null) ;
6. 停止流预测。
  1. StopStreamPredictRequest request = new StopStreamPredictRequest();
  2. request.setPredictId(predictId);
  3. StopStreamPredictResponse response = vars.getClient().getAcsResponse(request);
7. 查询流预测列表
  1. DescribeStreamPredictsRequest request = new DescribeStreamPredictsRequest();
  2. request.setPredictIds(predictId);
  3. DescribeStreamPredictsResponse response = vars.getClient().getAcsResponse(request);
  4. List<DescribeStreamPredictsResponse.StreamPredict> streamPredicts = response.getStreamPredicts();
  5. for (DescribeStreamPredictsResponse.StreamPredict streamPredict : streamPredicts) {
  6. System.out.println(JSON.toJSONString(streamPredict));
  7. }
8. 删除流预测消息。
  1. DeleteStreamPredictRequest request = new DeleteStreamPredictRequest();
  2. request.setPredictId(predictId);
  3. DeleteStreamPredictResponse response = vars.getClient().getAcsResponse(request);