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.
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.
(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
Buka file YAML kosong dan salin/tempel konten berikut. Pastikan untuk mengganti nilai setelah
/mnt/
dengan nama file video Anda di bawahMP4FILE
. 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
Terapkan YAML dan pastikan pod berjalan:
kubectl apply -f onvif-mock.yaml kubectl get pods
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:
Temukan IP kontainer ONVIF tiruan:
kubectl get pods -o wide
Temukan nama antarmuka jaringan yang cocok dengan IP pod ONVIF (yaitu
cali909b8c65537
):Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "route"
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
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
Instal Akri menggunakan Helm. Saat menginstal Akri, tentukan bahwa Anda ingin menyebarkan handler penemuan ONVIF dengan mengatur nilai
onvif.discovery.enabled=true
helm . 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 3702
TCP dan UDP .
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"
Verifikasi bahwa Akri sekarang dapat menemukan kamera Anda. Anda akan melihat satu instans Akri untuk kamera ONVIF Anda:
kubectl get akrii
Menyebarkan aplikasi web streaming video
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
Simpan file sebagai akri-video-streaming-app.yaml.
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
Pastikan semua pod Anda aktif dan berjalan:
Temukan IP simpul Linux Anda dan port layanan aplikasi web Anda:
Get-AksEdgeNodeAddr
kubectl get svc
Sekarang Anda dapat melihat rekaman video dengan menavigasi ke aplikasi web Anda, yaitu
<NODE IP>:<PORT OF SERVICE>
:
Membersihkan
Hapus aplikasi web streaming video:
kubectl delete -f akri-video-streaming-app.yaml
Hapus instalan Akri dari kluster Anda:
helm delete akri
(Opsional) Jika Anda menggunakan kamera ONVIF tiruan, hapus penyebaran:
kubectl delete -f onvif-mock.yaml
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk