refactor: rename project from go-onvif to onvif-go
- Updated project name in documentation and metadata to reflect new branding. - Removed outdated documentation files related to CLI and network interface summary. - Consolidated implementation summaries for network interface discovery and ONVIF server. - Updated sonar project properties to align with new project name. - Ensured backward compatibility and comprehensive testing across all changes.
This commit is contained in:
@@ -1,290 +0,0 @@
|
||||
# ONVIF Server Implementation Summary
|
||||
|
||||
## Overview
|
||||
|
||||
Successfully implemented a complete ONVIF server that simulates multi-lens IP cameras with full support for the ONVIF protocol.
|
||||
|
||||
## What Was Created
|
||||
|
||||
### 1. Core Server Library (`server/`)
|
||||
|
||||
#### `server/types.go`
|
||||
- **Configuration Types**: Complete server configuration with support for multiple profiles
|
||||
- **Device Information**: Manufacturer, model, firmware, serial number
|
||||
- **Profile Configuration**: Video/audio sources, encoders, PTZ, snapshots
|
||||
- **State Management**: PTZ state, imaging state tracking
|
||||
- **Default Configuration**: Pre-configured multi-lens camera with 3 profiles
|
||||
|
||||
#### `server/server.go`
|
||||
- **Server Implementation**: Main HTTP server with SOAP endpoint routing
|
||||
- **Service Registration**: Automatic registration of Device, Media, PTZ, and Imaging services
|
||||
- **Stream Management**: RTSP URI generation for each profile
|
||||
- **State Initialization**: PTZ and imaging state setup for each profile
|
||||
- **Lifecycle Management**: Start, stop, graceful shutdown
|
||||
|
||||
#### `server/soap/handler.go`
|
||||
- **SOAP Message Handling**: Complete SOAP envelope parsing and response generation
|
||||
- **Authentication**: WS-Security UsernameToken with password digest
|
||||
- **Action Routing**: Automatic routing of SOAP messages to appropriate handlers
|
||||
- **Fault Handling**: Proper SOAP fault generation for errors
|
||||
|
||||
#### `server/device.go`
|
||||
- **GetDeviceInformation**: Return device manufacturer, model, firmware
|
||||
- **GetCapabilities**: Return service capabilities and endpoints
|
||||
- **GetSystemDateAndTime**: Return system time in ONVIF format
|
||||
- **GetServices**: List all available ONVIF services
|
||||
- **SystemReboot**: Simulated reboot response
|
||||
|
||||
#### `server/media.go`
|
||||
- **GetProfiles**: Return all configured camera profiles
|
||||
- **GetStreamURI**: Generate RTSP stream URIs for each profile
|
||||
- **GetSnapshotURI**: Generate HTTP snapshot URIs
|
||||
- **GetVideoSources**: List all video sources
|
||||
- Supports multiple profiles with different resolutions and encodings
|
||||
|
||||
#### `server/ptz.go`
|
||||
- **ContinuousMove**: Continuous pan/tilt/zoom movement
|
||||
- **AbsoluteMove**: Move to absolute position with position tracking
|
||||
- **RelativeMove**: Move relative to current position
|
||||
- **Stop**: Stop PTZ movement
|
||||
- **GetStatus**: Get current PTZ position and movement status
|
||||
- **GetPresets**: List all PTZ presets
|
||||
- **GotoPreset**: Move to preset position
|
||||
- **SetPreset**: Create new presets (implemented)
|
||||
|
||||
#### `server/imaging.go`
|
||||
- **GetImagingSettings**: Get all imaging parameters
|
||||
- **SetImagingSettings**: Update imaging parameters
|
||||
- **GetOptions**: Get available imaging options/ranges
|
||||
- **Move**: Focus movement control
|
||||
- Full support for:
|
||||
- Brightness, Contrast, Saturation, Sharpness
|
||||
- Exposure (Auto/Manual with gain control)
|
||||
- Focus (Auto/Manual)
|
||||
- White Balance (Auto/Manual)
|
||||
- Wide Dynamic Range (WDR)
|
||||
- IR Cut Filter
|
||||
- Backlight Compensation
|
||||
|
||||
### 2. CLI Tool (`cmd/onvif-server/`)
|
||||
|
||||
#### Features:
|
||||
- **Flexible Configuration**: Command-line flags for all settings
|
||||
- **Multiple Profiles**: Support 1-10 camera profiles
|
||||
- **Custom Device Info**: Set manufacturer, model, firmware, serial
|
||||
- **Service Control**: Enable/disable PTZ, Imaging, Events
|
||||
- **Info Display**: Show configuration without starting server
|
||||
- **Version Display**: Show application version
|
||||
|
||||
#### Command-Line Options:
|
||||
```bash
|
||||
-host Server host (default: 0.0.0.0)
|
||||
-port Server port (default: 8080)
|
||||
-username Auth username (default: admin)
|
||||
-password Auth password (default: admin)
|
||||
-manufacturer Device manufacturer
|
||||
-model Device model
|
||||
-firmware Firmware version
|
||||
-serial Serial number
|
||||
-profiles Number of profiles (1-10, default: 3)
|
||||
-ptz Enable PTZ (default: true)
|
||||
-imaging Enable Imaging (default: true)
|
||||
-events Enable Events (default: false)
|
||||
-info Show info and exit
|
||||
-version Show version and exit
|
||||
```
|
||||
|
||||
### 3. Examples
|
||||
|
||||
#### `examples/onvif-server/`
|
||||
Complete multi-lens camera example with:
|
||||
- 4 different camera profiles
|
||||
- 4K main camera with 10x zoom PTZ
|
||||
- Wide-angle camera for overview
|
||||
- Telephoto camera with 30x zoom
|
||||
- Low-light night vision camera
|
||||
- Custom presets for each PTZ camera
|
||||
|
||||
#### `examples/test-server/`
|
||||
Comprehensive test suite that:
|
||||
- Starts ONVIF server
|
||||
- Creates ONVIF client
|
||||
- Tests all major operations
|
||||
- Verifies PTZ control
|
||||
- Checks imaging settings
|
||||
|
||||
#### `examples/simple-server/`
|
||||
Minimal server example for quick testing
|
||||
|
||||
### 4. Documentation
|
||||
|
||||
#### `server/README.md`
|
||||
Complete documentation including:
|
||||
- Feature overview
|
||||
- Installation instructions
|
||||
- Quick start guide
|
||||
- CLI usage examples
|
||||
- Library API examples
|
||||
- Use cases
|
||||
- Architecture overview
|
||||
- Roadmap
|
||||
|
||||
#### Updated main `README.md`
|
||||
- Added ONVIF Server section
|
||||
- Updated feature list
|
||||
- Added server examples
|
||||
- Cross-referenced documentation
|
||||
|
||||
## Key Features
|
||||
|
||||
### Multi-Lens Camera Support
|
||||
✅ Up to 10 independent camera profiles
|
||||
✅ Different resolutions per profile (480p to 4K)
|
||||
✅ Different frame rates (25, 30, 60 fps)
|
||||
✅ Different encodings (H.264, H.265, MPEG4, JPEG)
|
||||
✅ Independent PTZ control per profile
|
||||
✅ Separate imaging settings per video source
|
||||
|
||||
### Complete ONVIF Implementation
|
||||
✅ Device Service (GetDeviceInformation, GetCapabilities, etc.)
|
||||
✅ Media Service (GetProfiles, GetStreamURI, GetSnapshotURI)
|
||||
✅ PTZ Service (Move, Stop, Presets, Status)
|
||||
✅ Imaging Service (Settings, Options, Focus control)
|
||||
✅ WS-Security Authentication
|
||||
✅ Proper SOAP message handling
|
||||
|
||||
### PTZ Simulation
|
||||
✅ Continuous movement with velocity control
|
||||
✅ Absolute positioning with coordinate tracking
|
||||
✅ Relative movement
|
||||
✅ Preset positions (save/recall)
|
||||
✅ Real-time status reporting
|
||||
✅ Configurable pan/tilt/zoom ranges
|
||||
✅ Movement state tracking
|
||||
|
||||
### Imaging Control
|
||||
✅ Brightness, Contrast, Saturation, Sharpness
|
||||
✅ Exposure control (Auto/Manual)
|
||||
✅ Focus control (Auto/Manual)
|
||||
✅ White balance
|
||||
✅ Wide Dynamic Range
|
||||
✅ IR Cut Filter
|
||||
✅ Backlight compensation
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
server/
|
||||
├── types.go # Configuration and data types
|
||||
├── server.go # Main server implementation
|
||||
├── device.go # Device service handlers
|
||||
├── media.go # Media service handlers
|
||||
├── ptz.go # PTZ service handlers
|
||||
├── imaging.go # Imaging service handlers
|
||||
├── soap/
|
||||
│ └── handler.go # SOAP message handling
|
||||
└── README.md # Documentation
|
||||
|
||||
cmd/
|
||||
└── onvif-server/
|
||||
└── main.go # CLI application
|
||||
|
||||
examples/
|
||||
├── onvif-server/ # Multi-lens example
|
||||
├── test-server/ # Integration test
|
||||
└── simple-server/ # Minimal example
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Start Server with Defaults
|
||||
```bash
|
||||
onvif-server
|
||||
```
|
||||
|
||||
### Custom Configuration
|
||||
```bash
|
||||
onvif-server -profiles 5 -username admin -password mypass -port 9000
|
||||
```
|
||||
|
||||
### Library Usage
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/0x524a/onvif-go/server"
|
||||
)
|
||||
|
||||
func main() {
|
||||
srv, _ := server.New(server.DefaultConfig())
|
||||
srv.Start(context.Background())
|
||||
}
|
||||
```
|
||||
|
||||
### Test with ONVIF Client
|
||||
```go
|
||||
client, _ := onvif.NewClient(
|
||||
"http://localhost:8080/onvif/device_service",
|
||||
onvif.WithCredentials("admin", "admin"),
|
||||
)
|
||||
|
||||
profiles, _ := client.GetProfiles(ctx)
|
||||
for _, profile := range profiles {
|
||||
streamURI, _ := client.GetStreamURI(ctx, profile.Token)
|
||||
fmt.Println(streamURI.URI)
|
||||
}
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
The implementation has been built and compiles successfully:
|
||||
- ✅ All server packages build without errors
|
||||
- ✅ CLI tool builds and runs
|
||||
- ✅ Help and version flags work correctly
|
||||
- ✅ Info display shows configuration properly
|
||||
- ✅ Examples build successfully
|
||||
|
||||
## Use Cases
|
||||
|
||||
1. **Testing & Development**
|
||||
- Test ONVIF client implementations
|
||||
- Develop VMS systems without hardware
|
||||
- Integration testing in CI/CD pipelines
|
||||
|
||||
2. **Education & Learning**
|
||||
- Understand ONVIF protocol
|
||||
- Study IP camera architectures
|
||||
- Learn SOAP web services
|
||||
|
||||
3. **Demonstrations**
|
||||
- Demo camera management software
|
||||
- Trade show presentations
|
||||
- POC development
|
||||
|
||||
4. **Research & Prototyping**
|
||||
- Computer vision research
|
||||
- Video analytics development
|
||||
- AI/ML model training
|
||||
|
||||
## Next Steps & Roadmap
|
||||
|
||||
- [ ] Add actual RTSP streaming with test patterns
|
||||
- [ ] Implement Events service
|
||||
- [ ] Add WS-Discovery for automatic camera detection
|
||||
- [ ] Create web UI for configuration
|
||||
- [ ] Add Docker support
|
||||
- [ ] Support configuration files (YAML/JSON)
|
||||
- [ ] Add TLS/HTTPS support
|
||||
- [ ] Recording service implementation
|
||||
- [ ] Analytics service support
|
||||
|
||||
## Conclusion
|
||||
|
||||
The ONVIF server implementation is complete and production-ready for:
|
||||
- Simulating multi-lens IP cameras
|
||||
- Testing ONVIF clients
|
||||
- Development and prototyping
|
||||
- Educational purposes
|
||||
|
||||
It provides a solid foundation that can be extended with actual video streaming, events, and additional services as needed.
|
||||
Reference in New Issue
Block a user