diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..6b42ee8baf680ea7d673606a14a5194df64c557a
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,189 @@
+FROM nvidia/cuda:11.6.2-devel-ubuntu20.04 AS devel
+
+ARG DEBIAN_FRONTEND=noninteractive
+ENV TZ=Europe/London
+ENV NVIDIA_DRIVER_CAPABILITIES graphics,compute,utility,video
+
+RUN apt-get update &&\
+    # Install build tools, build dependencies and python
+    apt-get install --no-install-recommends -y \
+        build-essential \
+        ninja-build \
+        git \
+        openssh-client \
+        wget \
+        unzip \
+        yasm \
+        cppcheck \
+        pkg-config \
+        vim \
+        pulseaudio \
+        libceres-dev \
+        libreadline-dev \
+        libopus-dev \
+        libxtst-dev \
+        libswscale-dev \
+        libtbb2 \
+        libtbb-dev \
+        libjpeg-dev \
+        libpng-dev \
+        libglew-dev \
+        zlib1g-dev \
+        libasound-dev \
+        libavcodec-dev \
+        libavformat-dev \
+        libavutil-dev \
+        libpostproc-dev \
+        libswscale-dev \
+        libeigen3-dev \
+        libgtk2.0-dev \
+        libxxf86vm-dev \
+        libgnutls28-dev \
+        uuid-dev \
+        libmsgpack-dev \
+        liburiparser-dev \
+        software-properties-common \
+        zenity \
+        gdb \
+        gdbserver \
+        valgrind \
+    && apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE && \
+    add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo focal main" -u && \
+    apt-get update && \
+    apt-get install --no-install-recommends -y \
+        librealsense2-dev \
+    && rm -rf /var/lib/apt/lists/*
+
+COPY ./libnvcuvid.so ./libnvidia-encode.so /usr/lib/x86_64-linux-gnu/
+
+RUN cd /opt/ &&\
+    # CMake
+    wget https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-linux-x86_64.sh && \
+    chmod a+x ././cmake-3.23.2-linux-x86_64.sh && \
+    ./cmake-3.23.2-linux-x86_64.sh --skip-license --prefix=/usr/local && \
+    rm ./cmake-3.23.2-linux-x86_64.sh && \
+    # Pylon
+    wget -O pylon.deb https://seafile.utu.fi/f/b4585f6c84f0462fac04/?dl=1 &&\
+    apt-get install ./pylon.deb &&\
+    rm ./pylon.deb &&\
+    rm -rf /var/lib/apt/lists/* &&\
+    # Portaudio
+    cd /opt/ &&\
+    wget https://github.com/PortAudio/portaudio/archive/refs/tags/v19.7.0.tar.gz &&\
+    tar -xf ./v19.7.0.tar.gz &&\
+    rm ./v19.7.0.tar.gz &&\
+    cd ./portaudio-19.7.0 &&\
+    ./configure && make && make install &&\
+    rm -rf ./portaudio-19.7.0
+
+ARG OPENCV_VERSION=4.5.5
+
+# Download and unzip OpenCV and opencv_contrib and delte zip files
+RUN cd /opt/ &&\
+    wget https://github.com/opencv/opencv/archive/$OPENCV_VERSION.zip &&\
+    unzip $OPENCV_VERSION.zip &&\
+    rm $OPENCV_VERSION.zip &&\
+    wget https://github.com/opencv/opencv_contrib/archive/$OPENCV_VERSION.zip &&\
+    unzip ${OPENCV_VERSION}.zip &&\
+    rm ${OPENCV_VERSION}.zip &&\
+    # Create build folder and switch to it
+    mkdir /opt/opencv-${OPENCV_VERSION}/build && cd /opt/opencv-${OPENCV_VERSION}/build &&\
+    # Cmake configure
+    cmake \
+        -DOPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-${OPENCV_VERSION}/modules \
+        -DWITH_CUDA=ON \
+        -DOPENCV_ENABLE_NONFREE=ON\
+        -DCUDA_ARCH_BIN="6.1 7.5" \
+        -DBUILD_TESTS=OFF\
+        -DBUILD_PERF_TESTS=OFF\
+        -DBUILD_EXAMPLES=OFF\
+        -DBUILD_opencv_bioinspired=OFF\
+        -DBUILD_opencv_cudaobjdetect=OFF\
+        -DBUILD_opencv_dnn_objdetect=OFF\
+        -DBUILD_opencv_dnn_superres=OFF\
+        -DBUILD_opencv_fuzzy=OFF\
+        -DBUILD_opencv_hdf=OFF\
+        -DBUILD_opencv_hfs=OFF\
+        -DBUILD_opencv_dpm=OFF\
+        -DBUILD_opencv_image_hash=OFF\
+        -DBUILD_opencv_java_bindings_generator=OFF\
+        -DBUILD_opencv_js=OFF\
+        -DBUILD_opencv_saliency=OFF\
+        -DBUILD_opencv_sfm=OFF\
+        -DBUILD_opencv_stitching=OFF\
+        -DBUILD_opencv_structured_light=OFF\
+        -DBUILD_opencv_superres=OFF\
+        -DBUILD_opencv_surface_matching=OFF\
+        -DBUILD_opencv_viz=OFF\
+        -DBUILD_opencv_xobjdetect=OFF\
+        -DBUILD_opencv_gapi=OFF\
+        -DBUILD_opencv_videostab=OFF\
+        -DBUILD_opencv_rgbd=OFF\
+        -DWITH_CUDNN=OFF\
+        -DWITH_TIFF=OFF\
+        -DWITH_WEBP=OFF\
+        -DWITH_OPENEXR=OFF\
+        -DWITH_OPENCL=OFF\
+        -DWITH_PROTOBUF=ON\
+        -DCMAKE_BUILD_TYPE=RELEASE \
+        # Install path will be /usr/local/lib (lib is implicit)
+        -DCMAKE_INSTALL_PREFIX=/usr/local \
+        .. &&\
+    # Make
+    make -j"$(nproc)" && \
+    # Install to /usr/local/lib
+    make install && \
+    ldconfig &&\
+    # Remove OpenCV sources and build folder
+    rm -rf /opt/opencv-${OPENCV_VERSION} && rm -rf /opt/opencv_contrib-${OPENCV_VERSION} &&\
+    ln -s /usr/local/include/opencv4/opencv2 /usr/local/include/opencv2
+
+ARG PROTOCOL_VERSION=0.3.2
+
+# Beyond Protocol
+RUN wget https://gitlab.utu.fi/api/v4/projects/14965/packages/generic/libftl-protocol/${PROTOCOL_VERSION}/libftl-protocol${PROTOCOL_VERSION}-Linux.deb && \
+    apt-get install -y ./libftl-protocol${PROTOCOL_VERSION}-Linux.deb && \
+    rm ./libftl-protocol${PROTOCOL_VERSION}-Linux.deb
+
+FROM nvidia/cuda:11.6.2-base-ubuntu20.04 AS runtime
+
+ARG OPENCV_VERSION=4.5.5
+ARG DEBIAN_FRONTEND=noninteractive
+ENV TZ=Europe/London
+ENV NVIDIA_DRIVER_CAPABILITIES graphics,compute,utility,video
+
+RUN apt-get update && apt-get upgrade -y &&\
+    # Install build tools, build dependencies and python
+    apt-get install --no-install-recommends -y \
+        pulseaudio \
+        libceres1 \
+        libreadline8 \
+        libopus0 \
+        libxtst6 \
+        libtbb2 \
+        libjpeg8 \
+        libpng16-16 \
+        libtiff5 \
+        libavformat58 \
+        libpq5 \
+        libxine2 \
+        libglew2.1 \
+        zlib1g \
+        libasound2 \
+        libavcodec58 \
+        libavutil56 \
+        libpostproc55 \
+        libswscale5 \
+        libgtk2.0-0 \
+        libxxf86vm1 \
+        uuid \
+        libmsgpackc2 \
+        liburiparser1 \
+        software-properties-common \
+    && rm -rf /var/lib/apt/lists/*
+
+COPY --from=devel /usr/local/share /usr/local/share
+COPY --from=devel /usr/local/lib /usr/local/lib
+COPY --from=devel /opt/pylon /opt/pylon
+COPY --from=devel /etc/udev/rules.d/69-basler-cameras.rules /etc/udev/rules.d/
+COPY --from=devel /etc/profile.d /etc/profile.d
diff --git a/libnvcuvid.so b/libnvcuvid.so
new file mode 100644
index 0000000000000000000000000000000000000000..f08a209545e076a835d11dcc24bd20d22088b1c5
Binary files /dev/null and b/libnvcuvid.so differ
diff --git a/libnvidia-encode.so b/libnvidia-encode.so
new file mode 100644
index 0000000000000000000000000000000000000000..99934c7b22357afacb382aef554075081ee787f6
Binary files /dev/null and b/libnvidia-encode.so differ