Why I Built An Open-Source ONVIF Module for Wowza Streaming Engine
Automatically detect and connect IP cameras in Wowza with ONVIF. Explore this open-source module, how it works, and how to contribute.
An ONVIF auto-discovery module automatically detects compatible IP cameras on a network, retrieves their stream URLs, and configures them without manual setup. Manually connecting IP cameras to Wowza Streaming Engine is traditionally a five-step process that involves:
- Finding the camera’s IP address
- Connecting to the camera’s UI
- Finding the RTSP URL, which is usually a long string of random characters
- Creating the stream file in Wowza Streaming Engine Manager
- Pasting the URL, and connecting
That process can take up to 30 minutes per camera. With each camera having a unique user interface, plus typing in IP addresses and stream names full of mixed-case random strings, there’s a chance something small can cause a connection failure. Now multiply that by 50 cameras, or 500.
I built an ONVIF auto-discovery module for Wowza Streaming Engine to eliminate that process entirely. Connect a camera into the network, and Wowza Streaming Engine finds it, configures it, and starts pulling/streaming the video. No human, no monitor, and no keyboard required. The goal of this module, and why I built it as a public GitHub repository, is for the community to help make it work with as many cameras as possible

How The ONVIF Module Works: Step-by-Step
ONVIF is the standard way IP cameras and other network devices announce themselves for auto-discovery and configuration. There are several versions out there, but for this module we targeted version 2.0 and a specific profile called Profile S that applies to IP cameras.
Here’s how it works with this module:
- Wowza Streaming Engine sends out a discovery request on the network, essentially asking, “Is anybody out there?”
- ONVIF-compatible devices respond with information about themselves, including:
- What type of device they are
- What features the device supports
- The IP address
- Other metadata
- Wowza Streaming Engine filters those responses, identifies the IP cameras via Profile S, automatically creates the stream file, and connects
So, once the IP camera is plugged in, it can start broadcasting without anyone touching a configuration screen. And, the entire process is headless. In an environment where your server is in one room and your cameras are out on a factory floor, or spread across a campus, or mounted on transit vehicles where you may not have convenient access to a workstation, this module means you just plug in cameras, and they get picked up. If you need to replace a camera, take the old one out, put the new one in, and it gets automatically configured.
What The Wowza Streaming Engine ONVIF Module Does (and Doesn’t Do)
To be clear, this ONVIF module for Wowza Streaming Engine handles auto-discovery and retrieval of configuration. It finds ONVIF-compatible cameras on the network and sets up the stream files in Engine so video starts flowing. It does not currently handle PTZ (Pan-Tilt-Zoom) control.
PTZ is part of the broader ONVIF spec under a separate profile, and it’s something I’d like to add as a future extension. The ONVIF spec has profiles and add-ons that cover PTZ and other advanced capabilities. Extending the module to support those is our next step, and exactly the kind of thing we are hoping the developer community can help us build.
The Reality of Working with ONVIF in the Wild
We’ve tested five different cameras with this module so far. Most were fully ONVIF compliant and had no issues, but one of them (an Amcrest model) didn’t properly honor daylight savings time. Because some of the ONVIF authentication mechanisms require a timestamp, authentication fails when the camera’s clock is off by an hour.
In the Amcrest case, what we saw was an authentication failure. It took some digging to realize the root cause was a one-hour timestamp discrepancy from the daylight savings issue. That’s the nature of working with a protocol where implementations vary across manufacturers and firmware versions.
We added a module property to adjust the timestamp by one hour as a simple fix. But this is the kind of edge case you only discover through testing against real hardware. And there will inevitably be many more cases like this. The cheaper the camera, the less likely it is to be fully compliant. This is exactly why I wanted the module to live in a public GitHub repository.
How To Contribute To This Open Source ONVIF Module
The way this module gets better is by people running it against their own hardware, finding the edge cases, and contributing fixes. The contribution process is a standard open-source workflow:
- Create a branch in the repo
- Make your updates to handle whatever quirk you’ve found
- Submit a pull request
Someone at Wowza will review and approve your contribution, and merge the fix back into the main code for everyone to benefit from. We encourage anyone who works with IP cameras to help make this module the best it can be. That could be for unique camera profiles, or to extend the module to handle PTZ commands through the ONVIF PTZ profile. The repository includes a list of devices we’ve tested and verified, so you can see what’s been confirmed working and where the gaps are.
Check out the GitHub repo, try it with your cameras, and if you find something that doesn’t work quite right, help us make it better.
How This ONVIF Module Simplifies IP Camera Workflows
Not everyone has the technical background to navigate camera UIs and manually build stream files. Distributed locations like retail shopping centers or traffic camera networks need cameras to work without sending a technician to manually configure each one. The benefits of this ONVIF module scale with the size and dynamism of your camera deployment:
- Dynamic environments
- Cameras are added and removed frequently
- Examples include transit systems and construction sites
- Headless deployments
- No convenient access to a workstation
- Examples include server rooms managing cameras on a factory floor, remote sites with no on-site IT staff, and distributed retail locations
- Large fleets
- Manual configuration can’t scale, and the time saved per camera is crucial
- Examples include municipal surveillance networks, department of transportation camera systems, and campus-wide security deployments
- Small-scale setups
- Dedicated IT staff may not be available
- Examples include hotels, retail stores, or private homes with a handful of cameras
Try It Out
The ONVIF auto-discovery module is available now on GitHub. The discovery and configuration piece is solid, but there’s definitely room to grow. Clone the repo, build it against your Wowza Streaming Engine instance, and test it with your cameras. If you hit an edge case, you’ve found something the community can fix together. Add PTZ control, additional ONVIF profiles, or broader camera compatibility. Help us build the most robust ONVIF module we can, so everyone can benefit. See how Wowza Streaming Engine fits your IP camera workflow, contact a Wowza streaming expert for a demo.
FAQs:
What is ONVIF and how does it work?
ONVIF is an open standard that IP cameras and other network devices use for auto-discovery and configuration. When a device on the network sends out a discovery request, ONVIF-compatible devices respond with information about themselves, including device type, supported features, IP address, and other metadata. This allows software like Wowza Streaming Engine to automatically find and connect to cameras without manual configuration. ONVIF has several versions and profiles that cover different device types and capabilities.
What is ONVIF Profile S?
Profile S is the ONVIF profile specifically designed for IP cameras and video streaming devices. When multiple types of network devices respond to an ONVIF discovery request, including network storage devices and other IoT hardware, Profile S is how software filters the responses to identify which devices are IP cameras that support video streaming over RTSP. The Wowza Streaming Engine ONVIF module uses Profile S to distinguish cameras from other ONVIF-compatible devices on the network.
Can Wowza auto-detect IP cameras?
Yes. With the open-source ONVIF module installed, Wowza Streaming Engine can send discovery requests onto the network, identify ONVIF-compatible IP cameras via Profile S, and automatically create the stream files needed to connect and start pulling video. The entire process is headless, so no monitor, keyboard, or manual intervention is required. When a new camera is plugged into the network, or an old one is swapped out, Wowza Streaming Engine detects and configures it automatically.
How do I find an RTSP URL for my camera?
Without auto-discovery, finding a camera’s RTSP URL is a manual process. You need to determine the camera’s IP address on your network (which can be difficult on DHCP networks where addresses are dynamically assigned), connect to the camera’s built-in UI, and navigate through its menus to locate the streaming URL. These URLs are typically long strings of mixed-case random characters, making them easy to mistype. The Wowza Streaming Engine ONVIF module eliminates this step entirely by retrieving the RTSP URL directly from the camera’s ONVIF response and writing it into the stream file automatically.
Does ONVIF support PTZ control?
Yes, the ONVIF standard includes PTZ (Pan-Tilt-Zoom) control under a separate profile from the discovery and streaming profile (Profile S). However, the current version of the Wowza Streaming Engine ONVIF module focuses on auto-discovery and configuration only. PTZ support is planned as a future extension and is one of the capabilities the community can help contribute to the public GitHub repository.
Why do some ONVIF cameras fail authentication?
Camera manufacturers implement the ONVIF spec with varying degrees of compliance. Some ONVIF authentication mechanisms require a timestamp, and if a camera’s internal clock is off, the mismatch causes authentication to fail. The Wowza Streaming Engine ONVIF module includes a configurable property to adjust for timestamp offsets, and the public GitHub repository tracks which cameras have been tested and any known quirks.
