你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 .NET IoT Edge 客户端库的 Azure 实时视频分析 - 版本 1.0.0-beta.1
IoT Edge 上的实时视频分析提供了一个平台,可用于构建跨越边缘和云的智能视频应用程序。 该平台提供捕获、录制和分析实时视频的功能,以及将结果、视频和视频分析发布到云或边缘中的 Azure 服务。 它旨在成为一个可扩展的平台,使你能够连接不同的视频分析边缘模块 (例如认知服务容器、使用开源机器学习模型构建的自定义边缘模块,或使用自己的数据) 训练的自定义模型,并使用它们分析实时视频,而无需担心生成和运行实时视频管道的复杂性。
在 IoT 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。
var connectionString = "connectionString";
this._serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
安装包
使用 NuGet 安装适用于 .NET 的 实时视频分析 客户端库:
dotnet add package Azure.Media.Analytics.Edge --version 1.0.0-beta.1
使用 NuGet 安装适用于 .Net 的 Azure IoT 中心 SDK:
dotnet add package Microsoft.Azure.Devices --version 1.28.1
先决条件
使用此包需要 C# 。
需要一个有效的 Azure 订阅和一个 IoT 设备连接字符串 才能使用此包。
需要使用与正在使用的 LVA Edge 模块版本相对应的 SDK 版本。
SDK 中 IsInRole 中的声明 LVA Edge 模块 1.0.0b1 2.0
创建图形拓扑并发出请求
请访问入门代码的示例
关键概念
MediaGraph 拓扑与 MediaGraph 实例
图形拓扑是图形的蓝图或模板。 它使用占位符作为其值来定义图形的参数。 图形实例引用图形拓扑并指定参数。 这样,就可以有多个图形实例引用同一拓扑,但参数值不同。 有关详细信息,请访问 媒体图拓扑和实例
CloudToDeviceMethod
CloudToDeviceMethod
是 azure-iot-hub SDK 的一部分。 此方法允许将单向通知传达给 IoT 中心内的设备。 在本例中,我们想要传达各种图形方法,例如 MediaGraphTopologySetRequest
和 MediaGraphTopologyGetRequest
。 若要使用 CloudToDeviceMethod
,需要传入一个参数: method_name
,然后设置该方法的 Json 有效负载。
参数 method_name
是要发送的媒体图请求的名称。 请确保使用每个方法的预定义 method_name
属性。 例如,MediaGraphTopologySetRequest.method_name
。
若要设置云方法的 Json 有效负载,请使用媒体图请求方法的 GetPayloadAsJson()
函数。 例如: directCloudMethod.SetPayloadJson(MediaGraphTopologySetRequest.GetPayloadAsJson())
示例
创建图形拓扑
若要创建图形拓扑,需要定义参数、源和接收器。
// Add parameters to Topology
private void SetParameters(MediaGraphTopologyProperties graphProperties)
{
graphProperties.Parameters.Add(new MediaGraphParameterDeclaration("rtspUserName", MediaGraphParameterType.String)
{
Description = "rtsp source user name.",
Default = "dummyUserName"
});
graphProperties.Parameters.Add(new MediaGraphParameterDeclaration("rtspPassword", MediaGraphParameterType.SecretString)
{
Description = "rtsp source password.",
Default = "dummyPassword"
});
graphProperties.Parameters.Add(new MediaGraphParameterDeclaration("rtspUrl", MediaGraphParameterType.String)
{
Description = "rtsp Url"
});
}
// Add sources to Topology
private void SetSources(MediaGraphTopologyProperties graphProperties)
{
graphProperties.Sources.Add(new MediaGraphRtspSource("rtspSource", new MediaGraphUnsecuredEndpoint("${rtspUrl}")
{
Credentials = new MediaGraphUsernamePasswordCredentials("${rtspUserName}", "${rtspPassword}")
})
);
}
// Add sinks to Topology
private void SetSinks(MediaGraphTopologyProperties graphProperties)
{
var graphNodeInput = new List<MediaGraphNodeInput>
{
new MediaGraphNodeInput("rtspSource")
};
var cachePath = "/var/lib/azuremediaservices/tmp/";
var cacheMaxSize = "2048";
graphProperties.Sinks.Add(new MediaGraphAssetSink("assetSink", graphNodeInput, "sampleAsset-${System.GraphTopologyName}-${System.GraphInstanceName}", cachePath, cacheMaxSize)
{
SegmentLength = System.Xml.XmlConvert.ToString(TimeSpan.FromSeconds(30)),
});
}
private MediaGraphTopology BuildGraphTopology()
{
var graphProperties = new MediaGraphTopologyProperties
{
Description = "Continuous video recording to an Azure Media Services Asset",
};
SetParameters(graphProperties);
SetSources(graphProperties);
SetSinks(graphProperties);
return new MediaGraphTopology("ContinuousRecording")
{
Properties = graphProperties
};
}
创建图形实例
若要创建图形实例,需要具有现有的图形拓扑。
private MediaGraphInstance BuildGraphInstance(string graphTopologyName)
{
var graphInstanceProperties = new MediaGraphInstanceProperties
{
Description = "Sample graph description",
TopologyName = graphTopologyName,
};
graphInstanceProperties.Parameters.Add(new MediaGraphParameterDefinition("rtspUrl", "rtsp://sample.com"));
return new MediaGraphInstance("graphInstance")
{
Properties = graphInstanceProperties
};
}
调用图形方法请求
若要在设备上调用图形方法,需要首先使用 lva sdk 定义请求。 然后使用 iot sdk 的 发送该方法请求 CloudToDeviceMethod
var setGraphRequest = new MediaGraphTopologySetRequest(graphTopology);
var directMethod = new CloudToDeviceMethod(setGraphRequest.MethodName);
directMethod.SetPayloadJson(setGraphRequest.GetPayloadAsJson());
var setGraphResponse = await _serviceClient.InvokeDeviceMethodAsync(_deviceId, _moduleId, directMethod);
若要使用 SDK 尝试不同的媒体图拓扑,请参阅官方 示例。
疑难解答
- 使用 IoT 中心
CloudToDeviceMethod
发送方法请求时,请记住不要直接键入方法请求名称。 需改用[MethodRequestName.method_name]
。 - 确保先序列化整个方法请求,然后再将其传递到
CloudToDeviceMethod
后续步骤
贡献
本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 https://cla.microsoft.com 。
如果遇到任何问题,请在 Github 上提出问题。
提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 对所有存储库执行一次这样的操作。
本项目采用 Microsoft 开源行为准则。 有关详细信息,请参阅“行为准则常见问题解答”,如有其他任何问题或意见,请联系 opencode@microsoft.com。