MCPcopy Index your code
hub / github.com/daubli/FeedWatch

github.com/daubli/FeedWatch @v1.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.0 ↗ · + Follow
339 symbols 676 edges 52 files 8 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

FeedWatch

Android App to view NDI®- or UVC (USB Video Class Device) Feed on an Android mobile phone.

This project was renamed from NDIMonitor to FeedWatch to avoid confusion with the official NDI® Tools app "NDI® Video Monitor" and I don't want to get in trouble with Vizrt ;)

Features

Video Sources

  • NDI® High Bandwidth Monitoring

    • Supports NDI® High Bandwidth sources
    • Since NDI® can be network-intensive, using a USB-C Ethernet adapter is strongly recommended.
    • NDI® HX is currently not supported. I invested some effort and implemented a working prototype. However, in order to receive NDI® HX streams for longer than 5 minutes, you need currently a NDI® Advanced SDK license. Even if I had a license - which I do not - publishing the source code would not be useful, because I would not be able to publish the license itself. Anyone who wanted to use this functionality would need to obtain the appropriate license independently.
  • UVC HDMI Capture Cards
    The app can capture video from UVC-compatible devices, such as USB HDMI capture cards.
    This functionality was developed and tested with a low-cost UGREEN Video Capture Card (Amazon), which performed reliably.
    Any supported UVC device will automatically appear as an available source.

Low Bandwidth Mode

Low Bandwidth Mode reduces network and CPU usage by using the NDI proxy stream instead of the full-resolution video feed. This mode is ideal when your android device is only connected to a wireless network. While image quality is reduced compared to the full NDI stream it can nevertheless be enough to check feed existence, framing or exposure.

You can enable Low Bandwidth Mode in the app’s Settings page (Three-Dot Menu -> Settings)


Monitoring Tools

NDI Tally

  • Displays NDI® tally information (red for program /green for preview) for NDI sources

NDI Tally Example

Focus Peaking

  • Simple focus peaking implementation
  • Fixed sharpness sensitivity: 70%

Focus Peaking Example


Zebra

  • Exposure warning using zebra stripes
  • Fixed threshold: 95 IRE

Zebra Example


Grid Overlay

  • 3×3 composition grid for framing assistance

3×3 Grid Example

Build Requirements

Before building, we need to make sure that the following components are installed:

  • Java Development Kit (JDK) 11
  • Android SDK Platform 33
  • NDI SDK for Android

1. Java 11

This project must be built with Java 11. Newer Java versions (e.g. Java 17) may cause Gradle or NDK build failures. The reason is, that this project should be runnable on older phones. Android SDK Platform Level 33 uses Java 11.

2. Android SDK

Install Android SDK Platform 33. Instruction can be found here

3. Download and Install the NDI SDK

Download the NDI SDK for Android from the official site

Follow the installer instructions for your platform and note the installation directory.

3.1 Copy NDI Header Files

After installation, copy the NDI header files into the project’s C++ include directory:

cp <NDI_SDK_INSTALL_DIR>/NDI\ SDK\ for\ Android/include/* \ <PROJECT_ROOT>/FeedWatch/app/src/main/cpp/include/

3.2 Copy NDI Library Binaries

Next, copy the NDI library binaries into the project’s jniLibs directory:

cp <NDI_SDK_INSTALL_DIR>/NDI\ SDK\ for\ Android/lib/* <PROJECT_ROOT>/FeedWatch/app/src/main/jniLibs/

Ensure that the copied libraries match the ABIs you intend to build for (e.g. arm64-v8a, armeabi-v7a).

4. Build the Project

./gradlew assemble

State of this project

This app is in a very early development phase. Therefore it is not fully tested. It is possible that the app does not work stable and that there are some ui or- performance glitches.

License

NDI® is a registered trademark of the Vizrt Group. Also visit http://ndi.video for details.

This project is licensed under the APACHE License 2.0. See included LICENSE file.

Extension points exported contracts — how you extend this code

VideoSource (Interface)
(no doc) [4 implementers]
app/src/main/java/de/daubli/feedwatch/sources/VideoSource.java
StreamVideoRunner (Interface)
(no doc) [2 implementers]
app/src/main/java/de/daubli/feedwatch/StreamVideoRunner.java
Callback (Interface)
(no doc) [1 implementers]
app/src/main/java/de/daubli/feedwatch/usb/UsbDevicePermissionHandler.java
FrameCallback (Interface)
(no doc)
app/src/main/java/de/daubli/feedwatch/uvc/UvcCaptureManager.java

Core symbols most depended-on inside this repo

start
called by 8
app/src/main/java/de/daubli/feedwatch/StreamVideoRunner.java
getSourceName
called by 7
app/src/main/java/de/daubli/feedwatch/sources/VideoSource.java
setFocusAssistEnabled
called by 5
app/src/main/java/de/daubli/feedwatch/settings/SettingsStore.java
close
called by 5
app/src/main/java/de/daubli/feedwatch/ndi/NdiSource.java
failWithMessage
called by 5
app/src/main/java/de/daubli/feedwatch/ndi/StreamNDIVideoRunner.java
getVideoRect
called by 4
app/src/main/java/de/daubli/feedwatch/view/base/GLVideoRenderer.java
build
called by 4
app/src/main/java/de/daubli/feedwatch/decoder/MJpegBitmapBuilder.java
tryDecode
called by 4
app/src/main/java/de/daubli/feedwatch/decoder/MJpegBitmapBuilder.java

Shape

Method 256
Class 41
Function 37
Interface 4
Enum 1

Languages

Java89%
C++11%

Modules by API surface

app/src/main/java/de/daubli/feedwatch/MainActivity.java21 symbols
app/src/main/java/de/daubli/feedwatch/ndi/StreamNDIVideoRunner.java18 symbols
app/src/main/java/de/daubli/feedwatch/StreamVideoActivity.java18 symbols
app/src/main/java/de/daubli/feedwatch/settings/SettingsStore.java15 symbols
app/src/main/java/de/daubli/feedwatch/ndi/NdiVideoFrame.java15 symbols
app/src/main/java/de/daubli/feedwatch/view/base/GLVideoRenderer.java13 symbols
app/src/main/java/de/daubli/feedwatch/ndi/NdiFrameSync.java13 symbols
app/src/main/java/de/daubli/feedwatch/ndi/NdiFinder.java12 symbols
app/src/main/java/de/daubli/feedwatch/uvc/UvcCaptureManager.java11 symbols
app/src/main/java/de/daubli/feedwatch/ndi/NdiAudioFrame.java11 symbols
app/src/main/java/de/daubli/feedwatch/decoder/MJpegBitmapBuilder.java10 symbols
app/src/main/java/de/daubli/feedwatch/view/base/CompositeGLRenderer.java9 symbols

For agents

$ claude mcp add FeedWatch \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact