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
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:
# 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ı:
http://10.91.1.207:80/action/cgi_imagesPython örneği
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.