Skip to content
A vision library for genicam based cameras
Branch: master
Clone or download
mlrsmith and EmmanuelP gvinterface: set SO_RCVBUF size to a larger value on discovery socket
This makes discovery work for all the GV devices on networks containing
moderately large numbers of them (in my testing, around 23-24 of them).
Latest commit 57c1d0b Mar 4, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs ninja: fix path to generated headers for gtk-doc Aug 10, 2018
gst gst: don't use dash as API version separator in plugin filename Jul 31, 2018
man doc: add man pages for arv-tool and arv-viewer Mar 16, 2018
module module: boilerplate Aug 21, 2014
tests genicam: fix default Sign value Sep 3, 2018
tools gvcp: update wireshark dissector to latest revision Feb 5, 2019
viewer viewer: rename manufacturer column to vendor Jul 25, 2018
AUTHORS Add AUTHORS file. Mar 15, 2010
COPYING license: revert adding GPL text May 31, 2017
ChangeLog Autotoolification. Feb 11, 2010
Makefile.decl build: Makefile.decl and gtk-doc.make both try to define EXTRA_DIST May 26, 2010
NEWS doc: fix documentation link in readme Sep 11, 2018
aravis.rules usb3vision: new udev rule for PointGrey devices Feb 23, 2017 meson: add missing USB entry in Jul 25, 2018 build: post-release version bump Jan 15, 2019
meson_options.txt build: meson build system support May 2, 2018

Build Status Codacy Badge Coverity Scan Build Status


What is Aravis ?

Aravis is a glib/gobject based library for video acquisition using Genicam cameras. It currently implements the gigabit ethernet and USB3 protocols used by industrial cameras. It also provides a basic ethernet camera simulator and a simple video viewer.

Aravis is released under the LGPL v2+.

Installing Aravis

Aravis uses the standard GNU build system, using autoconf for package configuration and resolving portability issues, automake for building makefiles that comply with the GNU Coding Standards, and libtool for building shared libraries on multiple platforms. The recommended way to get the sources is to download the release tarballs from

make install

Compilation options may be passed to the configure script. Please run ./configure --help for information about the available options.

On some platforms (like Ubuntu), you may have to configure the dynamic linker (ld) to let it know where the aravis libraries are installed, and run ldconfig as root in order to update ld cache.

If you want to use a clone of the git repository on github, instead of the release tarballs, you may have to create the configure script by running:


Building on Mac OS X

Using the GNU build system on Mac OS X is not directly supported, but can be mimicked by augmenting the install procedure above with some environment settings:

brew install gettext intltool gtk-doc automake libxml2
brew link --force gettext
brew link --force libxml2
glibtoolize --copy
automake --add-missing
make install

Ethernet Device Performance

Stream Packet Size

One way to increase streaming performance is to increase the stream packet size. arv_camera_gv_set_packet_size() and arv_camera_gv_auto_packet_size() allow you to change this parameter. By default, the network adapter of your machine will probably not let you receive packet bigger than 1500 bytes, which is the default Maximum Transfer Unit (MTU). It means if you want to use big packets, you also have to increase the network adapter MTU to a greater walue (8192 bytes being a recommended value). The exact procedure to change the MTU depends on the distribution you are using. Please refer to the administrator manual of your distribution.

On Fedora, MTU can be changed using the network setting panel. Edit the wired network settings. MTU parameter is in the Identity page.

Please note if your device is not connected directly to the machine, you may also have to tweak the active devices on your network.

Packet Socket Support

Aravis can use packet sockets for the video receiving thread. But this mode requires extended capabilities. If you want to allow your application to use packet socket, you must set the cap_net_raw capability using setcap. For example, the following command gives this capability to the Aravis viewer (You should do this on the installed arv-viewer executable, has the one in the source tree is just a wrapper shell script):

sudo setcap cap_net_raw+ep arv-viewer

USB Permissions

By default, USB devices permissions may not be sufficient to allow any user to access the USB3 cameras. This permissions can be changed by using an udev rule file. There is a file example in Aravis sources, aravis.rules. This file must be placed in /etc/udev/rules.d directory (The exact location may depend on the distribution you are using). This file only contains declarations for a couple of vendors. If you want to add an entry with the vendor of your camera, the output of lsusb command will give you the vendor id, which is the first 4 digits of the ID field.


The Aravis library depends on libxml2 and glib2, with an optional USB support depending on libusb1, and an optional packet socket support depending on libaudit.

The GStreamer plugin depends on GStreamer1 in addition to the Aravis library dependencies.

The simple viewer depends on GStreamer1, Gtk+3, libnotify and the Aravis library dependencies.

The required versions are specified in the file in Aravis sources.

It is perfectly possible to only build the library, reducing the dependencies to the bare minimum.


As an open source and free software project, we welcome any contributions to the aravis project: code, bug reports, testing...

However, contributions to both Gigabit Ethernet and USB3 protocol code (files src/arvuv*.[ch] src/arvgv*.[ch]) must not be based on the corresponding specification documents published by the AIA, as this organisation forbids the use of their documents for the development of an open source implementation of the specifications. So, if you want to contribute to this part of Aravis, don't use the AIA documents and state clearly in the pull request your work is not based on them.

Unit tests

Aravis has a set of unit tests that helps to catch regressions and memory leaks during the development. The test suite is run using the following commands:

cd tests
make check
make check-valgrind-memcheck

make check-valgrind-hellgrind, make check-valgrind-sgcheck and make check-valgrind-drd are known to not pass. Any help to understand what fails and why would be nice.

All the code is not covered yet by the tests. Code coverage can be obtained using:

cd tests
make check-code-coverage

The report is published in tests/aravis-{VERSION}-coverage/index.html. Code coverage improvment is welcomed as well.



You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.