144 lines
3.7 KiB
Go
144 lines
3.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/0x524a/onvif-go"
|
|
)
|
|
|
|
func main() {
|
|
// Camera connection details
|
|
endpoint := "http://192.168.1.100/onvif/device_service"
|
|
username := "admin"
|
|
password := "password"
|
|
|
|
fmt.Println("Connecting to ONVIF camera...")
|
|
|
|
// Create a new ONVIF client
|
|
client, err := onvif.NewClient(
|
|
endpoint,
|
|
onvif.WithCredentials(username, password),
|
|
onvif.WithTimeout(30*time.Second),
|
|
)
|
|
if err != nil {
|
|
log.Fatalf("Failed to create client: %v", err)
|
|
}
|
|
|
|
ctx := context.Background()
|
|
|
|
// Initialize client
|
|
if err := client.Initialize(ctx); err != nil {
|
|
log.Fatalf("Failed to initialize client: %v", err)
|
|
}
|
|
|
|
// Get profiles
|
|
profiles, err := client.GetProfiles(ctx)
|
|
if err != nil {
|
|
log.Fatalf("Failed to get profiles: %v", err)
|
|
}
|
|
|
|
if len(profiles) == 0 {
|
|
log.Fatal("No profiles found")
|
|
}
|
|
|
|
// Get video source token from profile
|
|
profile := profiles[0]
|
|
if profile.VideoSourceConfiguration == nil {
|
|
log.Fatal("No video source configuration found")
|
|
}
|
|
|
|
videoSourceToken := profile.VideoSourceConfiguration.SourceToken
|
|
fmt.Printf("Using video source: %s\n\n", videoSourceToken)
|
|
|
|
// Get current imaging settings
|
|
fmt.Println("Getting current imaging settings...")
|
|
settings, err := client.GetImagingSettings(ctx, videoSourceToken)
|
|
if err != nil {
|
|
log.Fatalf("Failed to get imaging settings: %v", err)
|
|
}
|
|
|
|
fmt.Println("\nCurrent Imaging Settings:")
|
|
if settings.Brightness != nil {
|
|
fmt.Printf(" Brightness: %.2f\n", *settings.Brightness)
|
|
}
|
|
if settings.Contrast != nil {
|
|
fmt.Printf(" Contrast: %.2f\n", *settings.Contrast)
|
|
}
|
|
if settings.ColorSaturation != nil {
|
|
fmt.Printf(" Saturation: %.2f\n", *settings.ColorSaturation)
|
|
}
|
|
if settings.Sharpness != nil {
|
|
fmt.Printf(" Sharpness: %.2f\n", *settings.Sharpness)
|
|
}
|
|
if settings.IrCutFilter != nil {
|
|
fmt.Printf(" IR Cut Filter: %s\n", *settings.IrCutFilter)
|
|
}
|
|
|
|
if settings.Exposure != nil {
|
|
fmt.Printf(" Exposure Mode: %s\n", settings.Exposure.Mode)
|
|
if settings.Exposure.Mode == "MANUAL" {
|
|
fmt.Printf(" Exposure Time: %.2f\n", settings.Exposure.ExposureTime)
|
|
fmt.Printf(" Gain: %.2f\n", settings.Exposure.Gain)
|
|
}
|
|
}
|
|
|
|
if settings.Focus != nil {
|
|
fmt.Printf(" Focus Mode: %s\n", settings.Focus.AutoFocusMode)
|
|
}
|
|
|
|
if settings.WhiteBalance != nil {
|
|
fmt.Printf(" White Balance Mode: %s\n", settings.WhiteBalance.Mode)
|
|
}
|
|
|
|
if settings.WideDynamicRange != nil {
|
|
fmt.Printf(" WDR Mode: %s\n", settings.WideDynamicRange.Mode)
|
|
fmt.Printf(" WDR Level: %.2f\n", settings.WideDynamicRange.Level)
|
|
}
|
|
|
|
// Modify some settings
|
|
fmt.Println("\n\nModifying imaging settings...")
|
|
|
|
// Increase brightness
|
|
newBrightness := 60.0
|
|
settings.Brightness = &newBrightness
|
|
|
|
// Increase contrast
|
|
newContrast := 55.0
|
|
settings.Contrast = &newContrast
|
|
|
|
// Set to auto exposure
|
|
if settings.Exposure != nil {
|
|
settings.Exposure.Mode = "AUTO"
|
|
}
|
|
|
|
// Apply new settings
|
|
if err := client.SetImagingSettings(ctx, videoSourceToken, settings, true); err != nil {
|
|
log.Fatalf("Failed to set imaging settings: %v", err)
|
|
}
|
|
|
|
fmt.Println("Imaging settings updated successfully!")
|
|
|
|
// Verify changes
|
|
fmt.Println("\nVerifying new settings...")
|
|
updatedSettings, err := client.GetImagingSettings(ctx, videoSourceToken)
|
|
if err != nil {
|
|
log.Fatalf("Failed to get updated imaging settings: %v", err)
|
|
}
|
|
|
|
fmt.Println("\nUpdated Imaging Settings:")
|
|
if updatedSettings.Brightness != nil {
|
|
fmt.Printf(" Brightness: %.2f\n", *updatedSettings.Brightness)
|
|
}
|
|
if updatedSettings.Contrast != nil {
|
|
fmt.Printf(" Contrast: %.2f\n", *updatedSettings.Contrast)
|
|
}
|
|
if updatedSettings.Exposure != nil {
|
|
fmt.Printf(" Exposure Mode: %s\n", updatedSettings.Exposure.Mode)
|
|
}
|
|
|
|
fmt.Println("\nImaging settings demonstration complete!")
|
|
}
|