HTTP üzerinden bir Hi351x IP kameradan tam çözünürlüklü JPEG anlık görüntüsü nasıl alınır

Hi351x ailesi kameralar (Hi3510/Hi3516 ve uyumlu SoC’ler, hfonvif/1.0 ONVIF yığını — IPCamera olarak tanımlanan ve rtsp://<ip>:554/stream_0/stream_1 üzerinden yayın yapan tür), RTSP akışını kendiniz çözmeden, düz HTTP üzerinden tam çözünürlüklü bir JPEG durağan görüntüsü sunabilir.

Anlık görüntü URL’si

snapshot.sh
curl -o snapshot.jpg "http://10.91.1.207/action/cgi_images"

Bu, kameranın ana akış çözünürlüğünde (ör. 1920×1080) Content-Type: image/jpeg döndürür. 22.010.30.6_MAIN_V44 ürün yazılımında çalıştığı doğrulandı.

Uç nokta diğer yollarda {"code":208,...} gibi bir JSON hatası döndürürse, doğru yolun /action/cgi_images olduğunu unutmayın — /snap.jpg, /webcapture.jpg veya /tmpfs/auto.jpg değil (bunların hepsi bu ailede 404 döndürür).

ONVIF (port 8080) üzerinden keşfetme

Aynı URI, ONVIF GetSnapshotUri tarafından duyurulur. Farklı bir ürün yazılımında veya yolun değiştiği durumlarda uç noktayı doğrulamak için kullanışlıdır:

onvif_snapshot_uri.sh
# 1) Media hizmetinin XAddr'sini bulun
curl -s -X POST -H "Content-Type: application/soap+xml" \
  --data '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body><GetCapabilities xmlns="http://www.onvif.org/ver10/device/wsdl"><Category>Media</Category></GetCapabilities></s:Body></s:Envelope>' \
  http://10.91.1.207:8080/onvif/device_service | grep -o '<tt:XAddr>[^<]*'

# 2) Profilleri listeleyin → profil belirtecini alın (örn. profile0)
curl -s -X POST -H "Content-Type: application/soap+xml" \
  --data '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body><GetProfiles xmlns="http://www.onvif.org/ver10/media/wsdl"/></s:Body></s:Envelope>' \
  http://10.91.1.207:8080/onvif/Media | grep -o 'token="profile[0-9]*"'

# 3) GetSnapshotUri
curl -s -X POST -H "Content-Type: application/soap+xml" \
  --data '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body><GetSnapshotUri xmlns="http://www.onvif.org/ver10/media/wsdl"><ProfileToken>profile0</ProfileToken></GetSnapshotUri></s:Body></s:Envelope>' \
  http://10.91.1.207:8080/onvif/Media | grep -o '<tt:Uri>[^<]*'

Beklenen çıktı:

output.txt
http://10.91.1.207:80/action/cgi_images

Python örneği

snapshot.py
import urllib.request

def take_snapshot(ip, out_path="snapshot.jpg", timeout=10):
    url = f"http://{ip}/action/cgi_images"
    data = urllib.request.urlopen(url, timeout=timeout).read()
    if not data.startswith(b"\xff\xd8"):
        raise ValueError(f"not a JPEG ({len(data)} bytes)")
    with open(out_path, "wb") as f:
        f.write(data)
    return out_path

take_snapshot("10.91.1.207")

Kamera yapılandırması

Kameranın akışlarını, kodlayıcılarını, çözünürlüğünü, GOP’unu vb. yapılandırmak için Hi351x-Camera-CLI kullanın — ağda bu kameraları tarayan, tüm yapılandırmalarını döken ve tek cihazlarda veya tüm alt ağlarda değişiklikleri (setVencConf vb.) uygulayan bir CLI aracıdır.


Check out similar posts by category: IP-Cameras