你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure IoT 操作中,使用媒体连接器(预览版)可访问媒体源(如边缘附加相机)中的媒体。
Azure IoT 操作中的资产是用于表示物理资产或设备的逻辑实体。 Azure IoT 操作资产可以具有描述其行为和特征的自定义属性、数据点、流和事件。 资产与一个或多个设备相关联。 Azure IoT 操作将资产定义存储在 Azure 设备注册表中。
Azure IoT 操作中的设备是一个逻辑实体,用于定义与物理资产或设备的连接。 如果没有设备,数据无法从物理设备或资产流向 MQTT 代理。 配置设备和资产时,将建立与物理资产或设备的连接,而数据点值、事件和流将到达 Azure IoT 操作实例。 设备具有一个或多个入站终结点。 Azure IoT 操作将设备定义存储在 Azure 设备注册表中。
本文介绍如何使用媒体连接器执行如下任务:
- 定义将媒体源连接到 Azure IoT 操作实例的设备。
- 添加资产,并定义用于从媒体源捕获媒体的流。
- 将映像快照发送到 MQTT 代理。
- 将视频剪辑保存到 Azure 存储。
Prerequisites
要配置设备和资产,需要运行 Azure IoT 操作的预览实例。
要登录到操作体验 Web UI,则需要至少具有包含 Kubernetes - Azure Arc 实例的资源组参与者权限的 Microsoft Entra ID 帐户。 无法使用 Microsoft 帐户 (MSA) 登录。 在 Azure 租户中创建合适的 Microsoft Entra ID 帐户:
- 使用用于部署 Azure IoT 操作的同一租户和用户名登录到 Azure 门户。
- 在 Azure 门户中,前往“Microsoft Entra ID”部分,选择“用户”“+ 新用户”>“新建用户”>。 新建用户并记下密码,稍后登录时需要此密码。
- 在 Azure 门户中,前往包含 Kubernetes - Azure Arc 实例的资源组。 在“访问控制 (IAM)”页上,选择“+ 添加”“添加角色分配”>。
- 在“添加角色分配”页上,选择“特权管理员角色”。 选择“参与者”,然后选择“下一步”。
- 在“成员”页上,将新用户添加到角色。
- 选择“查看并分配”以完成新用户的设置。
现在可以使用新的用户帐户登录到 操作体验 Web 界面。
连接到网络并可从 Azure IoT 操作群集访问的相机。 相机必须支持视频流的实时流协议。 还需要相机的用户名和密码来进行身份验证。
媒体源类型
媒体连接器可以连接到各种源,包括:
| 媒体源 | 示例 URL | 注释 | 
|---|---|---|
| 边缘附加相机 | file://host/dev/video0file://host/dev/usb0 | 无需身份验证。 URL 指向设备文件。 使用 USB、FireWire、MIPI 或专有接口连接到节点。 | 
| IP 相机 | rtsp://192.168.178.45:554/stream1 | 用于快照的 JPEG 图像通过 HTTP 传输,视频流通过 RTSP/RTCP/RTP/MJPEG-TS 传输。 IP 相机还可能公开标准 ONVIF 控制接口。 | 
| 媒体服务器 | rtsp://192.168.178.45:554/stream1 | 用于快照的 JPEG 图像通过 HTTP 传输,视频流通过 RTSP/RTCP/RTP/MJPEG-TS 传输。 媒体服务器还可以使用 URL 提供图像和视频,例如 ftp://host/path或smb://host/path | 
| 媒体文件 | http://camera1/snapshot/profile1nfs://server/path/file.extension file://localhost/media/path/file.mkv | 具有可从群集访问的 URL 的任何媒体文件。 | 
| 媒体文件夹 | file://host/path/to/folder/ftp://server/path/to/folder/ | 可从群集访问的文件夹,其中包含媒体文件,例如快照或剪辑。 | 
任务类型
媒体连接器支持以下任务类型:
| 任务类型 | Description | 
|---|---|
| snapshot-to-mqtt | 从媒体源捕获快照并将其发布到 MQTT 主题。 | 
| clip-to-fs | 将媒体源中的视频剪辑保存到文件系统。 | 
| snapshot-to-fs | 将快照从媒体源保存到文件系统。 | 
| 传输到RTSP | 将实时视频流从媒体源代理到 RTSP 终结点。 | 
| stream-to-rtsps | 将实时视频流从媒体源代理到 RTSP 终结点。 | 
示例用法
媒体连接器的示例用法包括:
- 从视频流或图像 URL 捕获快照,并将其发布到 MQTT 主题。 MQTT 主题的订阅者可以使用捕获的映像进行进一步处理或分析。 
- 将视频流保存到群集上的本地文件系统。 使用 Azure Arc 启用的 Azure 容器存储 提供可靠且容错的解决方案,用于将捕获的视频上传到云进行存储或处理。 
- 将实时视频流从相机代理到操作员可以访问的终结点。 出于安全性和性能原因,只有媒体连接器才能直接访问边缘相机。 媒体连接器使用单独的媒体服务器组件将视频流式传输到操作员的终结点。 此媒体服务器可以转码到各种协议,例如 RTSP、RTCP、SRT 和 HLS。 你需要部署自己的媒体服务器来提供这些功能。 
部署媒体连接器
部署 Azure IoT 操作的预览版时,部署包括三个预览连接器。 可以通过在 Azure 门户中检查是否为实例启用了预览功能来验证是否具有 Azure IoT 操作的预览实例:
在操作体验 Web UI 中使用预览连接器(ONVIF、媒体和 HTTP/REST)之前,管理员必须将连接器模板实例添加到 Azure IoT 操作实例。
所有三个预览连接器都可以将捕获的数据发布到 MQTT 代理。 媒体连接器还可以将捕获的数据保存到存储。 Azure IoT 操作使用 Azure Arc 启用的 Azure 容器存储将捕获的数据传输到 Azure Blob 存储等云存储目标。 配置连接器模板实例时,请指定用于保存捕获数据的连接器的永久性卷声明和装载路径。 要了解如何创建合适的永久性卷声明,请参阅云引入边缘卷配置。
若要将连接器模板实例添加到 Azure IoT 操作实例,请执行以下操作:
- 在 Azure 门户中,转到 Azure IoT 操作实例,选择“连接器模板”,然后选择“添加连接器模板实例”: 
- 在 “添加 Akri 连接器模板 向导”的第一页上,选择要添加的连接器模板类型,例如 ONVIF、 媒体、 HTTP/REST 或 SSE HTTP。 然后选择“元数据”。 
- 在“元数据”页上,接受默认值,然后选择“设备入站终结点类型”。 
- 在“设备入站终结点类型”页上,接受默认值,然后选择“诊断配置”。 
- 在“诊断配置”页上,接受默认值,然后选择“运行时配置”。 
- 在“运行时配置”页上,选择“添加卷声明”并输入之前创建的永久性卷声明的详细信息。 然后选择“审阅”: 
- 在“审阅”页上,查看连接器模板实例的详细信息,然后选择“创建”以创建连接器模板实例。 
OT 用户现在可以使用操作体验 Web UI 来创建具有预览连接器终结点的设备。
使用媒体终结点创建设备
要配置媒体连接器,请先创建一个定义与媒体源的连接的设备。 设备包括媒体源的 URL 以及访问媒体源所需的任何凭据:
- 在操作体验 Web UI 中,选择左侧导航窗格中的“设备”。 然后选择“新建”。 
- 输入设备的名称,例如 - media-connector。 要添加媒体连接器的终结点,请在 Microsoft.Media 磁贴上选择“新建”。
- 添加媒体连接器终结点的详细信息,包括任何身份验证凭据: - 要了解如何配置“用户名密码”身份验证,请参阅管理 Azure IoT 操作部署的机密。 - 选择“应用”以保存终结点。 
- 在“设备详细信息”页上,选择“下一步”以继续。 
- 在“添加自定义属性”页上,可以添加要与设备关联的任何其他属性。 例如,可以添加一个属性来指示相机制造商。 然后选择“下一步”继续 
- 在“摘要”页上,查看设备的详细信息,然后选择“创建”以创建资产。 
- 创建设备后,可以在“设备”列表中查看它: 
创建用于发布映像快照的资产
定义将映像快照从媒体源发布到 MQTT 代理的命名空间资产:
- 在操作体验 Web UI 中,选择左侧导航窗格中的“资产”。 然后选择“创建命名空间资产”。 
- 选择在上一部分创建的媒体连接器的入站终结点。 
- 输入资产的名称,例如 - my-media-source。
- 添加要与资产关联的任何自定义属性。 例如,可以添加一个属性来指示相机制造商。 选择“下一步”继续操作。 
- 在“流”页上,选择“添加流”以添加资产的流。 
- 为流添加名称,例如 - mysnapshots。 将 MQTT 设置为目标,并添加要发布到的 MQTT 主题的名称,例如- azure-iot-operations/data/snapshots。 选择- snapshot-to-mqtt作为任务类型。- 重要 - 目前,媒体连接器始终发布到名为 - azure-iot-operations/data/<asset name>/<stream name>的主题。- 选择“添加”以保存流。 
- 在“流”页上,选择“下一步”以继续。 
- 在“审阅”页上,查看资产的详细信息,然后选择“创建”以创建资产。 
验证发布的消息
要验证连接器是否发布消息,可以使用 MQTT 客户端订阅主题 azure-iot-operations/data/{asset name}/{stream name}。 如果正确配置了设备和命名空间资产,则订阅此主题时会收到包含 JPEG 图像快照的消息。
以下步骤演示了如何在群集中运行 mosquitto_sub 工具。 要详细了解此工具和替代方法,请参阅 MQTT 工具:
使用 mosquitto_sub 工具验证数据是否流向 MQTT 代理。 在此示例中,你将在 Kubernetes 群集中运行 mosquitto_sub 工具:
- 运行以下命令来部署包含 mosquitto_pub 和 mosquitto_sub 工具的 Pod,这些工具可用于与群集中的 MQTT 代理交互: - kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml- 以下代码片段显示了已应用的 YAML 文件: - # Important: do not use in production environments # Create a service account apiVersion: v1 kind: ServiceAccount metadata: name: mqtt-client namespace: azure-iot-operations --- # Creates a pod with mosquitto-clients and mqttui utilities in your cluster apiVersion: v1 kind: Pod metadata: name: mqtt-client # The namespace must match the IoT MQ BrokerListener's namespace # Otherwise use the long hostname: aio-broker.azure-iot-operations.svc.cluster.local namespace: azure-iot-operations spec: # Use the "mqtt-client" service account which comes with default deployment # Otherwise create it with `kubectl create serviceaccount mqtt-client -n azure-iot-operations` serviceAccountName: mqtt-client containers: # Install mosquitto and mqttui utilities on Alpine linux - image: alpine name: mqtt-client command: ["sh", "-c"] args: ["apk add mosquitto-clients mqttui && sleep infinity"] resources: limits: cpu: 500m memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: broker-sat mountPath: /var/run/secrets/tokens - name: trust-bundle mountPath: /var/run/certs volumes: - name: broker-sat projected: sources: - serviceAccountToken: path: broker-sat audience: aio-internal # Must match audience in BrokerAuthentication expirationSeconds: 86400 - name: trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle # Default root CA cert- 注意 - 此配置是不安全的。 请勿在生产环境中使用此配置。 
- 运行 mqtt-client pod 时,请运行以下命令以在所创建的 Pod 中创建 shell 环境: - kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
- 在 Bash shell 的 mqtt-client pod 中,运行以下命令使用 mosquitto_sub 工具连接到 MQTT 代理,并使用通配符订阅 主题 - data/#:- mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" -v --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)- 此命令继续运行并在消息到达任何 - data/#主题时显示消息,直到按 Ctrl+C 停止它。 要退出 shell 环境,请键入- exit。
要保存单个消息的有效负载,请使用如下所示的命令:
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/my-camera/#" -C 1 -F %p --cafile /var/run/certs/
ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat) > image1.
jpeg
以下屏幕截图显示了使用资产名称和流名称的主题名称:
              
               
              
              
            
添加流以保存视频剪辑
在本部分中,向资产添加一个流,用于将视频剪辑从媒体源保存到文件系统。
验证保存的消息
以下步骤假定你配置了永久性卷声明 (PVC),以便使用以下设置将剪辑保存到 Azure Blob 存储帐户:
| 设置 | 价值 | 
|---|---|
| 存储容器 | pvc | 
| 边缘子卷路径 | exampleSubDir | 
| 连接器模板装载路径 | /data | 
| 操作体验中的流路径 | /data/exampleSubDir/clips | 
连接器捕获剪辑后,它会将它们上传到容器中的 /pvc/clips 文件夹:
              
               
              
              
            
 
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
              