Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ tmp/
local.properties
.loadpath
.factorypath
.metals

##############################
## NetBeans
Expand Down
21 changes: 6 additions & 15 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,25 +1,16 @@
PLATFORM=$(shell uname -s | tr '[:upper:]' '[:lower:]')

ifeq ($(PLATFORM),darwin)
GRPC_JAVA="https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.51.1/protoc-gen-grpc-java-1.51.1-osx-x86_64.exe"
else ifeq ($(PLATFORM),linux)
GRPC_JAVA="https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.51.1/protoc-gen-grpc-java-1.51.1-linux-x86_64.exe"
else
$(error unknown platform $(PLATFORM))
endif

buf:
rm -rf core/sdk/src/main/gen
buf generate --template buf.gen.yaml buf.build/viamrobotics/api
buf generate --template buf.gen.yaml buf.build/viamrobotics/goutils
buf generate --template buf.gen.yaml buf.build/erdaniels/gostream

setup:
sudo curl -o /usr/local/bin/protoc-gen-grpc-java -L ${GRPC_JAVA}
sudo chmod +x /usr/local/bin/protoc-gen-grpc-java

run_client:
./gradlew runExample1Client --args="localhost:8080"

run_client_webrtc_auth:
./gradlew runExample2Client

run_client_grpc_auth:
./gradlew runExample3Client

run_server:
./gradlew runExample1Server --args="8080"
16 changes: 4 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Dependencies

* JDK 11+
* JDK 21+ (source is Java 11 compatible)
* Run `make setup buf`

## Pure Java SDK
Expand All @@ -13,17 +13,9 @@
### Client
* `make run_client`

## Building Dependencies

### Android SDK - Compiling libwertc.aar

See https://medium.com/@abdularis/how-to-compile-native-webrtc-from-source-for-android-d0bac8e4c933 for instructions. Once built,
put the resulting AAR in `android/libwebrtc`.

### webrtc-java on MacOS M1 (aarch64)

As of Dec 2022, mac/aarch64 builds of webrtc-java are not available. To build, checkout https://github.com/devopvoid/webrtc-java and build using `mvn install`. The build will take 30+ minutes as it has to checkout a ~15gb webrtc source package and toolchain (Tip: fast and stable wifi conneciton is key). The artifact will be installed in the default gradle package directory.

## Publishing to mavenLocal

Run `./gradlew install`.

## Known Issues
* Android 10 (the min supported at API 29) testing appears to show that webrtc video decoding is failing. This needs to be looked into but could be a simple fix of passing in different decoder factory settings. Android 14 works great.
3 changes: 2 additions & 1 deletion android/examples/simple/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apply plugin: 'com.android.application'

buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.0.0'
classpath 'com.android.tools.build:gradle:8.2.2'
}
}

Expand All @@ -28,6 +28,7 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
namespace 'com.viam.sdk.android.examples.simple'
}

dependencies {
Expand Down
3 changes: 1 addition & 2 deletions android/examples/simple/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.viam.sdk.android.examples.simple">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,23 @@

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.viam.rdk.proto.api.component.gps.v1.GPSServiceGrpc;
import com.viam.rdk.proto.api.component.gps.v1.Gps;
import com.viam.rdk.proto.api.robot.v1.Robot;
import com.viam.rdk.proto.api.robot.v1.RobotServiceGrpc;

import com.viam.component.movementsensor.v1.MovementSensorServiceGrpc;
import com.viam.component.movementsensor.v1.Movementsensor;
import com.viam.robot.v1.Robot;
import com.viam.robot.v1.RobotServiceGrpc;
import com.viam.sdk.core.DialOptions;
import com.viam.sdk.android.Dialer;
import com.viam.sdk.core.webrtc.DialWebRTCOptions;
import com.viam.sdk.core.webrtc.PeerConnection;
import org.webrtc.*;

import java.util.logging.Logger;

import proto.rpc.v1.Auth;
import proto.stream.v1.Stream;
import proto.stream.v1.StreamServiceGrpc;

import java.util.logging.Logger;

public class MainActivity extends AppCompatActivity {

static SurfaceViewRenderer fullscreenRenderer;
Expand Down Expand Up @@ -69,9 +71,9 @@ public void onRemoveStream(final MediaStream mediaStream) {
final Stream.AddStreamResponse streamResp = streamClient.addStream(Stream.AddStreamRequest.newBuilder().setName("camera1").build());
logger.info(streamResp.toString());

final GPSServiceGrpc.GPSServiceBlockingStub gpsClient = GPSServiceGrpc.newBlockingStub(chan);
final Gps.ReadLocationResponse gpsResp = gpsClient.readLocation(Gps.ReadLocationRequest.newBuilder().setName("gps1").build());
logger.info(gpsResp.getCoordinate().toString());
final MovementSensorServiceGrpc.MovementSensorServiceBlockingStub msClient = MovementSensorServiceGrpc.newBlockingStub(chan);
final Movementsensor.GetPositionResponse msResp = msClient.getPosition(Movementsensor.GetPositionRequest.newBuilder().setName("gps1").build());
logger.info(msResp.getCoordinate().toString());
}).exceptionally((t) -> {
t.printStackTrace();
logger.warning("failed to dial: " + t);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<org.webrtc.SurfaceViewRenderer
android:id="@+id/fullscreen_video_view"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<resources>
<!-- Base application theme. -->
<style name="Theme.ViamSDK" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Primary brand color. -->
Expand Down
2 changes: 1 addition & 1 deletion android/examples/simple/src/main/res/values/themes.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<resources>
<!-- Base application theme. -->
<style name="Theme.ViamSDK" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Primary brand color. -->
Expand Down
12 changes: 0 additions & 12 deletions android/libwebrtc/build.gradle

This file was deleted.

Binary file removed android/libwebrtc/libwebrtc.aar
Binary file not shown.
16 changes: 7 additions & 9 deletions android/sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ ext.pomDisplayName = "Viam Android SDK"

buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.0.0'
classpath 'com.android.tools.build:gradle:8.2.2'
}
}

Expand All @@ -21,20 +21,18 @@ android {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
}

afterEvaluate {
publishing {
publications {
release(MavenPublication) {
from components.release
}
singleVariant('release') {
withSourcesJar()
}
}

namespace 'com.viam.sdk.android'
}

dependencies {
api project(':core:viam-core-sdk')
api project(':android:viam-android-libwebrtc')
implementation 'io.grpc:grpc-okhttp:1.46.0'
api 'org.jitsi:webrtc:118.0.0'
implementation 'io.grpc:grpc-okhttp:1.61.0'
}
3 changes: 1 addition & 2 deletions android/sdk/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.viam.sdk.android">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ public void unregisterObserver() {
}

@Override
public boolean send(final Buffer message) {
return this.nativeDataChannel.send(new org.webrtc.DataChannel.Buffer(message.data, message.binary));
public void send(final Buffer message) {
this.nativeDataChannel.send(new org.webrtc.DataChannel.Buffer(message.data, message.binary));
}

@Override
Expand Down Expand Up @@ -53,7 +53,6 @@ public State state() {
private static org.webrtc.DataChannel.Observer toNativeDataChannelObserver(final DataChannel.Observer observer) {
return new org.webrtc.DataChannel.Observer() {

@Override
public void onBufferedAmountChange(long previousAmount) {
observer.onBufferedAmountChange(previousAmount);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ private static org.webrtc.PeerConnection.RTCConfiguration toNativeRTCConfigurati
if (rtcConfiguration.sdpSemantics != null) {
switch (rtcConfiguration.sdpSemantics) {
case PLAN_B:
//noinspection deprecation
nativeConfig.sdpSemantics = org.webrtc.PeerConnection.SdpSemantics.PLAN_B;
break;
case UNIFIED_PLAN:
Expand Down
4 changes: 2 additions & 2 deletions buf.gen.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
version: v1
plugins:
- name: java
- plugin: buf.build/protocolbuffers/java:v25.2
out: core/sdk/src/main/gen
- name: grpc-java
- plugin: buf.build/grpc/java:v1.61.1
out: core/sdk/src/main/gen
16 changes: 9 additions & 7 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ subprojects {
}

ext {
min_api = 24
target_api = 31
min_api = 29
target_api = 34
}

def pomConfig = {
Expand Down Expand Up @@ -68,14 +68,14 @@ subprojects {
exclude '**/index.html', '**/*.kt', '**/test*/**'
}

task sourcesJar(type: Jar) {
tasks.register('sourcesJar', Jar) {
from sourceSets.main.allJava
classifier 'sources'
archiveClassifier = 'sources'
}

task javadocJar(type: Jar) {
tasks.register('javadocJar', Jar) {
from javadoc
classifier 'javadoc'
archiveClassifier = 'javadoc'
}

publishing {
Expand All @@ -97,5 +97,7 @@ subprojects {
}
}

task install(dependsOn: 'publishToMavenLocal')
tasks.register("install") {
dependsOn 'publishToMavenLocal'
}
}
14 changes: 8 additions & 6 deletions core/sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ apply plugin: 'java-library'
ext.pomDisplayName = "Viam Core SDK"

dependencies {
api 'io.grpc:grpc-protobuf:1.51.1'
api 'io.grpc:grpc-stub:1.51.1'
api 'javax.annotation:javax.annotation-api:1.3.2'
api 'io.grpc:grpc-protobuf:1.61.1'
api 'io.grpc:grpc-stub:1.61.1'
implementation 'org.json:json:20220924'
implementation 'com.google.api.grpc:proto-google-common-protos:2.11.0'
implementation 'com.google.api.grpc:proto-google-common-protos:2.33.0'
api 'org.apache.tomcat:annotations-api:6.0.53' // necessary for Java 9+
}

sourceSets {
Expand All @@ -18,5 +18,7 @@ sourceSets {
}
}

sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
Loading