diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9a5f7f9a..c2235a78 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,11 +16,11 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up JDK - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: - distribution: 'adopt' + distribution: 'temurin' java-version: '11' cache: 'gradle' - name: Copy gradle.properties diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 00000000..a24352f4 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/CHANGES.md b/CHANGES.md index 6397a428..1052d5d3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,43 @@ ## develop +## sora-andoroid-sdk-2023.1.0 + +- [UPDATE] システム条件を更新する + - Android Studio 2022.1.1 以降 + - WebRTC SFU Sora 2022.2.0 以降 + - Sora Android SDK 2023.1.0 以降 + - @miosakuma +- [UPDATE] `compileSdkVersion` を 33 に上げる + - @miosakuma +- [UPDATE] `targetSdkVersion` を 33 に上げる + - @miosakuma +- [UPDATE] Kotlin のバージョンを 1.8.10 に上げる + - @miosakuma +- [UPDATE] Compose Compiler のバージョンを 1.4.3 に上げる + - @miosakuma +- [UPDATE] Gradle を 7.6.1 に上げる + - @miosakuma +- [UPDATE] 依存ライブラリーのバージョンを上げる + - com.android.tools.build:gradle を 7.4.2 に上げる + - com.github.ben-manes:gradle-versions-plugin を 0.46.0 に上げる + - org.jlleitschuh.gradle:ktlint-gradle を 11.3.1 に上げる + - com.google.code.gson:gson を 2.10.1 に上げる + - androidx.appcompat:appcompat を 1.6.1 に上げる + - androidx.recyclerview:recyclerview: を 1.3.0 に上げる + - com.google.android.material:material: を 1.8.0 に上げる + - androidx.navigation:navigation-fragment-ktx を 2.5.3 に上げる + - androidx.navigation:navigation-ui-ktx を 2.5.3 に上げる + - androidx.compose.ui:ui:1.4.0 に上げる + - androidx.compose.material:material を 1.4.0 に上げる + - androidx.compose.material:material-icons-extended を 1.4.0 に上げる + - androidx.activity:activity-compose を 1.7.0 に上げる + +- [ADD] 映像コーデックに AV1 を追加する + - @miosakuma +- [ADD] ビデオチャットサンプルに音声ストリーミング機能の言語コードを追加する + - @miosakuma + ## sora-andoroid-sdk-2022.4.0 - [UPDATE] `compileSdkVersion` を 32 に上げる diff --git a/README.md b/README.md index 2234b979..4a201d6e 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ Please read https://github.com/shiguredo/oss before use. ## システム条件 - Android 8.0 以降 (エミュレーターでの動作は保証しません) -- Android Studio 2021.2.1 以降 -- WebRTC SFU Sora 2022.1.1 以降 -- Sora Android SDK 2022.4.0 以降 +- Android Studio 2022.1.1 以降 +- WebRTC SFU Sora 2022.2.2 以降 +- Sora Android SDK 2023.1.0 以降 ## サンプルの使い方 @@ -41,6 +41,10 @@ Please read https://github.com/shiguredo/oss before use. スポットライトのデモです。アクティブ配信数を固定したチャットが可能です。 +### メッセージング + +メッセージングのデモです。 + ### スクリーンキャスト クライアント端末の画面を動画配信するデモです。 @@ -51,6 +55,6 @@ Please read https://github.com/shiguredo/oss before use. ## Copyright -- Copyright 2022, Shiguredo Inc. and Lyo Kato +- Copyright 2023, Shiguredo Inc. and Lyo Kato - LibYuv ライブラリ: Copyright 2011 The LibYuv Project Authors. diff --git a/build.gradle b/build.gradle index 3c1fa5ba..ec78887d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,8 @@ apply plugin: "com.github.ben-manes.versions" buildscript { - ext.kotlin_version = '1.7.10' - ext.sora_android_sdk_version = '2022.4.0' + ext.kotlin_version = '1.8.10' + ext.sora_android_sdk_version = '2023.1.0' repositories { google() @@ -10,12 +10,12 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' + classpath 'com.android.tools.build:gradle:7.4.2' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}" - classpath "com.github.ben-manes:gradle-versions-plugin:0.42.0" - classpath "org.jlleitschuh.gradle:ktlint-gradle:10.3.0" + classpath "com.github.ben-manes:gradle-versions-plugin:0.46.0" + classpath "org.jlleitschuh.gradle:ktlint-gradle:11.3.1" } // デバッグ用: true に設定すると wss ではなく ws で接続できる diff --git a/samples/build.gradle b/samples/build.gradle index 34c8d078..ffd2685d 100644 --- a/samples/build.gradle +++ b/samples/build.gradle @@ -4,10 +4,10 @@ apply plugin: 'kotlin-kapt' apply plugin: 'org.jlleitschuh.gradle.ktlint' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { applicationId "jp.shiguredo.sora.sample" - targetSdkVersion 30 + targetSdkVersion 33 minSdkVersion 26 versionCode 1 versionName "1.0" @@ -49,7 +49,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion '1.3.0' + kotlinCompilerExtensionVersion '1.4.3' } buildTypes { @@ -91,21 +91,21 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${kotlin_version}" implementation "org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}" - implementation 'com.google.code.gson:gson:2.9.1' + implementation 'com.google.code.gson:gson:2.10.1' - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.6.1' implementation "androidx.cardview:cardview:1.0.0" - implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'androidx.recyclerview:recyclerview:1.3.0' - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.8.0' implementation 'com.jaredrummler:material-spinner:1.3.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1' - implementation 'androidx.navigation:navigation-ui-ktx:2.5.1' - implementation 'androidx.compose.ui:ui:1.2.1' - implementation 'androidx.compose.material:material:1.2.1' - implementation "androidx.compose.material:material-icons-extended:1.2.1" - implementation 'androidx.activity:activity-compose:1.5.1' + implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' + implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' + implementation 'androidx.compose.ui:ui:1.4.0' + implementation 'androidx.compose.material:material:1.4.0' + implementation "androidx.compose.material:material-icons-extended:1.4.0" + implementation 'androidx.activity:activity-compose:1.7.0' ext.pd_version = '4.9.2' implementation "com.github.permissions-dispatcher:permissionsdispatcher:${pd_version}" diff --git a/samples/src/main/kotlin/jp/shiguredo/sora/sample/facade/SoraVideoChannel.kt b/samples/src/main/kotlin/jp/shiguredo/sora/sample/facade/SoraVideoChannel.kt index a4fde73e..296d146a 100644 --- a/samples/src/main/kotlin/jp/shiguredo/sora/sample/facade/SoraVideoChannel.kt +++ b/samples/src/main/kotlin/jp/shiguredo/sora/sample/facade/SoraVideoChannel.kt @@ -65,6 +65,7 @@ class SoraVideoChannel( private val audioStereo: Boolean = false, private val needLocalRenderer: Boolean = true, private val audioEnabled: Boolean = true, + private val audioStreamingLanguageCode: String? = null, private val capturerFactory: CameraVideoCapturerFactory = DefaultCameraVideoCapturerFactory(context, fixedResolution, cameraFacing), private var listener: Listener? @@ -330,6 +331,7 @@ class SoraVideoChannel( this.proxy.password = BuildConfig.PROXY_PASSWORD } } + audioStreamingLanguageCode = this@SoraVideoChannel.audioStreamingLanguageCode } val peerConnectionOption = PeerConnectionOption().apply { diff --git a/samples/src/main/kotlin/jp/shiguredo/sora/sample/screencast/SoraScreencastService.kt b/samples/src/main/kotlin/jp/shiguredo/sora/sample/screencast/SoraScreencastService.kt index 5b7e085e..d96c60a0 100644 --- a/samples/src/main/kotlin/jp/shiguredo/sora/sample/screencast/SoraScreencastService.kt +++ b/samples/src/main/kotlin/jp/shiguredo/sora/sample/screencast/SoraScreencastService.kt @@ -104,7 +104,7 @@ class SoraScreencastService : Service() { } val activityIntent = createBoundActivityIntent() - val pendingIntent = PendingIntent.getActivity(this, 0, activityIntent, 0) + val pendingIntent = PendingIntent.getActivity(this, 0, activityIntent, PendingIntent.FLAG_MUTABLE) val notification = NotificationCompat.Builder(this, notificationChannelId) .setContentTitle(req!!.stateTitle) .setContentText(req!!.stateText) diff --git a/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/ScreencastSetupActivity.kt b/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/ScreencastSetupActivity.kt index daea39c8..2d97d172 100644 --- a/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/ScreencastSetupActivity.kt +++ b/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/ScreencastSetupActivity.kt @@ -21,7 +21,7 @@ class ScreencastSetupActivity : AppCompatActivity() { val TAG = ScreencastSetupActivity::class.simpleName } - private val videoCodecOptions = listOf("VP9", "VP8", "H264") + private val videoCodecOptions = listOf("VP9", "VP8", "H264", "AV1") private val audioCodecOptions = listOf("OPUS") private val multistreamOptions = listOf("有効", "無効") diff --git a/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/SpotlightRoomSetupActivity.kt b/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/SpotlightRoomSetupActivity.kt index 7b72001a..2fad5066 100644 --- a/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/SpotlightRoomSetupActivity.kt +++ b/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/SpotlightRoomSetupActivity.kt @@ -16,7 +16,7 @@ class SpotlightRoomSetupActivity : AppCompatActivity() { } private val spotlightNumberOptions = listOf("未指定", "1", "2", "3", "4", "5", "6", "7", "8") - private val videoCodecOptions = listOf("VP8", "VP9", "H264") + private val videoCodecOptions = listOf("VP8", "VP9", "H264", "AV1") private val audioCodecOptions = listOf("OPUS") private val audioBitRateOptions = listOf( "未指定", "8", "16", "24", "32", diff --git a/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/VideoChatRoomActivity.kt b/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/VideoChatRoomActivity.kt index d65530ce..38833966 100644 --- a/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/VideoChatRoomActivity.kt +++ b/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/VideoChatRoomActivity.kt @@ -61,6 +61,7 @@ class VideoChatRoomActivity : AppCompatActivity() { private var bundleId: String? = null private var dataChannelSignaling: Boolean? = null private var ignoreDisconnectWebSocket: Boolean? = null + private var audioStreamingLanguageCode: String? = null private var oldAudioMode: Int = AudioManager.MODE_NORMAL @@ -196,6 +197,13 @@ class VideoChatRoomActivity : AppCompatActivity() { else -> null } + audioStreamingLanguageCode = when (intent.getStringExtra("AUDIO_STREAMING_LANGUAGE_CODE")) { + "ja-JP" -> "ja-JP" + "en-US" -> "en-US" + "未指定" -> null + else -> null + } + // ステレオでは landscape にしたほうが内蔵マイクを使うときに自然な向きとなる。 if (audioStereo) { if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { @@ -330,6 +338,7 @@ class VideoChatRoomActivity : AppCompatActivity() { cameraFacing = cameraFacing, clientId = clientId, bundleId = bundleId, + audioStreamingLanguageCode = audioStreamingLanguageCode, listener = channelListener, needLocalRenderer = true ) diff --git a/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/VideoChatRoomSetupActivity.kt b/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/VideoChatRoomSetupActivity.kt index 96422c00..46f9b9a0 100644 --- a/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/VideoChatRoomSetupActivity.kt +++ b/samples/src/main/kotlin/jp/shiguredo/sora/sample/ui/VideoChatRoomSetupActivity.kt @@ -15,7 +15,7 @@ class VideoChatRoomSetupActivity : AppCompatActivity() { val TAG = VideoChatRoomSetupActivity::class.simpleName } - private val videoCodecOptions = listOf("VP9", "VP8", "H264") + private val videoCodecOptions = listOf("VP9", "VP8", "H264", "AV1") private val videoEnabledOptions = listOf("有効", "無効") private val audioCodecOptions = listOf("OPUS") private val audioEnabledOptions = listOf("有効", "無効") @@ -39,6 +39,7 @@ class VideoChatRoomSetupActivity : AppCompatActivity() { private val bundleIdOptions = listOf("なし", "端末情報", "時雨堂", "ランダム") private val dataChannelSignalingOptions = listOf("未指定", "無効", "有効") private val ignoreDisconnectWebSocketOptions = listOf("未指定", "無効", "有効") + private val audioStreamingLanguageCodeOptions = listOf("未指定", "ja-JP", "en-US") private lateinit var binding: ActivityVideoChatRoomSetupBinding @@ -88,6 +89,8 @@ class VideoChatRoomSetupActivity : AppCompatActivity() { binding.dataChannelSignalingSelection.spinner.setItems(dataChannelSignalingOptions) binding.ignoreDisconnectWebSocketSelection.name.text = "WS 切断を無視" binding.ignoreDisconnectWebSocketSelection.spinner.setItems(ignoreDisconnectWebSocketOptions) + binding.audioStreamingLanguageCodeSelection.name.text = "文字変換言語コード" + binding.audioStreamingLanguageCodeSelection.spinner.setItems(audioStreamingLanguageCodeOptions) } private fun startVideoChat() { @@ -115,6 +118,7 @@ class VideoChatRoomSetupActivity : AppCompatActivity() { val bundleId = selectedItem(binding.bundleIdSelection.spinner) val dataChannelSignaling = selectedItem(binding.dataChannelSignalingSelection.spinner) val ignoreDisconnectWebSocket = selectedItem(binding.ignoreDisconnectWebSocketSelection.spinner) + val audioStreamingLanguageCode = selectedItem(binding.audioStreamingLanguageCodeSelection.spinner) val intent = Intent(this, VideoChatRoomActivity::class.java) intent.putExtra("CHANNEL_NAME", channelName) @@ -136,6 +140,7 @@ class VideoChatRoomSetupActivity : AppCompatActivity() { intent.putExtra("BUNDLE_ID", bundleId) intent.putExtra("DATA_CHANNEL_SIGNALING", dataChannelSignaling) intent.putExtra("IGNORE_DISCONNECT_WEBSOCKET", ignoreDisconnectWebSocket) + intent.putExtra("AUDIO_STREAMING_LANGUAGE_CODE", audioStreamingLanguageCode) startActivity(intent) } diff --git a/samples/src/main/res/layout/activity_video_chat_room_setup.xml b/samples/src/main/res/layout/activity_video_chat_room_setup.xml index b7da1d62..658b5d15 100644 --- a/samples/src/main/res/layout/activity_video_chat_room_setup.xml +++ b/samples/src/main/res/layout/activity_video_chat_room_setup.xml @@ -97,6 +97,9 @@ + diff --git a/webrtc-video-effector/build.gradle b/webrtc-video-effector/build.gradle index 5b657538..e326716c 100644 --- a/webrtc-video-effector/build.gradle +++ b/webrtc-video-effector/build.gradle @@ -2,9 +2,9 @@ apply plugin: 'com.android.library' apply plugin: 'org.jlleitschuh.gradle.ktlint' android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { - targetSdkVersion 30 + targetSdkVersion 33 minSdkVersion 26 externalNativeBuild { cmake {