Metody bezpośrednie usługi Azure Video Analyzer

edge icon
Alternatywnie zapoznaj się z tematami w obszarze Tworzenie aplikacji wideo w usłudze.


Uwaga

Przechodzimy na emeryturę usługi Azure Video Analyzer w wersji zapoznawczej. Zaleca się przeniesienie aplikacji poza usługę Video Analyzer do 01 grudnia 2022 r.

Ta emerytura nie ma wpływu na usługę Azure Video Analyzer for Media. Jest ona teraz zmieniana na usługę Azure Video Indexer. Kliknij tutaj , aby dowiedzieć się więcej.

Wymagane działanie: aby zminimalizować zakłócenia w obciążeniach, przejdź aplikację z analizatora wideo zgodnie z sugestiami opisanymi w tym przewodniku przed 01 grudnia 2022 r. Po 1 grudnia 2022 r. konto usługi Azure Video Analyzer nie będzie już działać. Od 2 maja 2022 r. nie będzie można tworzyć nowych kont usługi Video Analyzer.

Moduł avaedge brzegowy usługi Azure Video Analyzer uwidacznia kilka metod bezpośrednich, które można wywołać z IoT Hub. Metody bezpośrednie reprezentują interakcję żądania-odpowiedź z urządzeniem podobnym do wywołania HTTP w tym, że kończą się powodzeniem lub niepowodzeniem natychmiast (po przekroczeniu limitu czasu określonego przez użytkownika). Ta metoda przydaje się w scenariuszach, gdzie procedura natychmiastowego działania różni się w zależności od tego, czy urządzenie było w stanie odpowiedzieć. Aby uzyskać więcej informacji, zobacz Omówienie i wywoływanie metod bezpośrednich z IoT Hub.

W tym temacie opisano te metody, konwencje i schemat metod.

Konwencje

Metody bezpośrednie są oparte na następujących konwencjach:

  1. Metody bezpośrednie mają wersję określoną w wersji MAJOR. Format POMOCNICZY (jak pokazano w poniższym przykładzie). Jest to liczba "@apiVersion", w której "1" jest główną i "0" pomocniczym w tym przykładzie:

    {
      "methodName": "pipelineTopologySet",
      "payload": {
          "@apiVersion": "1.1",
          "name": "{TopologyName}",
          "properties": {
              // Desired Topology properties
          }
      }
    }
    
  2. Dana wersja modułu Video Analyzer obsługuje wszystkie wersje pomocnicze metody bezpośredniej wywołujące bieżącą wersję. Obsługa w różnych wersjach głównych nie jest gwarantowana.

  3. Wszystkie metody bezpośrednie są synchroniczne.

  4. Wyniki błędów są oparte na schemacie błędu OData.

  5. Nazwy powinny obserwować następujące ograniczenia:

    • Tylko znaki alfanumeryczne i kreski, o ile nie rozpoczyna się i kończy się kreską
    • Brak spacji
    • Maksymalnie 32 znaki

Przykład odpowiedzi z metody bezpośredniej

-----------------------  Request: livePipelineList  --------------------------------------------------

{
  "@apiVersion": "1.1"
}

---------------  Response: livePipelineList - Status: 200  ---------------

{
  "value": []
}

--------------------------------------------------------------------------

Kody błędów

Jak pokazano w poniższym przykładzie, gdy otrzymasz odpowiedź o błędzie z metody bezpośredniej, istnieje kod błędu najwyższego poziomu, a dodatkowe informacje znajdują się w obszarze details.

{
  "status": 400,
  "payload": {
    "error": {
      "code": "BadRequest",
      "message": "The request is invalid",
      "details": [
        {
          "code": "ApiVersionNotSupported",
          "message": "The API version '1.4' is not supported. Supported version(s): 1.0, 1.1"
        }
      ]
    }
  }
}

Poniżej przedstawiono kody błędów używane na najwyższym poziomie.

Stan Kod Komunikat
400 BadRequest Żądanie jest nieprawidłowe
400 InvalidResource Zasób jest nieprawidłowy
400 InvalidVersion Wersja interfejsu API jest nieprawidłowa
402 ŁącznośćWymagane Moduł edge wymaga prawidłowej funkcji łączności z chmurą.
404 NotFound Nie znaleziono zasobu
409 Konflikt Konflikt operacji
500 InternalServerError Wewnętrzny błąd serwera
503 ServerBusy Serwer zajęty

Poniżej przedstawiono niektóre kody błędów używane na poziomie szczegółów.

Stan Szczegółowy kod Opis
400 PipelineValidationError Ogólne błędy potoku, takie jak cykle lub partycjonowanie itp.
400 ModuleValidationError Błędy weryfikacji specyficzne dla modułu.
409 PipelineTopologyInUse Topologia potoku jest nadal odwołuje się do jednego lub większej liczby potoków na żywo.
409 OperationNotAllowedInState Nie można wykonać żądanej operacji w bieżącym stanie.
409 ResourceValidationError Przywołyny zasób (przykład: zasób wideo) nie jest w prawidłowym stanie.

Obsługiwane metody bezpośrednie

Poniżej przedstawiono metody bezpośrednie uwidocznione przez moduł krawędzi usługi Video Analyzer. Schemat metod bezpośrednich można znaleźć tutaj.

pipelineTopologyList

Ta metoda bezpośrednia zawiera listę wszystkich topologii potoku, które zostały utworzone.

Żądanie

{
  "@apiVersion": "1.1"
}

Reakcja

{
  "status": 200,
  "value": [
    {
      "systemData": {
        "createdAt": "2021-05-05T14:19:22.16Z",
        "lastModifiedAt": "2021-05-05T16:20:41.505Z"
      },
      
      // first pipeline topology payload
      
    },
      "systemData": {
        "createdAt": "2021-05-06T14:19:22.16Z",
        "lastModifiedAt": "2021-05-06T16:20:41.505Z"
      },
      
      // next pipeline topology payload
      
    }    
  ]
}

Kody stanu

Warunek Kod stanu
Znaleziono jednostkę 200
Ogólne błędy użytkownika Zakres 400
Nie znaleziono jednostki 404
Ogólne błędy serwera Zakres 500

pipelineTopologySet

Tworzy topologię potoku o podanej nazwie, jeśli taka topologia nie istnieje lub aktualizuje istniejącą topologię o tej nazwie.

Kluczowe aspekty:

  • Topologia potoku może być bezpłatnie aktualizowana, jeśli nie ma do niego odwołań potoków na żywo.

  • Topologia potoku może być bezpłatnie aktualizowana, jeśli wszystkie odwołujące się do potoków na żywo są dezaktywowane tak długo, jak:

    • Nowo dodane parametry mają wartości domyślne
    • Usunięte parametry nie są przywołytyne przez żaden potok
  • Tylko niektóre aktualizacje topologii potoku są dozwolone, gdy potok na żywo jest aktywny.

Żądanie

  {
    "methodName": "pipelineTopologySet",
    "payload": {
        "@apiVersion": "1.1",
        "name": "{TopologyName}",
        "properties": {
            // Desired pipeline topology properties
        }
    }
  }

Reakcja

  {
    "status": 201,
    "payload": {
        "systemData": {
           "createdAt": "2021-05-11T18:16:46.491Z",
           "lastModifiedAt": "2021-05-11T18:16:46.491Z"
        },
        "name": "{TopologyName}",
        "properties": {
            // Complete pipeline topology
        }
    }
  }

Kody stanu

Warunek Kod stanu Szczegółowy kod błędu
Zaktualizowano istniejącą jednostkę 200 Nie dotyczy
Utworzono nową jednostkę 201 Nie dotyczy
Ogólne błędy użytkownika Zakres 400
Błędy walidacji potoku 400 PipelineValidationError
Błędy walidacji modułu 400 ModuleValidationError
Ogólne błędy serwera Zakres 500

pipelineTopologyGet

Pobiera topologię potoku o określonej nazwie, jeśli istnieje.

Żądanie

  {
        "@apiVersion": "1.1",
        "name": "{TopologyName}"       
  }

Reakcja

{
  "status": 200,
  "payload": {
    "value": [
      {
        "systemData": {
          "createdAt": "2021-05-06T10:28:04.560Z",
          "lastModifiedAt": "2021-05-06T10:28:04.560Z"
        },
        "name": "{TopologyName}",
        // Complete pipeline topology
      }
    ]
  }
}

Kody stanu

Warunek Kod stanu
Powodzenie 200
Ogólne błędy użytkownika Zakres 400
Ogólne błędy serwera Zakres 500

pipelineTopologyDelete

Usuwa pojedynczą topologię potoku.

  • Należy pamiętać, że nie można usunąć żadnych potoków na żywo odwołujących się do topologii potoku. Jeśli istnieją takie potoki na żywo, zostanie wyświetlony TopologyInUse błąd.

Żądanie

  {
    "methodName": "pipelineTopologyDelete",
    "payload": {
        "@apiVersion": "1.1",
        "name": "{TopologyName}"
    }
  }

Reakcja

{
    "status": 200,
    "payload": null
}

Kody stanu

Warunek Kod stanu Szczegółowy kod błędu
Usunięto jednostkę 200 Nie dotyczy
Nie znaleziono jednostki 204 Nie dotyczy
Ogólne błędy użytkownika Zakres 400
Topologia potoku jest odwoływana przez co najmniej jedną Pipelines 409 PipelineTopologyInUse
Ogólne błędy serwera Zakres 500

livePipelineList

Wyświetla listę wszystkich potoków na żywo.

Żądanie

  {
        "@apiVersion": "1.1"
  }

Reakcja

{
  "status": 200,
  "value": [
    {
      "systemData": {
        "createdAt": "2021-05-05T14:19:22.16Z",
        "lastModifiedAt": "2021-05-05T16:20:41.505Z"
      },      
      // first live pipeline payload  
    },
      "systemData": {
        "createdAt": "2021-05-06T14:19:22.16Z",
        "lastModifiedAt": "2021-05-06T16:20:41.505Z"
      },
      // next live pipeline payload
    }    
  ]
}

Kody stanu

Warunek Kod stanu
Znaleziono jednostkę 200
Ogólne błędy użytkownika Zakres 400
Nie znaleziono jednostki 404
Ogólne błędy serwera Zakres 500

livePipelineSet

Tworzy potok na żywo o podanej nazwie, jeśli taki potok na żywo nie istnieje lub aktualizuje istniejący potok na żywo o tej nazwie.

Kluczowe aspekty:

  • Potok na żywo można swobodnie aktualizować w stanie "Dezaktywacja". W innych stanach dozwolone są tylko niektóre aktualizacje.
  • Potok na żywo jest ponownie aktualizowany w każdej aktualizacji.

Żądanie

  {
        "@apiVersion": "1.1",
        "name": "{livePipelineName}",
        "properties": {
            // Desired live pipeline properties
        }
  }

Reakcja

  {
    "status": 201,
    "payload": {
        "systemData": {
           "createdAt": "2021-05-11T18:16:46.491Z",
           "lastModifiedAt": "2021-05-11T18:16:46.491Z"
        },
        "name": "{livePipelineName}",
        "properties": {
            // Complete live pipeline
        }
    }
  }

Kody stanu

Warunek Kod stanu Szczegółowy kod błędu
Zaktualizowano istniejącą jednostkę 200 Nie dotyczy
Utworzono nową jednostkę 201 Nie dotyczy
Ogólne błędy użytkownika Zakres 400 Nie dotyczy
Błędy walidacji potoku na żywo 400 PipelineValidationError
Błędy walidacji modułu 400 ModuleValidationError
Błędy walidacji zasobów 409 ResourceValidationError
Ogólne błędy serwera Zakres 500 Nie dotyczy

livePipelineDelete

Usuwa pojedynczy potok na żywo.

Kluczowe aspekty:

  • Można usunąć tylko dezaktywowane potoki na żywo.

Żądanie

  {
        "@apiVersion": "1.1",
        "name": "{livePipelineName}"
  }

Reakcja

  {
    "status": 200,
    "payload": null
  }

Kody stanu

Warunek Kod stanu Szczegółowy kod błędu
Pomyślnie usunięto potok na żywo 200 Nie dotyczy
Nie znaleziono potoku na żywo 204 Nie dotyczy
Ogólne błędy użytkownika Zakres 400
Potok nie jest w stanie "Dezaktywuj" 409 OperationNotAllowedInState
Ogólne błędy serwera Zakres 500

livePipelineGet

Jest to podobne do livePipelineTopologyGet. Pobiera potok na żywo o określonej nazwie, jeśli istnieje.

Żądanie

  {
        "@apiVersion": "1.1",
        "name": "{livePipelineName}"       
  }

Reakcja

{
  "status": 200,
  "payload": {
    "value": [
      {
        "systemData": {
          "createdAt": "2021-05-06T10:28:04.560Z",
          "lastModifiedAt": "2021-05-06T10:28:04.560Z"
        },
        "name": "{livePipelineName}",
        // Complete live pipeline
      }
    ]
  }
}

Kody stanu

Warunek Kod stanu
Powodzenie 200
Ogólne błędy użytkownika Zakres 400
Ogólne błędy serwera Zakres 500

livePipelineActivate

Aktywuje potok na żywo.

Kluczowe aspekty

  • Metoda zwraca wartość, gdy potok na żywo ma stan "Aktywowanie" lub "Aktywowano".
  • Operacja List/Set w potoku na żywo zwróci bieżący stan.
  • Tę metodę można wywołać tak długo, jak potok na żywo nie znajduje się w stanie (przejściowym) "Dezaktywacja".
  • Idempotencyjność:
    • Wywołanie livePipelineActivate potoku na żywo, który jest już w stanie "Aktywowanie", zachowuje się tak samo jak w przypadku dezaktywowania potoku na żywo.
    • Aktywowanie potoku, który jest w stanie "Aktywny" zwraca kod powodzenia natychmiast.

Żądanie

  {
        "@apiVersion": "1.1",
        "name": "{livePipelineName}"
  }

Reakcja

{
    "status": 200,
    "payload": null
}

Kody stanu

Warunek Kod stanu Szczegółowy kod błędu
Pomyślnie aktywowano potok 200 Nie dotyczy
Utworzono nową jednostkę 201 Nie dotyczy
Ogólne błędy użytkownika Zakres 400
Błędy walidacji modułu 400 ModuleValidationError
Błędy walidacji zasobów 409 ResourceValidationError
Potok na żywo jest w stanie dezaktywacji 409 OperationNotAllowedInState
Ogólne błędy serwera Zakres 500

livePipelineDeactivate

Dezaktywuje potok na żywo. Dezaktywowanie potoku w sposób bezproblemowy dezaktywuje przetwarzanie wideo i zapewnia, że wszystkie zdarzenia i wideo buforowane na brzegu są zatwierdzane w chmurze, zawsze gdy ma to zastosowanie.

Kluczowe aspekty:

  • Metoda zwraca tylko wtedy, gdy potok na żywo jest dezaktywowany.
  • Tę metodę można wywołać tak długo, jak potok na żywo nie znajduje się w stanie "Aktywowanie" (przejściowy).
  • Potok przechodzi do stanu "Dezaktywacja" podczas dezaktywowania.
    • Operacja List/Set w potoku na żywo zwróci bieżący stan.
    • Dezaktywacja kończy się, gdy wszystkie nośniki zostały przekazane do chmury (jeśli potok ma węzeł ujścia wideo ).
  • Idempotencyjność:
    • Wywołanie livePipelineDeactivate potoku na żywo, który jest już w stanie "Dezaktywacja", zachowuje się tak samo jak w przypadku, gdy potok na żywo był w stanie "Aktywny".
    • Dezaktywowanie potoku, który jest w stanie "Nieaktywne" zwraca kod powodzenia natychmiast.

Żądanie

  {
    "@apiVersion": "1.1",
    "name": "{livePipelineName}"
  }

Reakcja

{
 "status": 200,
 "payload": null
}
Warunek Kod stanu Szczegółowy kod błędu
Pomyślnie aktywowano potok 200 Nie dotyczy
Utworzona nowa jednostka 201 Nie dotyczy
Ogólne błędy użytkownika Zakres 400
Potok jest w stanie aktywowania 409 OperationNotAllowedInState
Ogólne błędy serwera Zakres 500

remoteDeviceAdapterList

Wyświetla listę wszystkich kart urządzeń zdalnych. Moduł brzegowy usługi Video Analyzer może pełnić rolę przezroczystej bramy dla wideo, umożliwiając urządzeniom IoT wysyłanie wideo do chmury zza zapory. Dla każdego takiego urządzenia IoT należy utworzyć zdalną kartę urządzenia. Komunikacja między chmurą a urządzeniem IoT będzie następnie przepływać za pośrednictwem modułu usługi Video Analyzer edge.

Żądanie

  {
        "@apiVersion": "1.1"
  }

Reakcja

{
  "status": 200,
  "value": [
    {
      "systemData": {
        "createdAt": "2021-10-05T14:19:22.16Z",
        "lastModifiedAt": "2021-10-05T16:20:41.505Z"
      },      
      // first remote device adapter payload
    },
      "systemData": {
        "createdAt": "2021-10-06T14:19:22.16Z",
        "lastModifiedAt": "2021-10-06T16:20:41.505Z"
      },
      // next remote device adapter  payload
    }    
  ]
}

Kody stanu

Warunek Kod stanu
Znaleziono jednostkę 200
Ogólne błędy użytkownika Zakres 400
Nie można odnaleźć jednostki 404
Ogólne błędy serwera Zakres 500

remoteDeviceAdapterSet

Tworzy zdalną kartę urządzenia o podanej nazwie, jeśli taka karta nie istnieje lub aktualizuje istniejącą kartę o tej nazwie. W ładunku odpowiedzi, a w remoteDeviceAdapterList wywołaniach lub remoteDeviceAdapterGet wszystkie poświadczenia lub wpisy tajne zostaną pominięte.

Żądanie

  {
        "@apiVersion": "1.1",
        "name": "{remoteDeviceAdapterName}",
        "properties": {
            // Desired remote device adapter properties
        }
  }

Reakcja

  {
    "status": 201,
    "payload": {
        "systemData": {
           "createdAt": "2021-10-11T18:16:46.491Z",
           "lastModifiedAt": "2021-10-11T18:16:46.491Z"
        },
        "name": "{remoteDeviceAdapterName}",
        "properties": {
            // Remote device adapter properties, except the credentials
        }
    }
  }

Kody stanu

Warunek Kod stanu Szczegółowy kod błędu
Zaktualizowano istniejącą jednostkę 200 Nie dotyczy
Utworzona nowa jednostka 201 Nie dotyczy
Ogólne błędy użytkownika Zakres 400 Nie dotyczy
Błędy sprawdzania poprawności adaptera urządzenia zdalnego 400 RemoteDeviceAdapterValidationError
Błędy sprawdzania poprawności modułu 400 ModuleValidationError
Błędy walidacji zasobów 409 Błąd ResourceValidationError
Ogólne błędy serwera Zakres 500 Nie dotyczy

remoteDeviceAdapterGet

Jest to podobne do livePipelineTopologyGet. Pobiera zdalną kartę urządzenia o określonej nazwie, jeśli istnieje (poświadczenia lub wpisy tajne zostaną pominięte).

Żądanie

  {
        "@apiVersion": "1.1",
        "name": "{remoteDeviceAdapterName}"       
  }

Reakcja

{
  "status": 200,
  "payload": {
    "value": [
      {
        "systemData": {
          "createdAt": "2021-10-06T10:28:04.560Z",
          "lastModifiedAt": "2021-10-06T10:28:04.560Z"
        },
        "name": "{remoteDeviceAdapterName}",
        // Remote device adapter properties, except the credentials
      }
    ]
  }
}

Kody stanu

Warunek Kod stanu
Powodzenie 200
Ogólne błędy użytkownika Zakres 400
Ogólne błędy serwera Zakres 500

remoteDeviceAdapterDelete

Usuwa pojedynczą kartę urządzenia zdalnego, jeśli istnieje.

Żądanie

  {
        "@apiVersion": "1.1",
        "name": "{remoteDeviceAdapterName}"
  }

Reakcja

  {
    "status": 200,
    "payload": null
  }

Kody stanu

Warunek Kod stanu Szczegółowy kod błędu
Pomyślnie usunięto kartę urządzenia zdalnego 200 Nie dotyczy
Nie można odnaleźć adaptera urządzenia zdalnego 204 Nie dotyczy
Ogólne błędy użytkownika Zakres 400
Ogólne błędy serwera Zakres 500

onvifDeviceDiscover i onvifDeviceGet

Szczegółowe informacje o tych wywołaniach znajdują się w artykule dotyczącym odnajdywania urządzeń z obsługą platformy ONVIF.

Następne kroki

Schemat konfiguracji bliźniaczej reprezentacji modułu