Skip to content

Commit

Permalink
Merge branch 'release/2024.3.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
miosakuma committed Aug 29, 2024
2 parents 749d28b + 8cbe59a commit 4524773
Show file tree
Hide file tree
Showing 14 changed files with 124 additions and 54 deletions.
14 changes: 0 additions & 14 deletions .github/renovate.json

This file was deleted.

22 changes: 17 additions & 5 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
name: Build

on:
workflow_dispatch:
push:
paths-ignore:
- 'README.md'
- 'CHANGES.md'
- 'LICENSE'
- 'THANKS'
schedule:
- cron: "0 0 * * *"

jobs:
build:
Expand All @@ -21,19 +20,32 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '18'
# java-version を 17 にしている理由は以下です
# - Android Gradle plugin 8.5 のデフォルト JDK version が 17
# - 17 は LTS であり、temurin では 2027年10月までサポート予定
java-version: '17'
cache: 'gradle'
- name: Copy gradle.properties
run: cp gradle.properties.example gradle.properties
- name: Build with Gradle
run: ./gradlew build
- name: Lint Check
run: ./gradlew ktlintCheck
- name: Slack Notification
if: success()
uses: rtCamp/action-slack-notify@v2
env:
SLACK_CHANNEL: sora-android-sdk
SLACK_COLOR: good
SLACK_TITLE: SUCCEEDED
SLACK_ICON_EMOJI: ":star-struck:"
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
- name: Slack Notification
if: failure()
uses: rtCamp/action-slack-notify@v2
env:
SLACK_CHANNEL: sora-android-sdk
SLACK_COLOR: danger
SLACK_TITLE: Build failed
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_TITLE: "FAILED"
SLACK_ICON_EMOJI: ":japanese_ogre:"
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
62 changes: 60 additions & 2 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,69 @@

## develop

## 2024.3.0

**リリース日**: 2024-08-29

- [UPDATE] libwebrtc を 127.6533.1.1 に上げる
- @miosakuma @zztkm
- [UPDATE] Android Gradle Plugin (AGP) を 8.5.0 にアップグレードする
- Android Studion の AGP Upgrade Assistant を利用してアップグレードされた内容
- `com.android.tools.build:gradle` を 8.5.0 に上げる
- ビルドに利用される Gradle を 8.7 に上げる
- Android マニフェストからビルドファイルにパッケージを移動
- Android マニフェストに定義されていた package を削除
- ビルドファイルに namespace を追加
- buildTypes に定義されていた debug ブロックを削除
- AGP 8.5.0 対応で発生したビルドスクリプトのエラーを手動で修正した内容
- compileOptions を buildTypes から android ブロックに移動する
- Android 公式ドキュメントを参考にした修正
- <https://developer.android.com/build/jdks?hl=ja#source-compat>
- classifier を archiveClassifier に置き換える
- classifier は Gradle 8.0 で削除された
- <https://docs.gradle.org/7.6/dsl/org.gradle.api.tasks.bundling.Jar.html#org.gradle.api.tasks.bundling.Jar:classifier>
- compileSdkVersion と targetSdkVersion を 34 に上げる
- AGP 8.0 から buildConfig がデフォルト false になったので、true に設定する
- GitHub Actions で利用する JDK のバージョンを 17 にする
- JitPack でのビルドで利用する JDK のバージョンを 17 にする
- @zztkm
- [UPDATE] 依存ライブラリーのバージョンを上げる
- com.google.code.gson:gson を 2.11.0 に上げる
- com.squareup.okhttp3:okhttp を 4.12.0 に上げる
- org.jetbrains.kotlinx:kotlinx-coroutines-android を 1.8.1 に上げる
- androidx.test:core を 1.6.1 に上げる
- org.robolectric:robolectric を 4.13 に上げる
- @zztkm
- [UPDATE] Kotlin のバージョンを 1.9.25 に上げる
- @zztkm
- [FIX] Offer メッセージの encodings 内 maxFramerate の値が整数でない値であった場合にエラーとなる問題を修正
- W3C では maxFramerate を Double で定義しているが、libwebrtc では Integer となっているため、SDK も Integer を使用していた
- W3C の定義に合わせて Double を受け入れるようにし、また SDK 内部では libwebrtc に合わせて Integer とする方針となった
- 方針に合わせ SDK に対して maxFramerate を Double を受け入れるように修正し、int にキャストして設定するように変更
- 参考
- [W3C の定義](https://w3c.github.io/webrtc-pc/#dom-rtcrtpencodingparameters-maxframerate)
- [libwebrtc の定義](https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/sdk/android/api/org/webrtc/RtpParameters.java;l=72-73;drc=02334e07c5c04c729dd3a8a279bb1fbe24ee8b7c)
- @torikizi
- [FIX] Offer メッセージでサイマルキャスト有効を指定した場合にサイマルキャストが有効にならない問題を修正
- 接続時にクライアントが指定したサイマルキャスト有効/無効の設定により SimulcastVideoEncoder を利用していたが、Sora 側でサイマルキャスト有効の指定は変更できるためサイマルキャスト有効/無効の判断は Offer メッセージの `simulcast` の値を元に行う必要があった

### misc

- [UPDATE] システム条件を更新する
- Android Studio 2024.1.1 以降
- WebRTC SFU Sora 2024.1.0 以降
- @miosakuma
- [UPDATE] GitHub Actions の起動イベントに workflow_dispatch を追加
- @zztkm
- [UPDATE] GitHub Actions の定期実行をやめる
- build.yml の起動イベントから schedule を削除
- @zztkm

## 2024.2.0

- [UPDATE] libwebrtc を 122.6261.1.0 に上げる
- @miosakuma
- [UPDATE] Github Actions の actions/setup-java@v4 にあげる
- [UPDATE] Github Actions の actions/setup-java@v4 に上げる
- @miosakuma

## 2024.1.1
Expand All @@ -38,7 +96,7 @@
- @miosakuma
- [UPDATE] 解像度に `qHD` (960x540, 540x960) を追加する
- @enm10k
- [UPDATE] `ForwardingFilter``version``metadata` を追加する
- [UPDATE] `ForwardingFilter``version``metadata` を追加する
- @miosakuma
- [ADD] H.265 に対応する
- `SoraVideoOption``Codec``H265` を追加しました
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Sora Android SDK

[![Release](https://jitpack.io/v/shiguredo/sora-android-sdk.svg)](https://jitpack.io/#shiguredo/sora-android-sdk)
[![libwebrtc](https://img.shields.io/badge/libwebrtc-122.6261-blue.svg)](https://chromium.googlesource.com/external/webrtc/+/branch-heads/6261)
[![libwebrtc](https://img.shields.io/badge/libwebrtc-127.6533-blue.svg)](https://chromium.googlesource.com/external/webrtc/+/branch-heads/6533)
[![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/shiguredo/sora-android-sdk.svg)](https://github.com/shiguredo/sora-android-sdk.svg)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)

Expand All @@ -21,8 +21,8 @@ Please read https://github.com/shiguredo/oss before use.
## システム条件

- Android 5 以降 (エミュレーターでの動作は保証しません)
- Android Studio 2023.2.1 以降
- WebRTC SFU Sora 2023.2.0 以降
- Android Studio 2024.1.1 以降
- WebRTC SFU Sora 2024.1.0 以降

## サンプル

Expand Down
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ apply plugin: "org.ajoberstar.grgit"
apply plugin: 'org.jetbrains.dokka'

buildscript {
ext.kotlin_version = '1.8.10'
ext.libwebrtc_version = '122.6261.1.0'
ext.kotlin_version = '1.9.25'
ext.libwebrtc_version = '127.6533.1.1'

ext.dokka_version = '1.8.10'

Expand All @@ -15,7 +15,7 @@ buildscript {
}

dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
classpath 'com.android.tools.build:gradle:8.5.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}"
classpath 'org.ajoberstar.grgit:grgit-gradle:5.2.0'
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
2 changes: 1 addition & 1 deletion jitpack.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
jdk:
- openjdk11
- openjdk17
43 changes: 27 additions & 16 deletions sora-android-sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ apply plugin: 'org.jlleitschuh.gradle.ktlint'
group = 'com.github.shiguredo'

android {
compileSdkVersion 32
compileSdkVersion 34

defaultConfig {
minSdkVersion 21
targetSdkVersion 32
targetSdkVersion 34

buildConfigField("String", "REVISION", "\"${grgit.head().abbreviatedId}\"")
buildConfigField("String", "LIBWEBRTC_VERSION", "\"${libwebrtc_version}\"")
Expand All @@ -24,21 +24,30 @@ android {
java.srcDirs += 'src/test/kotlin'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
// AGP 8.0 からデフォルトで false になった
// このオプションが true でないと、defaultConfig に含まれている
// buildConfigField オプションが無効になってしまうため、true に設定する
// 参考: https://developer.android.com/build/releases/past-releases/agp-8-0-0-release-notes#default-changes
buildConfig true
}
buildTypes {
debug {
debuggable true
}
// Android Studio でのデバッグビルドタイプはデフォルトで debuggable true としてビルドされるため
// AGP Upgrade Assistant によって debug ブロックは削除された。
release {
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

testOptions {
unitTests.includeAndroidResources = true
}
// AGP 8.0 からモジュールレベルの build script 内に namespace が必要になった
// 参考: https://developer.android.com/build/releases/past-releases/agp-8-0-0-release-notes#namespace-dsl
namespace 'jp.shiguredo.sora.sdk'
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
Expand All @@ -52,7 +61,7 @@ dokkaHtml.configure {
// デフォルトの出力先は "${buildDir}/dokka". 変更したいときにコメントアウトを行う.
// outputDirectory.set(new File("${buildDir}/dokka"))
moduleName.set("sora-android-sdk")
// "dafault" を指定すると $USER_HOME/.cache/dokka を使用するとあるが実際には "${projectDir}/default" を見てしまうのでコメントアウトしている.
// "default" を指定すると $USER_HOME/.cache/dokka を使用するとあるが実際には "${projectDir}/default" を見てしまうのでコメントアウトしている.
// cacheRoot.set(file("default"))

dokkaSourceSets {
Expand Down Expand Up @@ -85,18 +94,18 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}"

// required by "signaling" part
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
implementation 'com.google.code.gson:gson:2.11.0'
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1'

// required by "rtc" part
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'

testImplementation 'junit:junit:4.13.2'
testImplementation 'androidx.test:core:1.5.0'
testImplementation('org.robolectric:robolectric:4.9.2') {
testImplementation 'androidx.test:core:1.6.1'
testImplementation('org.robolectric:robolectric:4.13') {
exclude group: 'com.google.auto.service', module: 'auto-service'
}
testImplementation "org.jetbrains.kotlin:kotlin-test-junit:${kotlin_version}"
Expand All @@ -110,7 +119,9 @@ configurations.all {
}

task sourcesJar(type: Jar) {
classifier = 'sources'
// classifier は archiveClassifier に置き換えられた
// https://docs.gradle.org/7.6/dsl/org.gradle.api.tasks.bundling.Jar.html#org.gradle.api.tasks.bundling.Jar:classifier
archiveClassifier = 'sources'
from android.sourceSets.main.java.srcDirs
}

Expand Down
3 changes: 1 addition & 2 deletions sora-android-sdk/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.shiguredo.sora.sdk">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -797,6 +797,7 @@ class SoraMediaChannel @JvmOverloads constructor(
mediaOption = mediaOption
),
mediaOption = mediaOption,
simulcastEnabled = offerMessage.simulcast,
dataChannelConfigs = offerMessage.dataChannels,
listener = peerListener
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ class PeerChannelImpl(
private val appContext: Context,
private val networkConfig: PeerNetworkConfig,
private val mediaOption: SoraMediaOption,
private val simulcastEnabled: Boolean = false,
dataChannelConfigs: List<Map<String, Any>>? = null,
private var listener: PeerChannel.Listener?,
private var useTracer: Boolean = false
Expand All @@ -104,7 +105,7 @@ class PeerChannelImpl(
}
}

private val componentFactory = RTCComponentFactory(mediaOption, listener)
private val componentFactory = RTCComponentFactory(mediaOption, simulcastEnabled, listener)

private var conn: PeerConnection? = null

Expand Down Expand Up @@ -309,7 +310,7 @@ class PeerChannelImpl(

return setRemoteDescription(offerSDP).flatMap {
// active: false が無効化されてしまう問題に対応
if (mediaOption.simulcastEnabled && mediaOption.videoUpstreamEnabled) {
if (simulcastEnabled && mediaOption.videoUpstreamEnabled) {
videoSender?.let { updateSenderOfferEncodings(it) }
}
return@flatMap createAnswer()
Expand Down Expand Up @@ -359,7 +360,7 @@ class PeerChannelImpl(
}
} ?: SoraLogger.d(TAG, "mid for video not found")

if (mediaOption.simulcastEnabled && mediaOption.videoUpstreamEnabled) {
if (simulcastEnabled && mediaOption.videoUpstreamEnabled) {
videoSender?.let { updateSenderOfferEncodings(it) }
}

Expand All @@ -383,7 +384,7 @@ class PeerChannelImpl(
parameters.encodings.zip(offerEncodings!!).forEach { (senderEncoding, offerEncoding) ->
offerEncoding.active?.also { senderEncoding.active = it }
offerEncoding.maxBitrate?.also { senderEncoding.maxBitrateBps = it }
offerEncoding.maxFramerate?.also { senderEncoding.maxFramerate = it }
offerEncoding.maxFramerate?.also { senderEncoding.maxFramerate = it.toInt() }
offerEncoding.scaleResolutionDownBy?.also { senderEncoding.scaleResolutionDownBy = it }
offerEncoding.scalabilityMode?.also { senderEncoding.scalabilityMode = it }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import org.webrtc.audio.JavaAudioDeviceModule

class RTCComponentFactory(
private val mediaOption: SoraMediaOption,
private val simulcastEnabled: Boolean,
private val listener: PeerChannel.Listener?
) {
companion object {
Expand All @@ -36,7 +37,7 @@ class RTCComponentFactory(
val encoderFactory = when {
mediaOption.videoEncoderFactory != null ->
mediaOption.videoEncoderFactory!!
mediaOption.simulcastEnabled ->
simulcastEnabled ->
SimulcastVideoEncoderFactoryWrapper(
mediaOption.videoUpstreamContext,
resolutionAdjustment = mediaOption.hardwareVideoEncoderResolutionAdjustment,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ data class Encoding(
@SerializedName("rid") val rid: String?,
@SerializedName("active") val active: Boolean?,
@SerializedName("maxBitrate") val maxBitrate: Int?,
@SerializedName("maxFramerate") val maxFramerate: Int?,
@SerializedName("maxFramerate") val maxFramerate: Double?,
@SerializedName("scaleResolutionDownBy") val scaleResolutionDownBy: Double?,
@SerializedName("scalabilityMode") val scalabilityMode: String?
)
Expand All @@ -108,6 +108,7 @@ data class OfferMessage(
@SerializedName("client_id") val clientId: String,
@SerializedName("bundle_id") val bundleId: String? = null,
@SerializedName("connection_id") val connectionId: String,
@SerializedName("simulcast") val simulcast: Boolean = false,
@SerializedName("metadata") val metadata: Any?,
@SerializedName("config") val config: OfferConfig? = null,
@SerializedName("mid") val mid: Map<String, String>? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import org.webrtc.WebrtcBuildVersion

class SDKInfo {
companion object {
const val version = "2024.2.0"
const val version = "2024.3.0"

fun sdkInfo(): String {
return "Sora Android SDK $version (${BuildConfig.REVISION})"
Expand Down

0 comments on commit 4524773

Please sign in to comment.