你当前正在访问 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 存储。
媒体连接器支持以下南行身份验证方法:
- 用户名/密码身份验证
- 用于测试目的的匿名访问
若要建立与媒体源的 TLS 连接,可以配置连接器的证书信任列表。
媒体连接器支持以下北行身份验证方法:
- RTSP 和 RTSPS 终结点的用户名/密码
- 针对 RTSP 和 RTSPS 终结点进行测试的匿名访问
- RTSPS 终结点专用证书信任列表
Prerequisites
若要配置设备和资产,需要运行 Azure IoT 操作实例。
要登录到操作体验 Web UI,则需要至少具有包含 Kubernetes - Azure Arc 实例的资源组参与者权限的 Microsoft Entra ID 帐户。 无法使用 Microsoft 帐户 (MSA) 登录。 有关详细信息,请参阅 排查对操作 Web UI 界面的访问问题。
连接到网络并可从 Azure IoT 操作群集访问的相机。 相机必须支持视频流的实时流协议。 还需要相机的用户名和密码来进行身份验证。
媒体源类型
媒体连接器可以连接到各种源,包括:
| 媒体源 | 示例 URL | 注释 |
|---|---|---|
| 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 |
任务类型
媒体连接器支持以下任务类型:
| 任务类型 | Description |
|---|---|
| snapshot-to-mqtt | 从媒体源捕获快照并将其发布到 MQTT 主题。 |
| clip-to-fs | 将媒体源中的视频剪辑保存到文件系统。 |
| snapshot-to-fs | 将快照从媒体源保存到文件系统。 |
| 传输到RTSP | 将实时视频流从媒体源代理到 RTSP 终结点。 |
| stream-to-rtsps | 将实时视频流从媒体源代理到 RTSPS 终结点。 |
RTSP 终结点身份验证
当连接器将实时视频流代理到 RTSP 或 RTSPS 终结点时,该连接器支持用户名/密码身份验证。 当连接器将实时视频流代理到 RTSPS 终结点时,该连接器还支持 TLS。
按照 Azure IoT 操作部署的 '管理机密' 中的步骤,在 Azure Key Vault 中添加用户名和密码的机密,将其映射到 Kubernetes 群集中,并从你的stream-to-rtsp 和stream-to-rtsps资产配置中引用它们。
按照 “管理用于外部通信的证书 ”中的步骤,在 Azure Key Vault 中添加 TLS 证书的机密,将其投影到 Kubernetes 群集中,并从资产配置中引用它们 stream-to-rtsps 。
示例用法
媒体连接器的示例用法包括:
从视频流或图像 URL 捕获快照,并将其发布到 MQTT 主题。 MQTT 主题的订阅者可以使用捕获的映像进行进一步处理或分析。
将快照或视频剪辑保存到群集上的本地文件系统。 使用 Azure Arc 启用的 Azure 容器存储 提供可靠且容错的解决方案,用于将捕获的视频上传到云进行存储或处理。 要了解如何创建合适的永久性卷声明,请参阅云引入边缘卷配置。
将实时视频流从相机代理到操作员可以访问的终结点。 出于安全性和性能原因,只有媒体连接器才能直接访问边缘相机。 媒体连接器使用单独的媒体服务器组件将视频流式传输到操作员的终结点。 此媒体服务器可以转码到各种协议,例如 RTSP、RTCP、SRT 和 HLS。 你需要部署自己的媒体服务器来提供这些功能。
部署媒体连接器
部署 Azure IoT 运营时,安装包包含各种连接器。 在开始在操作体验 Web UI 中使用连接器(例如 ONVIF、媒体、MQTT 和 HTTP/REST)之前,管理员必须将连接器模板实例添加到 Azure IoT 操作实例中。
所有连接器都可以将捕获的数据发布到 MQTT 中转站。 媒体连接器还可以将捕获的数据保存到存储。 Azure IoT 操作使用 Azure Arc 启用的 Azure 容器存储将捕获的数据传输到 Azure Blob 存储等云存储目标。 配置连接器模板实例时,请指定用于保存捕获数据的连接器的永久性卷声明和装载路径。 还可以在 Pod 之间共享卷。 要了解如何创建合适的永久性卷声明,请参阅云引入边缘卷配置。
若要将连接器模板实例添加到 Azure IoT 操作实例,请执行以下操作:
在 Azure 门户中,转到 Azure IoT作实例,选择 连接器模板,然后选择“ 创建连接器模板”
在 “添加 Akri 连接器模板 向导”的第一页上,选择要添加的连接器模板的类型和版本,例如 ONVIF、 媒体、 HTTP/REST、 SSE 或 MQTT。 然后选择“元数据”。
在“元数据”页上,接受默认值,然后选择“设备入站终结点类型”。
在“设备入站终结点类型”页上,接受默认值,然后选择“诊断配置”。
在“诊断配置”页上,接受默认值,然后选择“运行时配置”。
在 运行时配置 页上,如果要将捕获的数据同步到云,请选择 “添加卷声明 ”并输入之前创建的永久性卷声明的详细信息。 然后选择“审阅”:
还可以指定用于连接器身份验证的 Azure Key Vault 中的机密。 这些机密可供使用连接器模板实例的所有设备终端使用:
在“审阅”页上,查看连接器模板实例的详细信息,然后选择“创建”以创建连接器模板实例。
OT 用户现在可以使用操作体验 Web UI 来创建具有连接器终结点的设备。
使用媒体终结点创建设备
要配置媒体连接器,请先创建一个定义与媒体源的连接的设备。 设备包括媒体源的 URL 以及访问媒体源所需的任何凭据:
将设备配置为使用用户名和密码
上述示例使用了 Anonymous 身份验证模式。 此模式不需要用户名或密码。
若要使用 Username password 身份验证模式,请完成以下步骤:
按照 “管理 Azure IoT作部署的机密 ”中的步骤,在 Azure Key Vault 中添加用户名和密码的机密,将其投影到 Kubernetes 群集中,并从设备配置中引用它们。
为设备配置一个用于使用的证书信任列表
若要管理媒体连接器的受信任证书列表,请参阅 管理用于外部通信的证书。
创建用于发布映像快照的资产
定义将映像快照从媒体源发布到 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 文件夹: