diff --git a/README.md b/README.md
index d09f4da..27656e9 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,12 @@
|taoyao-client-android|安卓终端|安卓终端|
|taoyao-signal-server|信令服务|终端信令控制|
+## 功能
+
+Web、信令已经完成大部分音视频功能,还有部分视频质量调整功能没有完成。
+
+Android还在学习之中...
+
## 证书
本地开发测试安装`docs/certs`中的`ca.crt`证书
diff --git a/docs/Deploy.md b/docs/Deploy.md
index 0ebdaad..d3f496d 100644
--- a/docs/Deploy.md
+++ b/docs/Deploy.md
@@ -93,6 +93,24 @@ gcc -v
g++ -v
```
+## 安装CMake
+
+```
+# 下载
+mkdir -p /data/dev/cmake
+cd /data/dev/cmake
+wget https://github.com/Kitware/CMake/releases/download/v3.26.0/cmake-3.26.0.tar.gz
+
+# 安装
+tar -zxvf cmake-3.26.0.tar.gz
+cd cmake-3.26.0
+./configure
+make && make install
+
+# 验证
+cmake -v
+```
+
## 安装Node
```
@@ -260,6 +278,90 @@ SELINUX=disabled
---
```
+## libwebrtc(可选)
+
+https://webrtc.github.io/webrtc-org/native-code/android/
+https://webrtc.github.io/webrtc-org/native-code/development/
+https://webrtc.github.io/webrtc-org/native-code/development/prerequisite-sw/
+https://www.chromium.org/developers/how-tos/install-depot-tools/
+
+建议直接购买国外的按需使用的主机,用完直接释放,配置建议:
+
+* 内存`8G`
+* 四核`CPU`
+* 硬盘`100G`
+* 系统`Ubuntu 20.xx`
+* 宽带按需`100Mbps/s`(不要固定宽带)
+* 整个编译过程大概需要两到三个小时(不会下载回来很慢)
+
+```
+# 编译工具
+mkdir -p /data
+git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
+
+# 源码
+mkdir -p /data/webrtc
+cd /data/webrtc
+fetch --nohooks webrtc_android
+/data/depot_tools/gclient sync
+
+# 分支
+cd src
+git checkout -b m94 branch-heads/4606
+/data/depot_tools/gclient sync
+
+# 编译依赖
+./build/install-build-deps.sh
+./build/install-build-deps-android.sh
+source ./build/android/envsetup.sh
+
+---
+'target_os': 'android',
+'is_clang': True,
+'is_debug': False,
+'use_rtti': True,
+'rtc_use_h264': True,
+'use_custom_libcxx': False,
+'rtc_include_tests': False,
+'is_component_build': False,
+'treat_warnings_as_errors': False,
+'use_goma': use_goma,
+'target_cpu': _GetTargetCpu(arch)
+---
+
+# 编译.so
+./tools_webrtc/android/build_aar.py --build-dir ./out/release-build/
+# 指定CPU架构:--arch x86 x86_64 arm64-v8a armeabi-v7a
+
+# 编译.a
+/data/depot_tools/autoninja -C ./out/release-build/x86 webrtc &&
+/data/depot_tools/autoninja -C ./out/release-build/x86_64 webrtc &&
+/data/depot_tools/autoninja -C ./out/release-build/arm64-v8a webrtc &&
+/data/depot_tools/autoninja -C ./out/release-build/armeabi-v7a webrtc
+
+# 依赖打包
+zip -r webrtc.zip out libwebrtc.aar
+```
+
+[WebRTC](https://pan.baidu.com/s/1E_DXv32D9ODyj5J-o-ji_g?pwd=hudc)
+
+## libmediasoupclient(可选)
+
+https://mediasoup.org/documentation/v3/libmediasoupclient/installation/
+
+```
+# 编译
+cmake . -B build \
+-DCMAKE_BUILD_TYPE=Debug | Release \
+-DMEDIASOUPCLIENT_LOG_DEV=OFF \
+-DMEDIASOUPCLIENT_LOG_TRACE=OFF \
+-DMEDIASOUPCLIENT_BUILD_TESTS=OFF \
+-DLIBWEBRTC_INCLUDE_PATH:PATH=PATH_TO_LIBWEBRTC_SOURCES \
+-DLIBWEBRTC_BINARY_PATH:PATH=PATH_TO_LIBWEBRTC_BINARY
+make -C build
+make install -C build
+```
+
## 下载源码
```
@@ -329,7 +431,7 @@ systemctl enable taoyao-signal-server
systemctl start | stop | restart taoyao-signal-server
```
-## 安装终端
+## 安装Web终端
```
# 编译代码
@@ -352,6 +454,12 @@ cp /data/taoyao/docs/etc/nginx.conf /etc/nginx/nginx.conf
nginx -s reload
```
+## 安装Android终端
+
+```
+# Android Studio
+```
+
## 配置防火墙
```
@@ -415,3 +523,41 @@ openssl x509 -in server.crt -subject -issuer -noout
# issuer= /C=cn/ST=gd/L=gz/O=acgist/OU=acgist/CN=acgist.com
openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12 -name taoyao
```
+
+## licenses
+
+```
+List of licenses:
+webrtc,
+abseil-cpp,
+android_deps,
+android_deps:com_android_support_support_annotations.*,
+android_ndk,
+android_sdk,
+androidx,
+base64,
+boringssl,
+crc32c,
+fft,
+fiat,
+g711,
+g722,
+ijar,
+jdk,
+libaom,
+libevent,
+libjpeg_turbo,
+libsrtp,
+libvpx,
+libyuv,
+nasm,
+ooura,
+opus,
+pffft,
+protobuf,
+rnnoise,
+sigslot,
+spl_sqrt_floor,
+usrsctp,
+zlib
+```
diff --git a/taoyao-client-android/README.md b/taoyao-client-android/README.md
index d1ea801..eb6f30a 100644
--- a/taoyao-client-android/README.md
+++ b/taoyao-client-android/README.md
@@ -1,12 +1,44 @@
# 安卓终端
+注意:功能还没完成
+
## C++终端
* [libmediasoupclient源码](https://github.com/versatica/libmediasoupclient)
* [libmediasoupclient文档](https://mediasoup.org/documentation/v3/libmediasoupclient)
* [libmediasoupclient接口](https://mediasoup.org/documentation/v3/libmediasoupclient/api)
+## 项目配置
+
+可以自己编译`WebRTC`依赖或者下载已有依赖,
+项目导入以后拷贝`libmediasoupclient`源码还有`WebRTC`头文件和二进制文件到`deps`目录。
+
+[WebRTC](https://pan.baidu.com/s/1E_DXv32D9ODyj5J-o-ji_g?pwd=hudc)
+
+> 注意删除目录`src/build/linux`和`third_party`目录中除了`abseil-cpp`以外的所有依赖(当然不删也没关系就是文件太多编译器会变慢)
+
## 学习资料
https://developer.android.google.cn/docs?hl=zh-cn
https://developer.android.google.cn/guide?hl=zh-cn
+
+## 依赖编译
+
+https://webrtc.github.io/webrtc-org/native-code/android/
+https://webrtc.github.io/webrtc-org/native-code/development/
+https://webrtc.github.io/webrtc-org/native-code/development/prerequisite-sw/
+https://www.chromium.org/developers/how-tos/install-depot-tools/
+https://mediasoup.org/documentation/v3/libmediasoupclient/installation/
+
+## 参考项目
+
+https://github.com/haiyangwu/webrtc-android-build
+https://github.com/haiyangwu/mediasoup-demo-android
+https://github.com/haiyangwu/mediasoup-client-android
+
+## 其他依赖
+
+其他一些框架:
+
+* `org.webrtc:google-webrtc`
+* `io.github.haiyangwu:mediasoup-client`
diff --git a/taoyao-client-android/taoyao/.gitignore b/taoyao-client-android/taoyao/.gitignore
index 048777e..f022b39 100644
--- a/taoyao-client-android/taoyao/.gitignore
+++ b/taoyao-client-android/taoyao/.gitignore
@@ -5,3 +5,5 @@ local.properties
**/.gradle
**/build
+
+mediasoup/deps
\ No newline at end of file
diff --git a/taoyao-client-android/taoyao/boot/build.gradle b/taoyao-client-android/taoyao/boot/build.gradle
index a1aea6a..02e1874 100644
--- a/taoyao-client-android/taoyao/boot/build.gradle
+++ b/taoyao-client-android/taoyao/boot/build.gradle
@@ -10,6 +10,8 @@ android {
targetSdk 32
versionCode 100
versionName "1.0.0"
+ consumerProguardFiles "consumer-rules.pro"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
@@ -17,9 +19,6 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
- buildFeatures {
- viewBinding true
- }
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
@@ -30,4 +29,6 @@ dependencies {
implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.2'
testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/media/MediaPublisher.cpp b/taoyao-client-android/taoyao/boot/consumer-rules.pro
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/media/MediaPublisher.cpp
rename to taoyao-client-android/taoyao/boot/consumer-rules.pro
diff --git a/taoyao-client-android/taoyao/boot/proguard-rules.pro b/taoyao-client-android/taoyao/boot/proguard-rules.pro
index af0d54a..e69de29 100644
--- a/taoyao-client-android/taoyao/boot/proguard-rules.pro
+++ b/taoyao-client-android/taoyao/boot/proguard-rules.pro
@@ -1 +0,0 @@
--optimizationpasses 5
\ No newline at end of file
diff --git a/taoyao-client-android/taoyao/client/build.gradle b/taoyao-client-android/taoyao/client/build.gradle
index cab103c..565859a 100644
--- a/taoyao-client-android/taoyao/client/build.gradle
+++ b/taoyao-client-android/taoyao/client/build.gradle
@@ -12,14 +12,6 @@ android {
versionName "1.0.0"
applicationId "com.acgist.taoyao.client"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- externalNativeBuild {
- cmake {
- cFlags '-std=c17'
- cppFlags '-std=c++17'
- // CPU架构:x86_64、x86、armeabi-v7a、arm64-v8a
- abiFilters 'arm64-v8a'
- }
- }
}
buildTypes {
release {
@@ -34,17 +26,11 @@ android {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
- externalNativeBuild {
- cmake {
- path file('src/main/cpp/CMakeLists.txt')
- version '3.22.1'
- }
- }
}
dependencies {
implementation project(path: ':boot')
- implementation fileTree(dir: 'libs', include: ['*.so', '*.jar'])
+ implementation project(path: ':mediasoup')
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
diff --git a/taoyao-client-android/taoyao/client/proguard-rules.pro b/taoyao-client-android/taoyao/client/proguard-rules.pro
index af0d54a..e69de29 100644
--- a/taoyao-client-android/taoyao/client/proguard-rules.pro
+++ b/taoyao-client-android/taoyao/client/proguard-rules.pro
@@ -1 +0,0 @@
--optimizationpasses 5
\ No newline at end of file
diff --git a/taoyao-client-android/taoyao/client/src/main/AndroidManifest.xml b/taoyao-client-android/taoyao/client/src/main/AndroidManifest.xml
index 6f2f1e8..2519906 100644
--- a/taoyao-client-android/taoyao/client/src/main/AndroidManifest.xml
+++ b/taoyao-client-android/taoyao/client/src/main/AndroidManifest.xml
@@ -10,15 +10,15 @@
android:supportsRtl="true"
android:theme="@style/Theme.Taoyao">
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/CMakeLists.txt b/taoyao-client-android/taoyao/client/src/main/cpp/CMakeLists.txt
deleted file mode 100644
index a4372d8..0000000
--- a/taoyao-client-android/taoyao/client/src/main/cpp/CMakeLists.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-cmake_minimum_required(VERSION 3.22.1)
-
-project(taoyao VERSION 1.0.0 LANGUAGES C CXX)
-
-# Debug | Release
-# DCMAKE_BUILD_TYPE=Debug
-# set(CMAKE_BUILD_TYPE Debug)
-
-# C编译选项
-set(CMAKE_C_STANDARD 17)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c17 -O3")
-set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -std=c17 -O0 -g")
-set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -std=c17 -O3")
-
-# C++编译选项
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3")
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++17 -O0 -g")
-set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++17 -O3")
-
-# 输出目录
-# set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/build)
-
-file(
- GLOB SOURCE_FILE
- "main.hpp"
- "include/*.hpp"
- "mediasoup/*.hpp"
- "main.cpp"
- "media/*.cpp"
-)
-
-add_library(taoyao SHARED ${SOURCE_FILE})
-find_library(
- log-lib
- log
-)
-target_link_libraries(
- taoyao
- ${log-lib}
-)
-
-# 配置
-# cmake -B build
-# Windows:cmake -B build -G "Unix Makefiles"
-# 编译
-# cmake --build build
-# 标准线程:-lpthread
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/main.cpp b/taoyao-client-android/taoyao/client/src/main/cpp/main.cpp
deleted file mode 100644
index 87c50ac..0000000
--- a/taoyao-client-android/taoyao/client/src/main/cpp/main.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#include
-#include
-
-extern "C" JNIEXPORT jstring JNICALL
-Java_com_acgist_taoyao_MainActivity_stringFromJNI(
- JNIEnv* env,
- jobject /* this */) {
- std::string hello = "Hello from C++";
- return env->NewStringUTF(hello.c_str());
-}
\ No newline at end of file
diff --git a/taoyao-client-android/taoyao/mediasoup/.gitignore b/taoyao-client-android/taoyao/mediasoup/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/taoyao-client-android/taoyao/mediasoup/CMakeLists.txt b/taoyao-client-android/taoyao/mediasoup/CMakeLists.txt
new file mode 100644
index 0000000..fe307ab
--- /dev/null
+++ b/taoyao-client-android/taoyao/mediasoup/CMakeLists.txt
@@ -0,0 +1,76 @@
+cmake_minimum_required(VERSION 3.22.1)
+
+project(taoyao VERSION 1.0.0 LANGUAGES C CXX)
+
+# Debug | Release
+# -DCMAKE_BUILD_TYPE=Debug
+# set(CMAKE_BUILD_TYPE Debug)
+
+# C编译选项
+#set(CMAKE_C_STANDARD 17)
+#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c17 -O3")
+#set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -std=c17 -O0 -g")
+#set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -std=c17 -O3")
+
+# C++编译选项
+#set(CMAKE_CXX_STANDARD 17)
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3")
+#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++17 -O0 -g")
+#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++17 -O3")
+
+set(
+ SOURCE_DIR
+ src/main/cpp/
+)
+
+set(
+ SOURCE_FILES
+ ${SOURCE_DIR}/main.hpp
+ ${SOURCE_DIR}/main.cpp
+)
+
+set(LIBWEBRTC_BINARY_PATH ${LIBWEBRTC_BINARY_PATH}/${ANDROID_ABI} CACHE STRING "libwebrtc binary path" FORCE)
+
+if (${MEDIASOUPCLIENT_LOG_TRACE})
+ target_compile_definitions(
+ ${PROJECT_NAME} PRIVATE MSC_LOG_TRACE=1
+ )
+endif ()
+
+if (${MEDIASOUPCLIENT_LOG_DEV})
+ target_compile_definitions(
+ ${PROJECT_NAME} PRIVATE MSC_LOG_DEV=1
+ )
+endif ()
+
+add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
+
+add_subdirectory("deps/libmediasoupclient")
+
+set_source_files_properties(
+ ${SOURCE_FILES} PROPERTIES COMPILE_FLAGS -Wall -Wextra -Wpedantic
+)
+
+target_include_directories(
+ ${PROJECT_NAME} PUBLIC
+ "${SOURCE_DIR}/include"
+ "${PROJECT_SOURCE_DIR}/deps/libmediasoupclient/include"
+ "${PROJECT_SOURCE_DIR}/deps/libmediasoupclient/deps/libsdptransform/include"
+)
+
+target_compile_definitions(
+ ${PROJECT_NAME} PUBLIC
+ $<$>:WEBRTC_POSIX>
+ $<$:WEBRTC_MAC>
+ $<$:NOMINMAX>
+ $<$:WEBRTC_WIN>
+ $<$:WIN32_LEAN_AND_MEAN>
+)
+
+target_link_libraries(
+ ${PROJECT_NAME} PUBLIC
+ log
+ android
+ OpenSLES
+ mediasoupclient
+)
diff --git a/taoyao-client-android/taoyao/mediasoup/build.gradle b/taoyao-client-android/taoyao/mediasoup/build.gradle
new file mode 100644
index 0000000..0612e9a
--- /dev/null
+++ b/taoyao-client-android/taoyao/mediasoup/build.gradle
@@ -0,0 +1,58 @@
+plugins {
+ id 'com.android.library'
+}
+
+def WEBRTC_INC_PATH = "${projectDir}/deps/webrtc/src"
+def WEBRTC_LIB_PATH = "${projectDir}/deps/webrtc/lib"
+
+android {
+ namespace 'com.acgist.mediasoup'
+ compileSdk 32
+ defaultConfig {
+ minSdk 31
+ targetSdk 32
+ versionCode 100
+ versionName "1.0.0"
+ consumerProguardFiles "consumer-rules.pro"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ externalNativeBuild {
+ cmake {
+ cFlags '-std=c17'
+ cppFlags '-std=c++17'
+ // CPU架构:x86_64、x86、arm64-v8a、armeabi-v7a
+ abiFilters 'arm64-v8a'
+ arguments "-DLIBWEBRTC_INCLUDE_PATH=" + WEBRTC_INC_PATH,
+ "-DLIBWEBRTC_BINARY_PATH=" + WEBRTC_LIB_PATH,
+ "-DMEDIASOUPCLIENT_BUILD_TESTS=OFF",
+ "-DMEDIASOUPCLIENT_LOG_TRACE=OFF",
+ "-DMEDIASOUPCLIENT_LOG_DEV=OFF"
+ }
+ }
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
+ }
+ externalNativeBuild {
+ cmake {
+ path file('CMakeLists.txt')
+ version '3.22.1'
+ }
+ }
+}
+
+dependencies {
+ api fileTree(dir: WEBRTC_LIB_PATH, include: ['libwebrtc.jar'])
+ implementation fileTree(dir: 'libs', include: ['*.a', '*.so', '*.jar'])
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.5.0'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+}
diff --git a/taoyao-client-android/taoyao/mediasoup/consumer-rules.pro b/taoyao-client-android/taoyao/mediasoup/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/taoyao-client-android/taoyao/mediasoup/libs/libwebrtc.jar b/taoyao-client-android/taoyao/mediasoup/libs/libwebrtc.jar
new file mode 100644
index 0000000..ea9ac80
Binary files /dev/null and b/taoyao-client-android/taoyao/mediasoup/libs/libwebrtc.jar differ
diff --git a/taoyao-client-android/taoyao/mediasoup/proguard-rules.pro b/taoyao-client-android/taoyao/mediasoup/proguard-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/taoyao-client-android/taoyao/mediasoup/src/main/AndroidManifest.xml b/taoyao-client-android/taoyao/mediasoup/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..ee6f84e
--- /dev/null
+++ b/taoyao-client-android/taoyao/mediasoup/src/main/AndroidManifest.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/include/AudioPublisher.hpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/include/AudioPublisher.hpp
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/include/AudioPublisher.hpp
rename to taoyao-client-android/taoyao/mediasoup/src/main/cpp/include/AudioPublisher.hpp
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/include/MediaPublisher.hpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/include/MediaPublisher.hpp
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/include/MediaPublisher.hpp
rename to taoyao-client-android/taoyao/mediasoup/src/main/cpp/include/MediaPublisher.hpp
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/include/MediaRecorder.hpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/include/MediaRecorder.hpp
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/include/MediaRecorder.hpp
rename to taoyao-client-android/taoyao/mediasoup/src/main/cpp/include/MediaRecorder.hpp
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/include/VideoPublisher.hpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/include/VideoPublisher.hpp
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/include/VideoPublisher.hpp
rename to taoyao-client-android/taoyao/mediasoup/src/main/cpp/include/VideoPublisher.hpp
diff --git a/taoyao-client-android/taoyao/mediasoup/src/main/cpp/main.cpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/main.cpp
new file mode 100644
index 0000000..84da2fc
--- /dev/null
+++ b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/main.cpp
@@ -0,0 +1,18 @@
+#include
+#include
+
+#include "Device.hpp"
+
+extern "C" JNIEXPORT jstring JNICALL
+Java_com_acgist_taoyao_client_MainActivity_stringFromJNI(
+ JNIEnv* env,
+ jobject /* this */) {
+ mediasoupclient::Device device;
+ if(device.IsLoaded()) {
+ std::string hello = "Hello from C++ true";
+ return env->NewStringUTF(hello.c_str());
+ } else {
+ std::string hello = "Hello from C++ false";
+ return env->NewStringUTF(hello.c_str());
+ }
+}
\ No newline at end of file
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/main.hpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/main.hpp
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/main.hpp
rename to taoyao-client-android/taoyao/mediasoup/src/main/cpp/main.hpp
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/media/AudioPublisher.cpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/media/AudioPublisher.cpp
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/media/AudioPublisher.cpp
rename to taoyao-client-android/taoyao/mediasoup/src/main/cpp/media/AudioPublisher.cpp
diff --git a/taoyao-client-android/taoyao/mediasoup/src/main/cpp/media/MediaPublisher.cpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/media/MediaPublisher.cpp
new file mode 100644
index 0000000..e69de29
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/media/MediaRecorder.cpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/media/MediaRecorder.cpp
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/media/MediaRecorder.cpp
rename to taoyao-client-android/taoyao/mediasoup/src/main/cpp/media/MediaRecorder.cpp
diff --git a/taoyao-client-android/taoyao/client/src/main/cpp/media/VideoPublisher.cpp b/taoyao-client-android/taoyao/mediasoup/src/main/cpp/media/VideoPublisher.cpp
similarity index 100%
rename from taoyao-client-android/taoyao/client/src/main/cpp/media/VideoPublisher.cpp
rename to taoyao-client-android/taoyao/mediasoup/src/main/cpp/media/VideoPublisher.cpp
diff --git a/taoyao-client-android/taoyao/settings.gradle b/taoyao-client-android/taoyao/settings.gradle
index cd9b9b7..9562c96 100644
--- a/taoyao-client-android/taoyao/settings.gradle
+++ b/taoyao-client-android/taoyao/settings.gradle
@@ -15,3 +15,4 @@ dependencyResolutionManagement {
rootProject.name = "taoyao"
include ':boot'
include ':client'
+include ':mediasoup'