Temukan kamera ONVIF dengan Akri

Akri adalah antarmuka sumber daya Kubernetes yang memungkinkan Anda dengan mudah mengekspos perangkat daun heterogen (seperti kamera IP dan perangkat USB) sebagai sumber daya dalam kluster Kubernetes, dan terus mendeteksi simpul yang memiliki akses ke perangkat ini untuk menjadwalkan beban kerja berdasarkannya. Akri adalah proyek kotak pasir CNCF yang dibuat untuk tepi, menangani tampilan dinamis dan hilangnya perangkat daun. Saat ini mendukung protokol OPC UA, ONVIF, dan udev, tetapi Anda juga dapat menerapkan penangan protokol kustom yang disediakan oleh templat. Baca selengkapnya tentang Akri di sini.

Artikel ini menjelaskan bagaimana Anda dapat menemukan kamera ONVIF yang terhubung ke jaringan yang sama dengan kluster AKS Edge Essentials Anda. ONVIF adalah standar industri terbuka untuk perangkat keamanan IP, yang umumnya digunakan untuk pengawasan video. Baca selengkapnya tentang profil ONVIF di sini. Demo ini membantu Anda mulai menggunakan Akri untuk menemukan kamera IP melalui protokol ONVIF dan menggunakannya melalui broker video yang memungkinkan Anda untuk mengonsumsi rekaman dari kamera dan menampilkannya dalam aplikasi web.

Diagram yang menunjukkan alur demo Akri ONVIF.

Prasyarat

  • Penyebaran mesin tunggal atau penyebaran penuh AKS Edge Essentials aktif dan berjalan (jika Anda menggunakan kamera IP ONVIF nyata, Anda harus membuat penyebaran penuh dengan sakelar eksternal).
  • Akri hanya berfungsi di Linux: gunakan simpul Linux untuk latihan ini.
  • Kamera IP ONVIF tersambung ke jaringan yang sama dengan kluster sakelar eksternal Anda, atau kontainer ONVIF tiruan yang berjalan (langkah-langkah penyebaran sebagai berikut).

Catatan

Contoh broker ONVIF saat ini tidak mendukung koneksi ke kamera yang memerlukan autentikasi. Untuk menjalankan demo ini, nonaktifkan autentikasi pada kamera ONVIF Anda.

Kontainer ONVIF Tiruan

Jika Anda tidak memiliki kamera IP ONVIF, Anda dapat menggunakan kontainer ONVIF tiruan kami untuk latihan ini. Kontainer tiruan berfungsi pada satu komputer atau penyebaran penuh.

  1. (Opsional) Jika Anda ingin menyiapkan umpan video RTSP kustom untuk kontainer ONVIF Anda, simpan video mp4 Anda (berfungsi paling baik jika kualitasnya adalah SD daripada HD), dan salin file dari direktori komputer host Anda ke simpul Linux Anda menggunakan perintah berikut (pastikan untuk mengganti direktori komputer host dan nama file video yang sesuai):

    Copy-AksEdgeNodeFile -FromFile C:\Users\WinIotUser\Downloads\sample.mp4 -toFile /home/aksedge-user/sample.mp4 -PushFile
    
  2. Buka file YAML kosong dan salin/tempel konten berikut. Pastikan untuk mengganti nilai setelah /mnt/ dengan nama file video Anda di bawah MP4FILE. Simpan file sebagai onvif-mock.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: onvif-camera-mocking
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: onvif-camera-mocking
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
      minReadySeconds: 5    
      template:
        metadata:
          labels:
            app: onvif-camera-mocking
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-front
            image: winiotsaleskit.azurecr.io/onvif-camera-mocking:latest
            ports:
            - containerPort: 8554
            - containerPort: 1000
            - containerPort: 3702
            env:
            - name: INTERFACE
              value: "eth0"
            - name: DIRECTORY
              value: "/onvif-camera-mock"
            - name: MP4FILE
              value: /mnt/sample.mp4 
            volumeMounts:
            - name: sample-volume
              mountPath: /mnt
          volumes:
          - name: sample-volume
            hostPath:
              path: /home/aksedge-user
              type: Directory
    
  3. Terapkan YAML dan pastikan pod berjalan:

    kubectl apply -f onvif-mock.yaml
    kubectl get pods
    
  4. Untuk mengaktifkan aturan IP agar kamera ONVIF tiruan ini ditemukan:

    • Jika CNI Anda adalah Flannel:

      Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip route add 239.255.255.250/32 dev cni0"
      
    • Jika CNI Anda adalah Calico:

      1. Temukan IP kontainer ONVIF tiruan:

        kubectl get pods -o wide
        
      2. Temukan nama antarmuka jaringan yang cocok dengan IP pod ONVIF (yaitu cali909b8c65537):

        Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "route"
        
      3. Sekarang aktifkan penemuan ONVIF:

        Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip route add 239.255.255.250/32 dev <insert interface name>"
        
    • Selain itu, jika Anda menjalankan penyebaran penuh dengan sakelar eksternal, aktifkan dport 3702 dan simpan tabel IP:

      Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo iptables -A INPUT -p udp --dport 3702 -j ACCEPT"
      Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo sed -i '/-A OUTPUT -j ACCEPT/i-A INPUT -p udp -m udp --dport 3702 -j ACCEPT' /etc/systemd/scripts/ip4save"
      

Sekarang Anda siap untuk menjalankan Akri dan menemukan kamera ONVIF tiruan.

Jalankan Akri

  1. Tambahkan bagan Akri Helm jika Anda belum:

    helm repo add akri-helm-charts https://project-akri.github.io/akri/
    

    Jika sebelumnya Anda telah menambahkan bagan helm Akri, perbarui repositori Anda untuk build terbaru:

    helm repo update
    
  2. Instal Akri menggunakan Helm. Saat menginstal Akri, tentukan bahwa Anda ingin menyebarkan handler penemuan ONVIF dengan mengatur nilai onvif.discovery.enabled=truehelm . Selain itu, tentukan bahwa Anda ingin menyebarkan broker video ONVIF:

    helm install akri akri-helm-charts/akri `
     --set onvif.discovery.enabled=true `
     --set onvif.configuration.enabled=true `
     --set onvif.configuration.capacity=2 `
     --set onvif.configuration.brokerPod.image.repository='ghcr.io/project-akri/akri/onvif-video-broker' `
     --set onvif.configuration.brokerPod.image.tag='latest'
    

    Pelajari selengkapnya tentang pengaturan konfigurasi ONVIF di sini.

Buka port WS-Discovery

Agar kluster AKS Edge Essentials menemukan kamera Anda, buka port untuk WS-Discovery (Web Services Dynamic Discovery), yang merupakan protokol penemuan multicast yang beroperasi melalui port 3702TCP dan UDP .

  1. Jalankan perintah berikut untuk membuka sport 3702 dalam simpul Linux dan simpan tabel IP:

    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo iptables -A INPUT -p udp --sport 3702 -j ACCEPT"
    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo sed -i '/-A OUTPUT -j ACCEPT/i-A INPUT -p udp -m udp --sport 3702 -j ACCEPT' /etc/systemd/scripts/ip4save"
    
  2. Verifikasi bahwa Akri sekarang dapat menemukan kamera Anda. Anda akan melihat satu instans Akri untuk kamera ONVIF Anda:

    kubectl get akrii
    

    Cuplikan layar memperlihatkan instans Akri untuk kamera ONVIF yang ditemukan.

Menyebarkan aplikasi web streaming video

  1. Buka file YAML kosong dan salin/tempel konten berikut ke dalam file:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: akri-video-streaming-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: akri-video-streaming-app
      template:
        metadata:
          labels:
            app: akri-video-streaming-app
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          serviceAccountName: akri-video-streaming-app-sa
          containers:
          - name: akri-video-streaming-app
            image: ghcr.io/project-akri/akri/video-streaming-app:latest-dev
            imagePullPolicy: Always
            env:
            - name: CONFIGURATION_NAME
              value: akri-onvif
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: akri-video-streaming-app
      namespace: default
      labels:
        app: akri-video-streaming-app
    spec:
      selector:
        app: akri-video-streaming-app
      ports:
      - name: http
        port: 80
        targetPort: 5000
      type: NodePort
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: akri-video-streaming-app-sa
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: akri-video-streaming-app-role
    rules:
    - apiGroups: [""]
      resources: ["services"]
      verbs: ["list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: akri-video-streaming-app-binding
    roleRef:
      apiGroup: ""
      kind: ClusterRole
      name: akri-video-streaming-app-role
    subjects:
      - kind: ServiceAccount
        name: akri-video-streaming-app-sa
        namespace: default
    
  2. Simpan file sebagai akri-video-streaming-app.yaml.

  3. Di jendela PowerShell Anda, ubah direktori ke lokasi file akri-video-straming-app.yaml Anda dan sebarkan ke kluster Anda:

    kubectl apply -f akri-video-streaming-app.yaml
    
  4. Pastikan semua pod Anda aktif dan berjalan:

    Cuplikan layar yang menunjukkan pod Akri dan pod aplikasi video sedang berjalan.

  5. Temukan IP simpul Linux Anda dan port layanan aplikasi web Anda:

    Get-AksEdgeNodeAddr
    
    kubectl get svc
    

    Cuplikan layar memperlihatkan alamat node dan port layanan aplikasi web.

  6. Sekarang Anda dapat melihat rekaman video dengan menavigasi ke aplikasi web Anda, yaitu <NODE IP>:<PORT OF SERVICE>:

    Cuplikan layar memperlihatkan rekaman livestream dari kamera IP yang ditampilkan di aplikasi web.

Membersihkan

  1. Hapus aplikasi web streaming video:

    kubectl delete -f akri-video-streaming-app.yaml
    
  2. Hapus instalan Akri dari kluster Anda:

    helm delete akri
    
  3. (Opsional) Jika Anda menggunakan kamera ONVIF tiruan, hapus penyebaran:

    kubectl delete -f onvif-mock.yaml
    

Langkah berikutnya

Gambaran umum AKS Edge Essentials