Compartilhar via


Azure Análise Dinâmica de Vídeo para IoT Edge biblioteca de clientes para .NET – versão 1.0.0-beta.1

A Análise de Vídeo ao vivo no IoT Edge fornece uma plataforma para criar aplicativos de vídeo inteligentes que abrangem a borda e a nuvem. A plataforma oferece a capacidade de capturar, gravar e analisar vídeo ao vivo, juntamente com a publicação dos resultados, análise de vídeo e vídeo, nos serviços do Azure na nuvem ou na borda. Ele foi projetado para ser uma plataforma extensível, permitindo que você conecte diferentes módulos de borda de análise de vídeo (como contêineres de serviços cognitivos, módulos de borda personalizados criados por você com modelos de machine learning de software livre ou modelos personalizados treinados com seus próprios dados) a ele e use-os para analisar vídeos ao vivo sem se preocupar com a complexidade de criar e executar um pipeline de vídeo ao vivo.

Use a biblioteca de clientes para Análise Dinâmica de Vídeo no IoT Edge para:

Documentação do produto | Métodos diretos | Grafos de | mídia Código-fonte | Amostras

Introdução

Esse é um sdk somente de modelos. Todas as operações de cliente são feitas usando os SDKs do IoT do Microsoft Azure. Esse sdk fornece modelos que você pode usar para interagir com os SDKs de Iot do Azure.

Autenticar o cliente

Conforme mencionado acima, o cliente vem do SDK do IoT do Azure. Você precisará obter uma cadeia de conexão de dispositivo IoT para autenticar o SDK do IoT do Azure. Para obter mais informações, visite: https://github.com/Azure/azure-iot-sdk-csharp.

var connectionString = "connectionString";
this._serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

Instalar o pacote

Instale a biblioteca de clientes do Análise Dinâmica de Vídeo para .NET com o NuGet:

dotnet add package Azure.Media.Analytics.Edge --version 1.0.0-beta.1

Instale o SDk do Hub IoT do Azure para .Net com o NuGet:

dotnet add package Microsoft.Azure.Devices --version 1.28.1

Pré-requisitos

  • O C# é necessário para usar esse pacote.

  • Você precisa de uma assinatura ativa do Azure e de uma cadeia de conexão de dispositivo IoT para usar esse pacote.

  • Você precisará usar a versão do SDK que corresponde à versão do módulo LVA Edge que você está usando.

    . Módulo do LVA Edge
    1.0.0b1 2,0

Criando uma topologia de grafo e fazendo solicitações

Visite os Exemplos de código inicial

Principais conceitos

MediaGraph Topology vs MediaGraph Instance

Uma topologia de grafo é um blueprint ou modelo de um grafo. Ele define os parâmetros do grafo usando espaços reservados como valores para eles. Uma instância de grafo faz referência a uma topologia de grafo e especifica os parâmetros. Dessa forma, você pode ter várias instâncias de grafo referenciando a mesma topologia, mas com valores diferentes para parâmetros. Para obter mais informações, visite Topologias e instâncias do grafo de mídia

CloudToDeviceMethod

O CloudToDeviceMethod faz parte do SDk do azure-iot-hub. Esse método permite que você comunique notificações unidirecionais a um dispositivo no hub IoT. Em nosso caso, queremos comunicar vários métodos de grafo, como MediaGraphTopologySetRequest e MediaGraphTopologyGetRequest. Para usar CloudToDeviceMethod , você precisa passar um parâmetro: method_name e, em seguida, definir o conteúdo Json desse método.

O parâmetro method_name é o nome da solicitação de grafo de mídia que você está enviando. Use a propriedade predefinida method_name de cada método. Por exemplo, MediaGraphTopologySetRequest.method_name.

Para definir o conteúdo Json do método de nuvem, use a função do método de solicitação de grafo de GetPayloadAsJson() mídia. Por exemplo, directCloudMethod.SetPayloadJson(MediaGraphTopologySetRequest.GetPayloadAsJson())

Exemplos

Criando uma topologia de grafo

Para criar uma topologia de grafo, você precisa definir parâmetros, fontes e coletores.

// 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
    };
}

Criando uma instância de grafo

Para criar uma instância de grafo, você precisa ter uma topologia de grafo existente.

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
    };
}

Invocando uma solicitação de método de grafo

Para invocar um método de grafo em seu dispositivo, primeiro você precisa definir a solicitação usando o sdk lva. Em seguida, envie essa solicitação de método usando o sdk iot CloudToDeviceMethod

var setGraphRequest = new MediaGraphTopologySetRequest(graphTopology);

var directMethod = new CloudToDeviceMethod(setGraphRequest.MethodName);
directMethod.SetPayloadJson(setGraphRequest.GetPayloadAsJson());

var setGraphResponse = await _serviceClient.InvokeDeviceMethodAsync(_deviceId, _moduleId, directMethod);

Para experimentar topologias de grafo de mídia diferentes com o SDK, consulte os Exemplos oficiais.

Solução de problemas

  • Ao enviar uma solicitação de método usando a Hub IoT lembre-se de CloudToDeviceMethod não digitar o nome da solicitação de método diretamente. Em vez disso, use [MethodRequestName.method_name]
  • Certifique-se de serializar toda a solicitação de método antes de passá-la para CloudToDeviceMethod

Próximas etapas

Contribuição

Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite https://cla.microsoft.com.

Se você encontrar algum problema, abra um problema em nosso Github.

Quando você envia uma solicitação de pull, um bot do CLA determina automaticamente se você precisa fornecer um CLA e preencher a PR corretamente (por exemplo, rótulo, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.

Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para saber mais, confira as Perguntas frequentes sobre o Código de Conduta ou contate o opencode@microsoft.com caso tenha outras dúvidas ou comentários.