你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
已弃用。 适用于 .NET 的 Azure 视频分析器 Edge 客户端库
已弃用。 我们即将停用 Azure 视频分析器预览版服务,建议你在 2022 年 12 月 1 日前从视频分析器转换你的应用程序。 此 SDK 不再维护。
Azure 视频分析器是一项 Azure 应用 AI 服务 ,它提供一个平台,用于构建可跨边缘和云基础结构的智能视频应用程序。 该平台提供捕获、录制和分析实时视频的功能,以及将结果、视频和视频分析发布到边缘或云中的 Azure 服务。 它设计为一个可扩展的平台,使你能够连接不同的视频推理边缘模块,例如认知服务模块,或者使用开源机器学习或 Azure 机器学习使用自己的数据训练的自定义推理模块。
使用视频分析器 Edge 的客户端库可以:
- 简化与 Microsoft Azure IoT SDK 的交互
- 以编程方式构造管道拓扑和实时管道
入门
这是一个仅限模型的 SDK。 所有客户端操作都是使用 Microsoft Azure IoT SDK 完成的。 此 SDK 提供可用于与 Azure IoT SDK 交互的模型。
验证客户端
客户端来自 Azure IoT SDK。 需要获取 IoT 设备连接字符串才能对 Azure IoT SDK 进行身份验证。 有关详细信息,请访问: https://github.com/Azure/azure-iot-sdk-csharp。
string connectionString = System.Environment.GetEnvironmentVariable("iothub_connectionstring", EnvironmentVariableTarget.User);
var serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
安装包
使用 NuGet 安装适用于 .NET 的视频分析器 Edge 客户端库:
dotnet add package Azure.Media.VideoAnalyzer.Edge --prerelease
使用 NuGet 安装用于 .NET 的 Azure IoT 中心 SDK:
dotnet add package Microsoft.Azure.Devices
先决条件
需要一个活动的 Azure 订阅 和 IoT 设备连接字符串才能使用此包。
你需要使用与所使用的视频分析器 Edge 模块版本相对应的 SDK 版本。
SDK 中 IsInRole 中的声明 视频分析器边缘模块 1.0.0-beta.5 1.1 1.0.0-beta.4 1.0 1.0.0-beta.3 1.0 1.0.0-beta.2 1.0 1.0.0-beta.1 1.0
创建管道拓扑并发出请求
请访问入门代码 的示例 。
关键概念
管道拓扑与实时管道
管道拓扑是用于实例化实时管道的蓝图或模板。 它使用占位符作为管道参数的值来定义管道的参数。 实时管道引用管道拓扑并指定参数。 这样,就可以有多个实时管道引用同一拓扑,但参数值不同。 有关详细信息,请访问 管道拓扑和实时管道。
CloudToDeviceMethod
CloudToDeviceMethod
是 azure-iot-hub SDK 的一部分。 此方法允许将单向通知传达给 IoT 中心内的设备。 在本例中,我们希望传达各种方法,例如 PipelineTopologySetRequest
和 PipelineTopologyGetRequest
。 若要使用 CloudToDeviceMethod
,需要传入一个参数: MethodName
,然后设置该方法的 JSON 有效负载。
参数 MethodName
是要发送的请求的名称。 请确保使用每个方法的预定义 MethodName
属性。 例如,PipelineTopologySetRequest.MethodName
。
若要设置云方法的 Json 有效负载,请使用管道请求方法的 GetPayloadAsJson()
函数。 例如: directCloudMethod.SetPayloadJson(PipelineTopologySetRequest.GetPayloadAsJson())
线程安全
我们保证所有客户端实例方法都是线程安全的,并且相互独立, (准则) 。 这可确保重用客户端实例的建议始终是安全的,即使跨线程也是如此。
其他概念
客户端选项 | 访问响应 | 长时间运行的操作 | 处理失败 | 诊断 | 嘲笑 | 客户端生存期
示例
创建管道拓扑
若要创建管道拓扑,需要定义源和接收器。
定义参数
pipelineTopologyProperties.Parameters.Add(new ParameterDeclaration("rtspUserName", ParameterType.String)
{
Description = "rtsp source user name.",
Default = "exampleUserName"
});
pipelineTopologyProperties.Parameters.Add(new ParameterDeclaration("rtspPassword", ParameterType.SecretString)
{
Description = "rtsp source password.",
Default = "examplePassword"
});
pipelineTopologyProperties.Parameters.Add(new ParameterDeclaration("rtspUrl", ParameterType.String)
{
Description = "rtsp Url"
});
定义源
pipelineTopologyProps.Sources.Add(new RtspSource("rtspSource", new UnsecuredEndpoint("${rtspUrl}")
{
Credentials = new UsernamePasswordCredentials("${rtspUserName}", "${rtspPassword}")
})
);
定义接收器
var nodeInput = new List<NodeInput>
{
new NodeInput("rtspSource")
};
pipelineTopologyProps.Sinks.Add(new VideoSink("videoSink", nodeInput, "video", "/var/lib/videoanalyzer/tmp/", "1024"));
设置拓扑属性并创建拓扑
var pipelineTopologyProps = new PipelineTopologyProperties
{
Description = "Continuous video recording to a Video Analyzer video",
};
SetParameters(pipelineTopologyProps);
SetSources(pipelineTopologyProps);
SetSinks(pipelineTopologyProps);
return new PipelineTopology("ContinuousRecording")
{
Properties = pipelineTopologyProps
};
创建实时管道
若要创建实时管道,需要具有现有的管道拓扑。
var livePipelineProps = new LivePipelineProperties
{
Description = "Sample description",
TopologyName = topologyName,
};
livePipelineProps.Parameters.Add(new ParameterDefinition("rtspUrl", "rtsp://sample.com"));
return new LivePipeline("livePIpeline")
{
Properties = livePipelineProps
};
调用直接方法
若要在设备上调用直接方法,需要先使用视频分析器 Edge SDK 定义请求,然后使用 IoT SDK 发送 CloudToDeviceMethod
该方法请求。
var setPipelineTopRequest = new PipelineTopologySetRequest(pipelineTopology);
var directMethod = new CloudToDeviceMethod(setPipelineTopRequest.MethodName);
directMethod.SetPayloadJson(setPipelineTopRequest.GetPayloadAsJson());
var setPipelineTopResponse = await _serviceClient.InvokeDeviceMethodAsync(_deviceId, _moduleId, directMethod);
若要使用 SDK 尝试不同的管道拓扑,请参阅官方 示例。
故障排除
- 使用 IoT 中心 发送方法请求时,
CloudToDeviceMethod
请记住不要直接键入方法请求名称。 需改用MethodRequestName.MethodName
。
后续步骤
贡献
本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 https://cla.microsoft.com 。
如果遇到任何问题,请在 Github 上提出问题。
提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 对所有存储库执行一次这样的操作。
此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答;若有其他任何问题或意见,请联系 opencode@microsoft.com。