Files
onvif-go/examples/demo.sh
T

144 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
# Go ONVIF Library Demo Script
# This script demonstrates the capabilities of the Go ONVIF library
echo "🎥 Go ONVIF Library - Complete Implementation Demo"
echo "=================================================="
echo
echo "📁 Project Structure:"
echo "├── Core Library (client.go, types.go, device.go, media.go, ptz.go, imaging.go)"
echo "├── SOAP Client (soap/soap.go) with WS-Security authentication"
echo "├── Discovery Service (discovery/discovery.go) for network camera detection"
echo "├── Examples (examples/*) showing various use cases"
echo "├── CLI Tools:"
echo "│ ├── 🔧 onvif-cli - Comprehensive interactive tool"
echo "│ └── ⚡ onvif-quick - Simple quick-start tool"
echo "└── Tests with mock ONVIF server"
echo
echo "🚀 Available Commands:"
echo
echo "1. Build & Test:"
echo " make build # Build both CLI tools"
echo " make test # Run test suite"
echo " make examples # Build example programs"
echo " make build-all # Build for multiple platforms"
echo
echo "2. CLI Tools:"
echo " ./bin/onvif-cli # Interactive comprehensive tool"
echo " ./bin/onvif-quick # Simple quick-start tool"
echo
echo "3. Library Usage Example:"
cat << 'EOF'
```go
package main
import (
"context"
"fmt"
"time"
"github.com/0x524A/onvif-go"
)
func main() {
// Create client with credentials
client, err := onvif.NewClient(
"http://192.168.1.100/onvif/device_service",
onvif.WithCredentials("admin", "password"),
onvif.WithTimeout(30*time.Second),
)
if err != nil {
panic(err)
}
ctx := context.Background()
// Get device information
info, err := client.GetDeviceInformation(ctx)
if err != nil {
panic(err)
}
fmt.Printf("Camera: %s %s\n", info.Manufacturer, info.Model)
// Initialize for additional services
client.Initialize(ctx)
// Get media profiles
profiles, err := client.GetProfiles(ctx)
if err != nil {
panic(err)
}
// Get stream URI
streamURI, err := client.GetStreamURI(ctx, profiles[0].Token)
if err == nil {
fmt.Printf("Stream: %s\n", streamURI.URI)
}
// PTZ Control (if supported)
velocity := &onvif.PTZSpeed{
PanTilt: &onvif.Vector2D{X: 0.5, Y: 0.0},
}
timeout := "PT5S"
client.ContinuousMove(ctx, profiles[0].Token, velocity, &timeout)
}
```
EOF
echo
echo "🌟 Key Features:"
echo "✅ Complete ONVIF Profile S implementation"
echo "✅ WS-Discovery for automatic camera detection"
echo "✅ WS-Security authentication with digest"
echo "✅ PTZ control (pan, tilt, zoom)"
echo "✅ Media profile management"
echo "✅ Imaging settings control"
echo "✅ Device information and capabilities"
echo "✅ Stream URI generation (RTSP/HTTP)"
echo "✅ Context-based timeout and cancellation"
echo "✅ Comprehensive error handling"
echo "✅ Thread-safe credential management"
echo "✅ Interactive CLI tools"
echo "✅ Docker support"
echo "✅ Cross-platform builds"
echo "✅ Extensive test coverage"
echo
echo "🛠️ Development Features:"
echo "✅ Modern Go 1.21+ with generics support"
echo "✅ Functional options pattern"
echo "✅ Comprehensive type definitions"
echo "✅ Mock server for testing"
echo "✅ Benchmark tests"
echo "✅ CI/CD ready"
echo "✅ Docker containerization"
echo "✅ Multi-platform builds"
echo
echo "📋 Quick Start:"
echo "1. go mod tidy # Install dependencies"
echo "2. make build # Build CLI tools"
echo "3. ./bin/onvif-quick # Run quick tool"
echo "4. ./bin/onvif-cli # Run comprehensive tool"
echo
echo "🔗 For real camera testing:"
echo "- Set up a test camera with known IP/credentials"
echo "- Run discovery to find cameras: ./bin/onvif-quick"
echo "- Use device info to verify connection"
echo "- Test PTZ movements if camera supports it"
echo "- Get stream URLs for media playback"
echo
echo "🎯 This implementation provides a production-ready,"
echo " comprehensive ONVIF library with full CLI tooling!"
echo
echo "Run 'make help' for all available commands."