VideoViewerNextGen Documentation
Download the module
For perspective :For vision + perspective :
Ignition Vision Edition
Supports RTSP H264/H265 video streams, video files, webcams, or GStreamer test patterns (4K supported).
ONVIF PTZ (Pan Tilt Zoom) camera control :
- Mouse
- Buttons
- USB Joystick 🕹️🎮 (Tested on Windows OS only)
Ignition Perspective Edition
Supports RTSP H264/H265 video streams encoded to WEBRTC H264/VP8/VP9 or GStreamer test patterns.
ONVIF PTZ (Pan Tilt Zoom) camera control :
- Buttons
Starter KIT
Overview :
A video starter kit for Ignition Vision and Perspective 8.1, introduced in November 2022, supporting multiple use cases:
- A standalone video wall Ignition Vision project
- A video wall Ignition Vision Project with the choices of the cameras driven by an Ignition Perspective Project
- A video stream displayed in a standalone Ignition Perspective Project
- ⚠️Note : This is a complex solution and should not be used in production without extensive testing.
You can download example project here.
⚠️Disclaimer: This kit is primarily tested on Windows OS.
Limited testing has been done on Linux Ubuntu and macOS.
Design Principle :

Installation Guide :
1. Install Ignition 8.1.22+
2. Import the Project
3. Load the Required Modules
- Windows Installation :
-
Linux/macOS Installation :
- Install GStreamer 1.20.3 or 1.20.4
- Use Light Edition Module : Download
4. Additional Modules
Configuration :
Adjust platform settings : shared.commun.constantesCustom.PLATFORM
Configure camera settings : shared.commun.constantesCustom.VIDEO_SERVER
- ONVIF endpoint, RTSP stream credentials
- Adjust WebRTC iframe serving port
- Set the maximum number of concurrent Perspective video streams
Important Notes :
⚠️ ONVIF Camera Sync : Some cameras (e.g., Axis, IMOU) require synchronized timestamps between the camera and the control PC.
⚠️ Firewall Settings : Ensure ONVIF (port 80), RTSP (port 554), and WebRTC iframe (port 9000) are allowed.
⚠️ Localhost Testing :
- Ignition Vision : When testing on localhost, with Ignition Vision client and gateway launched on the same machine, use parameter :
- Ignition Perspective : WebRTC works only when accessed via IP address (http://IP:8088/...) and not http://localhost:8088/.
⚠️ Perspective Browser Support :
- Chrome supports H264/VP8 video streams,
- Not all H264 profiles (low, medium, high) are supported,
- WebM VP8 format is more reliable across browsers.
⚠️ Gateway CPU/RAM Load :
- Ignition Vision : the load for each stream is supported by the each vision client
- Ignition Perspective :
Each camera stream displayed in a perspective session give a CPU/memory load for the gateway and a load in the browser as well.
We can put a maximum concurrent stream limit to avoid gateway overload.
We advice to use a dedicated gateway for video stream decode/encode..
Hardware Recommendations :
Professional Solutions
- Cameras : HIK, Axis, Sony (RTSP & ONVIF PTZ support)
- Joysticks : Axis T8311 Joystick
Personal or Proof of Concept solution
- IMOU Camera (from $70) : Rex (ethernet & wifi)
- Config tools : Download
- TP-Link Tapo Camera (from $25) : Tapo C200 (wifi only)
- Windows USB Gamepad (e.g., EasySMX ESM 9100 USB)
Debugging Tools :
- ONVIF Device Manager: SourceForge
- VLC Media Player: Download
Support for H265
Launch chrome browser with the following paramaters :
Requires Chrome 127+ and NVIDIA hardware decoding
(chrome://flags : Hardware-accelerated video decode must be activated)
⚠️ Webrtc H265 is not supported by Edge Browser. It sould works with Safari.
Instructions
Ignition Vision
Support for linux and macOS
On windows, (aside from the module light version) if Gsteamer is not installed on the client, a version of gstreamer (1.20.X) is automaticaly installed in user's home directory.
Linux
See instruction to install gestreamer and plugin : on linux
Linux and Perspective with webrtc
Make sure to install :
Make sure to install all the Gstreamer plugins (good, bad, ugly) to be able to support all audio/video codec
In the Ignition Designer, Drag a videoViewer component from the component palette.
Enter the stream url, for example :
- rtsp://192.168.1.108:554/play1.sdp
- file:///D:/myFolder/MyVideo.mp4
- webcam
- pattern=ball
Start preview mode in the designer
When the designer is not in preview mode, video playing are stopped
videoViewer component is designed for playing IP camera RTSP stream or Files or Webcam with the following requirements :
Broad Coverage of Multimedia Technologies
GStreamers capabilities can be extended through new plugins. The features listed below are just a rough overview what is available using the GStreamers own plugins, not counting any 3rd party offerings.
- container formats: asf, avi, 3gp/mp4/mov, flv, mpeg-ps/ts, mkv/webm, mxf, ogg
- streaming: http, mms, rtsp
- codecs: FFmpeg, various codec libraries, 3rd party codec packs
- metadata: native container formats with a common mapping between them
- video: various colorspaces, support for progressive and interlaced video
- audio: integer and float audio in various bit depths and multichannel configurations
H264 and H265 low, main and high profile are supported.
According to client CPU/GPU ressources multiple vision components can be used. webcam source can only be used once.
Ignition Perspective
Start the streaming server for the Gateway side :
Add a view with an iframe and bind the src to the script :
Localhost client and gateway must use an IP address (no 127.0.0.1 or localhost) for iceCandidateAddress and ipclient.
Test Pattern with vp9 output don't work
Parameters provided to the iframe url: autoplay, debug, latency,output_codec, quality are optionnal.
latency,output_codec,quality overrides the values (latency,outputCodec,outputCodecQuality) that can be set with system.byes.webrtc.addStreamConfig :
- outputCodec=[KEYWORDS/optional] : outputCodec : h264,vp8 or vp9
- outputCodecQuality=[KEYWORDS/optional] : outputCodecQuality : additionnal parameter for output encoder
- latency=[KEYWORDS/optional] : latency for rtsp : Amount of ms to buffer. Default = 0
- withAudio=[KEYWORDS/optional] : withAudio. Default = False
- pipeline=[KEYWORDS/optional] : pipeline. Use for custom pipeline. Others parameters will be ignored in this case.
- decodeEncode=[KEYWORDS/optional] : decodeEncode. Default = False (use True if rtsp source = h265 or implicit if outpout_codec = vp8 or vp9)
Script Packages :
system.byes.onvif
Client/Gateway scope functions
- ptzGetPort (deprecated - port is created automatically)
- ptzBindPort
- ptzIsPortBinded
- ptzGetEndpointAddressBinded
- ptzResetPortBinded
- ptzGetStatus
- ptzStop
- ptzContinuousMove
- ptzGotoHomePosition
- ptzGotoPreset
- ptzSetPreset
- ptzGetPresets
- ptzRemovePreset
- ptzSetHomePosition
- mediaGetPort (deprecated - port is created automatically)
- mediaBindPort
- mediaIsPortBinded
- mediaResetPortBinded
- mediaGetProfiles
- mediaGetStreamUri
- mediaGetProfilesAndStream
- deviceGetPort (deprecated - port is created automatically)
- deviceBindPort
- deviceIsPortBinded
- deviceResetPortBinded
- deviceGetCapabilities
- deviceGetServices
- deviceGetSystemDateAndTime
- deviceSystemReboot
- deviceAdjustSystemDateAndTime
system.byes.onvif.direct
Client scope functions :
- ptzGetPort (deprecated - port is created automatically)
- ptzBindPort
- ptzIsPortBinded
- ptzGetEndpointAddressBinded
- ptzResetPortBinded
- ptzGetStatus
- ptzStop
- ptzContinuousMove
- ptzGotoHomePosition
- ptzGotoPreset
- ptzSetPreset
- ptzGetPresets
- ptzRemovePreset
- ptzSetHomePosition
- mediaGetPort (deprecated - port is created automatically)
- mediaBindPort
- mediaIsPortBinded
- mediaResetPortBinded
- mediaGetProfiles
- mediaGetStreamUri
- mediaGetProfilesAndStream
- deviceGetPort (deprecated - port is created automatically)
- deviceBindPort
- deviceIsPortBinded
- deviceResetPortBinded
- deviceGetCapabilities
- deviceGetServices
- deviceGetSystemDateAndTime
- deviceSystemReboot
- deviceAdjustSystemDateAndTime
system.byes.utilsvideo.message
Client scope functions :
- register
- unregister
- unregisterAll
- send
system.byes.webrtc
Gateway scope functions :
- configureWebrtcServer
- addStreamConfig
- removeStreamConfig
- removeAllStreamsConfig
- getAllStreamsConfig
- stopWebrtcServer
- isStarted
- getGstVersionString
- getVideoStreamInProcess
system.byes.onvif.multiple
Gateway scope functions :
- ptzCreatePorts
- ptzBindPort
- ptzReleasePort
- ptzIsPortBinded
- ptzGetEndpointAddressBinded
- ptzGetStatus
- ptzStop
- ptzContinuousMove
- ptzGotoHomePosition
- ptzGotoPreset
- ptzSetPreset
- ptzGetPresets
- ptzRemovePreset
- ptzSetHomePosition
Changelog
- 1.8.32 :
- first release