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

已弃用。 适用于 .NET 的 Azure 视频分析器 Edge 客户端库

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

Azure 视频分析器是一项 Azure 应用 AI 服务 ,它提供一个平台,用于构建可跨边缘和云基础结构的智能视频应用程序。 该平台提供捕获、录制和分析实时视频的功能,以及将结果、视频和视频分析发布到边缘或云中的 Azure 服务。 它设计为一个可扩展的平台,使你能够连接不同的视频推理边缘模块,例如认知服务模块,或者使用开源机器学习或 Azure 机器学习使用自己的数据训练的自定义推理模块。

使用视频分析器 Edge 的客户端库可以:

产品文档 | 直接方法 | 管道 | 源代码 | 样品

入门

这是一个仅限模型的 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

CloudToDeviceMethodazure-iot-hub SDK 的一部分。 此方法允许将单向通知传达给 IoT 中心内的设备。 在本例中,我们希望传达各种方法,例如 PipelineTopologySetRequestPipelineTopologyGetRequest。 若要使用 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。

曝光数