你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:检测运动并发出事件

edge icon
或者,请查看在服务中创建视频应用程序下的主题。


注意

我们即将停用 Azure 视频分析器预览版服务,建议你在 2022 年 12 月 1 日前从视频分析器转换你的应用程序。

Azure 视频分析器媒体版不受此停用的影响。 它现在已重命名为 Azure 视频索引器。 单击此处了解详情。

必需操作:若要最大程度地减少工作负载的中断,请在 2022 年 12 月 1 日之前根据此指南中所述的建议从视频分析器转换应用程序。 在 2022 年 12 月 1 日之后,Azure 视频分析器帐户无法再正常使用。 从 2022 年 5 月 2 日起,将无法创建新的视频分析器帐户。

本快速入门将引导你完成开始使用 Azure 视频分析器的步骤。 它将 Azure VM 用作 IoT Edge 设备和模拟的实时视频流。 完成设置步骤后,你将能通过视频管道运行模拟实时视频流,该管道可检测和报告该流中的任何运动。 下图显示了该管道的图形表示形式。

Detect motion

本文基于用 C# 编写的示例代码

本文基于用 Python 编写的示例代码

先决条件

  • 包含活动订阅的 Azure 帐户。 如果没有帐户,可免费创建一个帐户

    注意

    你将需要 Azure 订阅,可以在其中访问参与者角色和用户访问管理员角色。 如果没有适当的权限,请联系帐户管理员,让其授予此类权限。

设置 Azure 资源

Deploy to Azure

部署过程大约需要 20 分钟。 完成部署后,Azure 订阅中会部署某些 Azure 资源,包括:

  1. 视频分析器帐户 - 此云服务用于注册视频分析器边缘模块,并用于播放录制的视频和视频分析。
  2. 存储帐户 - 用于存储录制的视频和视频分析。
  3. 托管标识 - 这是用户分配的托管标识,用于管理对上述存储帐户的访问。
  4. 虚拟机 - 这是将用作模拟边缘设备的虚拟机。
  5. IoT 中心 - 这充当消息中心,用于在 IoT 应用程序、IoT Edge 模块以及它管理的设备之间进行双向通信。

除上述资源外,还会在存储帐户的“deployment-output”文件共享中创建以下项,用于快速入门和教程:

  • appsettings.json - 此文件包含设备连接字符串和在 Visual Studio Code 中运行示例应用程序所需的其他属性。
  • env.txt - 此文件包含使用 Visual Studio Code 生成部署清单所需的环境变量。
  • deployment.json - 这是模板用于将 Edge 模块部署到模拟边缘设备的部署清单。

提示

如果在创建所有必需的 Azure 资源时遇到问题,请使用此快速入门中的手动步骤。

概述

Azure Video Analyzer based on motion detection

此图显示本快速入门中信号的流动方式。 Edge 模块模拟托管实时流式处理协议 (RTSP) 服务器的 IP 相机。 RTSP 源节点从该服务器拉取视频源,并将视频帧发送到运动检测处理器节点。 通过运动检测处理器节点,你可以在实时视频中检测运动。 它会检查传入的视频帧并确定视频中是否有移动。 如果检测到运动,它会将视频帧传递到管道中的下一个节点,并发出事件。 最后,任何发出的事件都会发送到 IoT 中心消息接收器,这些事件在此接收器中被发布到 IoT 中心。

设置开发环境

获取示例代码

  1. 克隆 AVA C# 示例存储库

  2. 启动 Visual Studio Code,然后打开下载的存储库所在的文件夹。

  3. 在 Visual Studio Code 中,浏览到 src/cloud-to-device-console-app 文件夹,然后创建一个名为 appsettings.json 的文件。 该文件包含运行程序所需的设置。

  4. 浏览到上述设置步骤中创建的存储帐户中的文件共享,并找到“deployment-output”文件共享下的“appsettings.json”文件。 单击该文件,然后点击“下载”按钮。 应在新的浏览器选项卡中打开内容,如下所示:

    {
        "IoThubConnectionString" : "HostName=xxx.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX",
        "deviceId" : "avasample-iot-edge-device",
        "moduleId" : "avaedge"
    }
    

    借助 IoT 中心连接字符串,可以使用 Visual Studio Code 通过 Azure IoT 中心将命令发送到 Edge 模块。 将上述 JSON 复制到“src/cloud-to-device-console-app/appsettings.json”文件中。

  5. 接下来,浏览到 src/edge 文件夹并创建一个名为 .env 的文件。 此文件包含 Visual Studio Code 用来将模块部署到边缘设备的属性。

  6. 浏览到上述设置步骤中创建的存储帐户中的文件共享,并找到“deployment-output”文件共享下的“env.txt”文件。 单击该文件,然后点击“下载”按钮。 应在新的浏览器选项卡中打开内容,如下所示:

         SUBSCRIPTION_ID="<Subscription ID>"
         RESOURCE_GROUP="<Resource Group>"
         AVA_PROVISIONING_TOKEN="<Provisioning token>"
         VIDEO_INPUT_FOLDER_ON_DEVICE="/home/localedgeuser/samples/input"
         VIDEO_OUTPUT_FOLDER_ON_DEVICE="/var/media"
         APPDATA_FOLDER_ON_DEVICE="/var/lib/videoanalyzer"
         CONTAINER_REGISTRY_USERNAME_myacr="<your container registry username>"
         CONTAINER_REGISTRY_PASSWORD_myacr="<your container registry password>"
    

    将 JSON 从“env.txt”文件复制到“src/edge/.env”文件中 。

连接到 IoT 中心

  1. 在 Visual Studio Code 中,通过选择左下角“Azure IoT 中心”窗格旁边的“更多操作”图标,设置 IoT 中心连接字符串 。 从 src/cloud-to-device-console-app/appsettings.json 文件复制该字符串。

    注意

    系统可能会要求你提供 IoT 中心的内置终结点信息。 若要获取此信息,请在 Azure 门户中导航到 IoT 中心,然后在左侧导航窗格中查找“内置终结点”选项。 单击此处,在“与事件中心兼容的终结点”部分下查找“与事件中心兼容的终结点” 。 复制并使用框中的文本。 终结点将如下所示:Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

  2. 大约 30 秒后,在左下部分刷新 Azure IoT 中心。 你应会看到已部署以下模块的边缘设备 avasample-iot-edge-device

    • Edge 中心(模块名称为“edgeHub”)
    • Edge 代理(模块名称为“edgeAgent”)
    • 视频分析器(模块名称为“avaedge”)
    • RTSP 模拟器(模块名称为“rtspsim”)

准备监视模块

运行本快速入门或教程时,事件将发送到 IoT 中心。 若要查看这些事件,请执行以下步骤:

  1. 在 Visual Studio Code 中打开“资源管理器”窗格,然后在左下角查找“Azure IoT 中心”。

  2. 展开“设备”节点。

  3. 右键单击 avasample-iot-edge-device,并选择“开始监视内置事件终结点”。

    注意

    系统可能会要求你提供 IoT 中心的内置终结点信息。 若要获取此信息,请在 Azure 门户中导航到 IoT 中心,然后在左侧导航窗格中查找“内置终结点”选项。 单击此处,在“与事件中心兼容的终结点”部分下查找“与事件中心兼容的终结点” 。 复制并使用框中的文本。 终结点将如下所示:Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

获取示例代码

  1. 克隆 AVA Python 示例存储库

  2. 启动 Visual Studio Code,然后打开下载的存储库所在的文件夹。

  3. 在 Visual Studio Code 中,浏览到 src/cloud-to-device-console-app 文件夹,然后创建一个名为 appsettings.json 的文件。 该文件包含运行程序所需的设置。

  4. 浏览到上述设置步骤中创建的存储帐户中的文件共享,并找到“deployment-output”文件共享下的“appsettings.json”文件。 单击该文件,然后点击“下载”按钮。 应在新的浏览器选项卡中打开内容,如下所示:

    {
      "IoThubConnectionString": "HostName=xxx.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX",
      "deviceId": "avasample-iot-edge-device",
      "moduleId": "avaedge"
    }
    

    借助 IoT 中心连接字符串,可以使用 Visual Studio Code 通过 Azure IoT 中心将命令发送到 Edge 模块。 将上述 JSON 复制到“src/cloud-to-device-console-app/appsettings.json”文件中。

  5. 接下来,浏览到 src/edge 文件夹并创建一个名为 .env 的文件。 此文件包含 Visual Studio Code 用来将模块部署到边缘设备的属性。

  6. 浏览到上述设置步骤中创建的存储帐户中的文件共享,并找到“deployment-output”文件共享下的“env.txt”文件。 单击该文件,然后点击“下载”按钮。 应在新的浏览器选项卡中打开内容,如下所示:

         SUBSCRIPTION_ID="<Subscription ID>"
         RESOURCE_GROUP="<Resource Group>"
         AVA_PROVISIONING_TOKEN="<Provisioning token>"
         VIDEO_INPUT_FOLDER_ON_DEVICE="/home/localedgeuser/samples/input"
         VIDEO_OUTPUT_FOLDER_ON_DEVICE="/var/media"
         APPDATA_FOLDER_ON_DEVICE="/var/lib/videoanalyzer"
         CONTAINER_REGISTRY_USERNAME_myacr="<your container registry username>"
         CONTAINER_REGISTRY_PASSWORD_myacr="<your container registry password>"
    

    将 JSON 从“env.txt”文件复制到“src/edge/.env”文件中 。

连接到 IoT 中心

  1. 在 Visual Studio Code 中,通过选择左下角“Azure IoT 中心”窗格旁边的“更多操作”图标,设置 IoT 中心连接字符串 。 从 src/cloud-to-device-console-app/appsettings.json 文件复制该字符串。

    注意

    系统可能会要求你提供 IoT 中心的内置终结点信息。 若要获取此信息,请在 Azure 门户中导航到 IoT 中心,然后在左侧导航窗格中查找“内置终结点”选项。 单击此处,在“与事件中心兼容的终结点”部分下查找“与事件中心兼容的终结点” 。 复制并使用框中的文本。 终结点将如下所示:Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

  2. 大约 30 秒后,在左下部分刷新 Azure IoT 中心。 你应会看到已部署以下模块的边缘设备 avasample-iot-edge-device

    • Edge 中心(模块名称为“edgeHub”)
    • Edge 代理(模块名称为“edgeAgent”)
    • 视频分析器(模块名称为“avaedge”)
    • RTSP 模拟器(模块名称为“rtspsim”)

准备监视模块

运行本快速入门或教程时,事件将发送到 IoT 中心。 若要查看这些事件,请执行以下步骤:

  1. 在 Visual Studio Code 中打开“资源管理器”窗格,然后在左下角查找“Azure IoT 中心”。

  2. 展开“设备”节点。

  3. 右键单击 avasample-iot-edge-device,并选择“开始监视内置事件终结点”。

    注意

    系统可能会要求你提供 IoT 中心的内置终结点信息。 若要获取此信息,请在 Azure 门户中导航到 IoT 中心,然后在左侧导航窗格中查找“内置终结点”选项。 单击此处,在“与事件中心兼容的终结点”部分下查找“与事件中心兼容的终结点” 。 复制并使用框中的文本。 终结点将如下所示:Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

观看示例视频

设置 Azure 资源时,一个高速公路车流量短视频被复制到 Azure 中用作 IoT Edge 设备的 Linux VM 上。 此快速入门使用视频文件来模拟实时流。

打开一个应用程序,例如 VLC 媒体播放器。 选择 Ctrl+N,然后粘贴指向高速公路交叉口示例视频的链接以开始播放。 可以看到许多车辆在高速公路上行驶的镜头。

设置 Azure 资源时,一个高速公路车流量短视频被复制到 Azure 中用作 IoT Edge 设备的 Linux VM 上。 此快速入门使用视频文件来模拟实时流。

打开一个应用程序,例如 VLC 媒体播放器。 选择 Ctrl+N,然后粘贴指向高速公路交叉口示例视频的链接以开始播放。 可以看到许多车辆在高速公路上行驶的镜头。

检查示例文件

  1. 在 Visual Studio Code 中,转到 src/edge。 你将看到 .env 文件以及一些部署模板文件。

    部署模板是指边缘设备的部署清单,其中使用变量指定某些属性。 该 .env 文件包含这些变量的值。

  2. 转到 src/cloud-to-device-console-app 文件夹。 你可在此处看到 appsettings.json 文件和一些其他文件:

    • c2d-console-app.csproj - Visual Studio Code 的项目文件。

    • operations.json - 希望程序运行的操作的列表。

    • Program.cs - 示例程序代码。 此代码:

      • 加载应用设置。
      • 调用视频分析器 Edge 模块所公开的直接方法。 可以通过调用模块的直接方法来使用该模块分析实时视频流。
      • 暂停以检查“终端”窗口中程序的输出,并检查“输出”窗口中模块生成的事件 。
      • 调用直接方法以清理资源。
  1. 在 Visual Studio Code 中,转到 src/edge。 你将看到 .env 文件以及一些部署模板文件。

    部署模板是指边缘设备的部署清单,其中使用变量指定某些属性。 该 .env 文件包含这些变量的值。

  2. 转到 src/cloud-to-device-console-app 文件夹。 你可在此处看到 appsettings.json 文件和一些其他文件:

    • operations.json - 希望程序运行的操作的列表。

    • main.py - 示例程序代码。 此代码:

      • 加载应用设置。
      • 调用 Azure 视频分析器模块所公开的直接方法。 可以通过调用模块的直接方法来使用该模块分析实时视频流。
      • 暂停以检查“终端”窗口中程序的输出,并检查“输出”窗口中模块生成的事件 。
      • 调用直接方法以清理资源。

生成并部署部署清单

部署清单定义要部署到边缘设备的模块。 它还定义了这些模块的配置设置。

请按照以下步骤从模板文件生成清单,然后将其部署到边缘设备。

  1. 打开 Visual Studio Code。

  2. 在“AZURE IOT 中心”窗格旁,选择“更多操作”图标以设置 IoT 中心连接字符串 。 可以从 src/cloud-to-device-console-app/appsettings.json 文件复制该字符串。

    Set IOT Connection String

    注意

    系统可能会要求你提供 IoT 中心的内置终结点信息。 若要获取此信息,请在 Azure 门户中导航到 IoT 中心,然后在左侧导航窗格中查找“内置终结点”选项。 单击此处,在“与事件中心兼容的终结点”部分下查找“与事件中心兼容的终结点” 。 复制并使用框中的文本。 终结点将如下所示:Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

  3. 右键单击“src/edge/deployment.template.json”并选择“生成 IoT Edge 部署清单”。

    Generate the IoT Edge deployment manifest

    此操作应在 src/edge/config 文件夹中创建一个名为“deployment.amd64.json”的清单文件 。

  4. 右键单击“src/edge/config/deployment.amd64.json”,选择“为单个设备创建部署”,然后选择边缘设备的名称 。

    Create a deployment for a single device

  5. 如果系统提示你选择 IoT 中心设备,请从下拉菜单中选择“avasample-iot-edge-device”。

  6. 大约 30 秒后,在该窗口的左下角刷新 Azure IoT 中心。 边缘设备现在显示以下已部署的模块:

    • 视频分析器 Edge 模块(模块名称为 avaedge
    • 实时流式处理协议 (RTSP) 模拟器(模块名称为 rtspsim

部署清单定义要部署到边缘设备的模块。 它还定义了这些模块的配置设置。

请按照以下步骤从模板文件生成清单,然后将其部署到边缘设备。

  1. 打开 Visual Studio Code。

  2. 在“AZURE IOT 中心”窗格旁,选择“更多操作”图标以设置 IoT 中心连接字符串 。 可以从 src/cloud-to-device-console-app/appsettings.json 文件复制该字符串。

    Set IOT Connection String

    注意

    系统可能会要求你提供 IoT 中心的内置终结点信息。 若要获取此信息,请在 Azure 门户中导航到 IoT 中心,然后在左侧导航窗格中查找“内置终结点”选项。 单击此处,在“与事件中心兼容的终结点”部分下查找“与事件中心兼容的终结点” 。 复制并使用框中的文本。 终结点将如下所示:Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

  3. 右键单击“src/edge/deployment.template.json”并选择“生成 IoT Edge 部署清单”。

    Generate the IoT Edge deployment manifest

    此操作应在 src/edge/config 文件夹中创建一个名为“deployment.amd64.json”的清单文件 。

  4. 右键单击“src/edge/config/deployment.amd64.json”,选择“为单个设备创建部署”,然后选择边缘设备的名称 。

    Create a deployment for a single device

  5. 如果系统提示你选择 IoT 中心设备,请从下拉菜单中选择“avasample-iot-edge-device”。

  6. 大约 30 秒后,在该窗口的左下角刷新 Azure IoT 中心。 边缘设备现在显示以下已部署的模块:

    • Azure 视频分析器(模块名称为 avaedge
    • 实时流式处理协议 (RTSP) 模拟器(模块名称为 rtspsim

准备监视事件

你将使用视频分析器 Edge 模块来检测传入的实时视频流中的运动并将事件发送到 IoT 中心。 若要查看这些事件,请执行以下步骤:

  1. 在 Visual Studio Code 中打开“资源管理器”窗格,然后在左下角查找“Azure IoT 中心”。

  2. 展开“设备”节点。

  3. 右键单击 avasample-iot-edge-device,选择“开始监视内置事件终结点” 。

    Start monitoring a built-in event endpoint

    注意

    系统可能会要求你提供 IoT 中心的内置终结点信息。 若要获取此信息,请在 Azure 门户中导航到 IoT 中心,然后在左侧导航窗格中查找“内置终结点”选项。 单击此处,在“与事件中心兼容的终结点”部分下查找“与事件中心兼容的终结点” 。 复制并使用框中的文本。 HAN 终结点将如下所示:Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

你将使用 Azure 视频分析器模块来检测传入的实时视频流中的运动并将事件发送到 IoT 中心。 若要查看这些事件,请执行以下步骤:

  1. 在 Visual Studio Code 中打开“资源管理器”窗格,然后在左下角查找“Azure IoT 中心”。
  2. 展开“设备”节点。
  3. 右键单击 avasample-iot-edge-device,选择“开始监视内置事件终结点” 。

Start monitoring a built-in event endpoint

注意

系统可能会要求你提供 IoT 中心的内置终结点信息。 若要获取此信息,请在 Azure 门户中导航到 IoT 中心,然后在左侧导航窗格中查找“内置终结点”选项。 单击此处,在“与事件中心兼容的终结点”部分下查找“与事件中心兼容的终结点” 。 复制并使用框中的文本。 HAN 终结点将如下所示:Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

运行示例程序

若要运行该示例代码,请按照以下步骤执行:

  1. 在 Visual Studio Code 中,打开“扩展”选项卡(或按 Ctrl+Shift+X),然后搜索“Azure IoT 中心”。

  2. 右键单击并选择“扩展设置”。

    Extension Settings

  3. 搜索并启用“显示详细消息”。

    Show Verbose Message

  4. 在 Visual Studio Code 中,转到 src/cloud-to-device-console-app/operations.json。

  5. 在 pipelineTopologySet 节点上,确保你看到以下值:

    "pipelineTopologyUrl" : "https://raw.githubusercontent.com/Azure/video-analyzer/main/pipelines/live/topologies/motion-detection/topology.json"
    
  6. livePipelineSetlivePipelineDelete 节点上,确保 topologyName 的值与管道拓扑中的 name 属性的值匹配 :

    "topologyName" : "MotionDetection"

  7. 通过选择 F5 键启动调试会话。 “终端”窗口将显示一些消息。

  8. operations.json 文件首先调用 pipelineTopologyListlivePipelineList。 如果在完成先前的快速入门后清理了资源,则该过程将返回空列表。

    -----------------------  Request: pipelineTopologyList  --------------------------------------------------
    
    {
    "@apiVersion": "1.1"
    }
    
    ---------------  Response: pipelineTopologyList - Status: 200  ---------------
    
    {
      "value": []
    }
    
    --------------------------------------------------------------------------
    
    

    “终端”窗口将显示下一组直接方法调用:

    • pipelineTopologySet 的调用,该调用使用前面的 pipelineTopologyUrl
    • livePipelineSet 的调用,该调用使用以下正文:
    {
      "@apiVersion": "1.1",
      "name": "Sample-Pipeline-1",
      "properties": {
        "topologyName": "MotionDetection",
        "description": "Sample pipeline description",
        "parameters": [
          {
            "name": "rtspUrl",
            "value": "rtsp://rtspsim:554/media/camera-300s.mkv"
          },
          {
            "name": "rtspUserName",
            "value": "testuser"
          },
          {
            "name": "rtspPassword",
            "value": "testpassword"
          }
        ]
      }
    }
    
    • livePipelineActivate 的调用,用于启动实时管道和视频流。
    • livePipelineList 的第二次调用,显示实时管道处于运行状态。
  9. “终端”窗口中的输出会在出现 Press Enter to continue 时暂停。 暂时不要选择 Enter。 向上滚动,查看调用的直接方法的 JSON 响应有效负载。

  10. 切换到 Visual Studio Code 中的“输出”窗口。 可看到视频分析器 Edge 模块正发送到 IoT 中心的消息。 本快速入门中的以下部分将讨论这些消息。

  11. 实时管道将继续运行并输出结果。 RTSP 模拟器不断循环源视频。 若要停止实时管道,请返回“终端”窗口,并选择 Enter。

    接下来会执行一系列调用,以清理资源:

    • 调用 livePipelineDeactivate 停用管道。
    • 调用 livePipelineDelete 删除管道。
    • 调用 pipelineTopologyDelete 删除拓扑。
    • pipelineTopologyList 的最后一次调用显示该列表为空。

若要运行该示例代码,请按照以下步骤执行:

  1. 在 Visual Studio Code 中,打开“扩展”选项卡(或按 Ctrl+Shift+X),然后搜索“Azure IoT 中心”。

  2. 右键单击并选择“扩展设置”。

    Extension Settings

  3. 搜索并启用“显示详细消息”。

    Show Verbose Message

  4. 在 Visual Studio Code 中,转到 src/cloud-to-device-console-app/operations.json。

  5. pipelineTopologySet 节点上,确保你看到以下值:

    "pipelineTopologyUrl" : "https://raw.githubusercontent.com/Azure/video-analyzer/main/pipelines/live/topologies/motion-detection/topology.json"
    
  6. livePipelineSetlivePipelineDelete 节点上,确保 topologyName 的值与管道拓扑中的 name 属性的值匹配 :

    "topologyName" : "MotionDetection"

    • 导航到 VS Code 中的 TERMINAL 窗口
    • 使用 cd 命令导航到 /video-analyzer-iot-edge-python-main/src/cloud-to-device-console-app 目录
    • 运行“python main.py”,然后你会看到在 TERMINAL 窗口中输出的消息
  7. operations.json 文件首先调用 pipelineTopologyListlivePipelineList。 如果在完成先前的快速入门后清理了资源,则该过程将返回空列表。

    -----------------------  Request: pipelineTopologyList  --------------------------------------------------
    
    {
    "@apiVersion": "1.1"
    }
    
    ---------------  Response: pipelineTopologyList - Status: 200  ---------------
    
    {
      "value": []
    }
    
    --------------------------------------------------------------------------
    
    

    “终端”窗口将显示下一组直接方法调用:

    • pipelineTopologySet 的调用,该调用使用前面的 pipelineTopologyUrl
    • livePipelineSet 的调用,该调用使用以下正文:
    {
      "@apiVersion": "1.1",
      "name": "Sample-Pipeline-1",
      "properties": {
        "topologyName": "MotionDetection",
        "description": "Sample pipeline description",
        "parameters": [
          {
            "name": "rtspUrl",
            "value": "rtsp://rtspsim:554/media/camera-300s.mkv"
          },
          {
            "name": "rtspUserName",
            "value": "testuser"
          },
          {
            "name": "rtspPassword",
            "value": "testpassword"
          }
        ]
      }
    }
    
    • livePipelineActivate 的调用,用于启动实时管道和视频流。
    • livePipelineList 的第二次调用,显示实时管道处于运行状态。
  8. “终端”窗口中的输出会在出现 Press Enter to continue 时暂停。 暂时不要选择 Enter。 向上滚动,查看调用的直接方法的 JSON 响应有效负载。

  9. 切换到 Visual Studio Code 中的“输出”窗口。 可看到 Azure 视频分析器模块正发送到 IoT 中心的消息。 本快速入门中的以下部分将讨论这些消息。

  10. 实时管道将继续运行并输出结果。 RTSP 模拟器不断循环源视频。 若要停止实时管道,请返回“终端”窗口,并选择 Enter。

    接下来会执行一系列调用,以清理资源:

    • 调用 livePipelineDeactivate 停用管道。
    • 调用 livePipelineDelete 删除管道。
    • 调用 pipelineTopologyDelete 删除拓扑。
    • pipelineTopologyList 的最后一次调用显示该列表为空。

解释结果

运行实时管道时,来自运动检测器处理器节点的结果将通过 IoT 中心消息接收器节点发送到 IoT 中心。 Visual Studio Code 的“输出”窗口中显示的消息包含“body”部分和“applicationProperties”部分 。 有关详细信息,请参阅创建和读取 IoT 中心消息

在下面的消息中,视频分析器 Edge 模块定义了应用程序属性和正文内容。

MediaSessionEstablished 事件

激活实时管道后,RTSP 源节点尝试连接到在 rtspsim-live555 容器上运行的 RTSP 服务器。 如果连接成功,则打印以下事件。

[IoTHubMonitor] [10:51:34 AM] Message received from [avasample-iot-edge-device/avaedge]:
{
  "body": {
  {
    "sdp": "SDP:\nv=0\r\no=- 1620204694595500 1 IN IP4 xxx.xxx.xxx.xxx\r\ns=Matroska video+audio+(optional)subtitles, streamed by the LIVE555 Media Server\r\ni=media/camera-300s.mkv\r\nt=0 0\r\na=tool:LIVE555 Streaming Media v2020.08.19\r\na=type:broadcast\r\na=control:*\r\na=range:npt=0-300.000\r\na=x-qt-text-nam:Matroska video+audio+(optional)subtitles, streamed by the LIVE555 Media Server\r\na=x-qt-text-inf:media/camera-300s.mkv\r\nm=video 0 RTP/AVP 96\r\nc=IN IP4 0.0.0.0\r\nb=AS:500\r\na=rtpmap:96 H264/90000\r\na=fmtp:96 packetization-mode=1;profile-level-id=4D0029;sprop-parameter-sets=Z00AKeKQCgC3YC3AQEBpB4kRUA==,aO48gA==\r\na=control:track1\r\n"
  },
  "properties": {
    "topic": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ava-sample-deployment/providers/Microsoft.Media/videoAnalyzers/avasample",
    "subject": "/edgeModules/avaedge/livePipelines/Sample-Pipeline-1/sources/rtspSource",
    "eventType": "Microsoft.VideoAnalyzer.Diagnostics.MediaSessionEstablished",
    "eventTime": "2021-05-06T00:58:58.602Z",
    "dataVersion": "1.0"
  },
  "systemProperties": {
    "iothub-connection-device-id": "avasample-iot-edge-device",
    "iothub-connection-module-id": "avaedge",
    "iothub-message-source": "Telemetry",
    "messageId": "459c3255-7c86-4ff5-a1e5-7ce3fcb07627",
    "contentType": "application/json",
    "contentEncoding": "utf-8"
  }
}

在以上脚本中:

  • 此消息是一个诊断事件 (MediaSessionEstablished)。 它指示 RTSP 源节点(使用者)与 RTSP 模拟器连接,并已开始接收(模拟的)实时馈送。
  • sdp 部分包含有关诊断事件的数据。 在本例中,数据包含会话描述协议 (SDP) 详细信息。

MotionDetection 事件

当检测到运动时,视频分析器模块会发送推理事件。 将 **type 设置为 motion,指示它是运动检测处理器的结果。

以下是此消息的示例:

{
  "body": {
    "timestamp": 145818422564951,
    "inferences": [
      {
        "type": "motion",
        "motion": {
          "box": {
            "l": 0.322176,
            "t": 0.574627,
            "w": 0.525,
            "h": 0.088889
          }
        }
      }
    ]
  },
  "properties": { … },
  "systemProperties": { … }
}

在本示例中:

  • body 值包含有关分析事件的数据。 在本例中,该事件是推理事件,因此正文包含 timestamp 和 inferences 数据 。

  • inferences 数据指示 type 为 motion 。 它包含有关该 motion 事件的其他数据。

  • box 部分包含移动对象周围的边界框的坐标。 值按视频的宽度和高度(以像素为单位)进行规范化。 例如,若要获得原始像素坐标,需要将水平维度乘以 1920,将垂直维度乘以 1080。

    l - distance from left of image
    t - distance from top of image
    w - width of bounding box
    h - height of bounding box
    

运行实时管道时,来自运动检测器处理器节点的结果将通过 IoT 中心消息接收器节点发送到 IoT 中心。 Visual Studio Code 的“输出”窗口中显示的消息包含“body”部分和“applicationProperties”部分 。 有关详细信息,请参阅创建和读取 IoT 中心消息

在下面的消息中,Azure 视频分析器模块定义了应用程序属性和正文内容。

MediaSessionEstablished 事件

激活实时管道后,RTSP 源节点尝试连接到在 rtspsim-live555 容器上运行的 RTSP 服务器。 如果连接成功,则打印以下事件。

[IoTHubMonitor] [10:51:34 AM] Message received from [avasample-iot-edge-device/avaedge]:
{
  "body": {
  {
    "sdp": "SDP:\nv=0\r\no=- 1620204694595500 1 IN IP4 xxx.xxx.xxx.xxx\r\ns=Matroska video+audio+(optional)subtitles, streamed by the LIVE555 Media Server\r\ni=media/camera-300s.mkv\r\nt=0 0\r\na=tool:LIVE555 Streaming Media v2020.08.19\r\na=type:broadcast\r\na=control:*\r\na=range:npt=0-300.000\r\na=x-qt-text-nam:Matroska video+audio+(optional)subtitles, streamed by the LIVE555 Media Server\r\na=x-qt-text-inf:media/camera-300s.mkv\r\nm=video 0 RTP/AVP 96\r\nc=IN IP4 0.0.0.0\r\nb=AS:500\r\na=rtpmap:96 H264/90000\r\na=fmtp:96 packetization-mode=1;profile-level-id=4D0029;sprop-parameter-sets=Z00AKeKQCgC3YC3AQEBpB4kRUA==,aO48gA==\r\na=control:track1\r\n"
  },
  "properties": {
    "topic": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ava-sample-deployment/providers/Microsoft.Media/videoAnalyzers/avasample",
    "subject": "/edgeModules/avaedge/livePipelines/Sample-Pipeline-1/sources/rtspSource",
    "eventType": "Microsoft.VideoAnalyzer.Diagnostics.MediaSessionEstablished",
    "eventTime": "2021-05-06T00:58:58.602Z",
    "dataVersion": "1.0"
  },
  "systemProperties": {
    "iothub-connection-device-id": "avasample-iot-edge-device",
    "iothub-connection-module-id": "avaedge",
    "iothub-message-source": "Telemetry",
    "messageId": "459c3255-7c86-4ff5-a1e5-7ce3fcb07627",
    "contentType": "application/json",
    "contentEncoding": "utf-8"
  }
}

在以上脚本中:

  • 此消息是一个诊断事件 (MediaSessionEstablished)。 它指示 RTSP 源节点(使用者)与 RTSP 模拟器连接,并已开始接收(模拟的)实时馈送。
  • sdp 部分包含有关诊断事件的数据。 在本例中,数据包含会话描述协议 (SDP) 详细信息。

MotionDetection 事件

当检测到运动时,视频分析器模块会发送推理事件。 将 type 设置为 motion,指示它是运动检测处理器的结果 。

以下是此消息的示例:

{
  "body": {
    "timestamp": 145818422564951,
    "inferences": [
      {
        "type": "motion",
        "motion": {
          "box": {
            "l": 0.322176,
            "t": 0.574627,
            "w": 0.525,
            "h": 0.088889
          }
        }
      }
    ]
  },
  "properties": { … },
  "systemProperties": { … }
}

在本示例中:

  • body 值包含有关分析事件的数据。 在本例中,该事件是推理事件,因此正文包含 timestamp 和 inferences 数据 。

  • inferences 数据指示 type 为 motion 。 它包含有关该 motion 事件的其他数据。

  • box 部分包含移动对象周围的边界框的坐标。 值按视频的宽度和高度(以像素为单位)进行规范化。 例如,若要获得原始像素坐标,需要将水平维度乘以 1920,将垂直维度乘以 1080。

    l - distance from left of image
    t - distance from top of image
    w - width of bounding box
    h - height of bounding box
    

清理资源

如果想学习其他快速入门,则请保留所创建的资源。 否则,请在 Azure 门户中,转到资源组,选择运行本快速入门所用的资源组,然后删除所有资源。

后续步骤