Skip to content

Commit

Permalink
Initial commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
brett-smith committed Dec 29, 2021
1 parent 6118aa4 commit e3f6899
Show file tree
Hide file tree
Showing 23 changed files with 1,657 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,7 @@

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
/target/
/.settings/
*.classpath
*.project
58 changes: 58 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# ![Bus Icon](src/main/web/icon.png "Cambr Icon")cambr

A cross-platform, JavaFX based webcam to MJPEG streamer.

![Screenshot](src/main/web/screenshot.png "Screenshot")

This application was written to provide a way to use a cheap webcam with [Animaze](https://www.animaze.us/) on Linux (with Proton), making use of it's new "IP Camera" feature.

Cambr simply converts your webcams output into an MJEPG stream.

While it is possible to achieve the same thing with other technologies available on Linux (e.g. GStreamer, VLC), these all involve complicated command line options.

Cambr makes use of [webcam-capture](https://github.com/sarxos/webcam-capture) for device support.

## Installation

Installers are provided for Linux, Windows and Mac OS. Download and run the GUI installers appropriate for your desktop.

* [Linux Installer](https://github.com/bithatch/cambr/releases/download/1.0.0/cambr_unix_1_0_0.sh)
* [Mac OS Installer](https://github.com/bithatch/cambr/releases/download/1.0.0/cambr_macos_1_0_0.dmg)
* [Windows Installer](https://github.com/bithatch/cambr/releases/download/1.0.0/cambr_windows-x64_1_0_0.exe)

### Run From Source

To run from source, you will need at least version *3.8.3* of [Apache Maven](https://maven.apache.org/) and a Java 17 development kit. I recommended downloading from [Adoptium](https://adoptium.net/).

Simply run the following from the directory you clone to.

```
mvn javafx:run
```

## Usage

Start the app, select a device and click *Stream*. Then point a browser to http://localhost:8080 and you should see your webcams output.

* Select the *Server* tab to change the port number, or to make the stream available on non-localhost address.
* Select the *Camera* tab to flip the camera input in either direction, or to monitor the output.

### Advanced

If you wish to make your stream available on the Internet, make sure you turn *Local Only* OFF, and set up a *Port Forward* from your router to your computers LAN address on the configured port. How to do this will vary greatly depending on your router, so consult it's documentation for more information.


## Changes

### 1.0.0

* Initial release

## Development

Find the source and submit pull requests at the GitHub project page, you know the drill.

## License

cambr is made available under [GPL version 3](https://www.gnu.org/licenses/gpl-3.0.en.html). Other components under their respective licenses.

296 changes: 296 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,296 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>uk.co.bithatch</groupId>
<artifactId>cambr</artifactId>
<version>1.0.0</version>
<name>Simple Webcam Streamer</name>
<properties>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>17</maven.compiler.source>
<javafx.version>17.0.2-ea+1</javafx.version>
<main.class>uk.co.bithatch.cambr.Cambr</main.class>
<attach.extended.version>4.0.12</attach.extended.version>
<attach.extended.classifier>desktop</attach.extended.classifier>
<javafx.maven.plugin.version>0.0.8</javafx.maven.plugin.version>
<gluonfx.maven.plugin.version>1.0.9</gluonfx.maven.plugin.version>
<install4j.home>NOT_CONFIGURED</install4j.home>
<install4j.winKeystorePassword>NOT_CONFIGURED</install4j.winKeystorePassword>
<install4j.macKeystorePassword>NOT_CONFIGURED</install4j.macKeystorePassword>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>com.miglayout</groupId>
<artifactId>miglayout-javafx</artifactId>
<version>11.0</version>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-javafx</artifactId>
<version>12.0.0</version>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-boxicons-pack</artifactId>
<version>12.0.0</version>
</dependency>
<dependency>
<groupId>com.github.sarxos</groupId>
<artifactId>webcam-capture</artifactId>
<version>0.3.12</version>
</dependency>
<dependency>
<groupId>io.activej</groupId>
<artifactId>activej-http</artifactId>
<version>5.0</version>
</dependency>
<dependency>
<groupId>io.activej</groupId>
<artifactId>activej-promise</artifactId>
<version>5.0</version>
</dependency>
<dependency>
<groupId>io.activej</groupId>
<artifactId>activej-inject</artifactId>
<version>5.0</version>
</dependency>
<dependency>
<groupId>io.activej</groupId>
<artifactId>activej-launchers-http</artifactId>
<version>5.0</version>
</dependency>

</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>

<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>${javafx.maven.plugin.version}</version>
<configuration>
<mainClass>${main.class}</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<quiet>true</quiet>
<files>
<file>${basedir}/bithatch.build.properties</file>
<file>${user.home}/.bithatch.build.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/dependencies</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeClassifiers>linux,mac,win</excludeClassifiers>
</configuration>
</execution>
<execution>
<id>copy-javafx-win</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependencies/win</outputDirectory>
<artifactItems>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>${javafx.version}</version>
<classifier>win</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
<classifier>win</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>${javafx.version}</version>
<classifier>win</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>${javafx.version}</version>
<classifier>win</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>${javafx.version}</version>
<classifier>win</classifier>
</artifactItem>
</artifactItems>
</configuration>
</execution>
<execution>
<id>copy-javafx-mac</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependencies/mac</outputDirectory>
<artifactItems>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>${javafx.version}</version>
<classifier>mac</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
<classifier>mac</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>${javafx.version}</version>
<classifier>mac</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>${javafx.version}</version>
<classifier>mac</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>${javafx.version}</version>
<classifier>mac</classifier>
</artifactItem>
</artifactItems>
</configuration>
</execution>
<execution>
<id>copy-javafx-linux</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependencies/linux</outputDirectory>
<artifactItems>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>${javafx.version}</version>
<classifier>linux</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
<classifier>linux</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>${javafx.version}</version>
<classifier>linux</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>${javafx.version}</version>
<classifier>linux</classifier>
</artifactItem>
<artifactItem>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>${javafx.version}</version>
<classifier>linux</classifier>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.install4j</groupId>
<artifactId>install4j-maven</artifactId>
<version>9.0.5</version>
<executions>
<execution>
<id>compile-installers</id>
<phase>package</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<projectFile>${project.basedir}/src/main/installer/cambr.install4j</projectFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

<pluginRepositories>
<pluginRepository>
<id>ej-technologies</id>
<url>https://maven.ej-technologies.com/repository</url>
</pluginRepository>
</pluginRepositories>

<repositories>
<!--Temporary until 4.0.0 is in maven central -->
<repository>
<id>ext-snapshots-local</id>
<name>ext-snapshots-local</name>
<url>https://artifactory.jadaptive.com/ext-snapshots-local</url>
<snapshots />
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
</project>
Loading

0 comments on commit e3f6899

Please sign in to comment.