RTCModule.kt
4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package io.livekit.android.dagger
import android.content.Context
import com.github.ajalt.timberkt.Timber
import dagger.Module
import dagger.Provides
import org.webrtc.EglBase
import org.webrtc.PeerConnectionFactory
import org.webrtc.audio.AudioDeviceModule
import org.webrtc.audio.JavaAudioDeviceModule
import javax.inject.Singleton
@Module
class RTCModule {
companion object {
@Provides
@Singleton
fun audioModule(appContext: Context): AudioDeviceModule {
// Set audio record error callbacks.
val audioRecordErrorCallback = object : JavaAudioDeviceModule.AudioRecordErrorCallback {
override fun onWebRtcAudioRecordInitError(errorMessage: String?) {
Timber.e { "onWebRtcAudioRecordInitError: $errorMessage" }
}
override fun onWebRtcAudioRecordStartError(
errorCode: JavaAudioDeviceModule.AudioRecordStartErrorCode?,
errorMessage: String?
) {
Timber.e { "onWebRtcAudioRecordStartError: $errorCode. $errorMessage" }
}
override fun onWebRtcAudioRecordError(errorMessage: String?) {
Timber.e { "onWebRtcAudioRecordError: $errorMessage" }
}
}
val audioTrackErrorCallback = object : JavaAudioDeviceModule.AudioTrackErrorCallback {
override fun onWebRtcAudioTrackInitError(errorMessage: String?) {
Timber.e { "onWebRtcAudioTrackInitError: $errorMessage" }
}
override fun onWebRtcAudioTrackStartError(
errorCode: JavaAudioDeviceModule.AudioTrackStartErrorCode?,
errorMessage: String?
) {
Timber.e { "onWebRtcAudioTrackStartError: $errorCode. $errorMessage" }
}
override fun onWebRtcAudioTrackError(errorMessage: String?) {
Timber.e { "onWebRtcAudioTrackError: $errorMessage" }
}
}
val audioRecordStateCallback: JavaAudioDeviceModule.AudioRecordStateCallback = object :
JavaAudioDeviceModule.AudioRecordStateCallback {
override fun onWebRtcAudioRecordStart() {
Timber.i { "Audio recording starts" }
}
override fun onWebRtcAudioRecordStop() {
Timber.i { "Audio recording stops" }
}
}
// Set audio track state callbacks.
val audioTrackStateCallback: JavaAudioDeviceModule.AudioTrackStateCallback = object :
JavaAudioDeviceModule.AudioTrackStateCallback {
override fun onWebRtcAudioTrackStart() {
Timber.i { "Audio playout starts" }
}
override fun onWebRtcAudioTrackStop() {
Timber.i { "Audio playout stops" }
}
}
return JavaAudioDeviceModule.builder(appContext)
.setUseHardwareAcousticEchoCanceler(true)
.setUseHardwareNoiseSuppressor(true)
.setAudioRecordErrorCallback(audioRecordErrorCallback)
.setAudioTrackErrorCallback(audioTrackErrorCallback)
.setAudioRecordStateCallback(audioRecordStateCallback)
.setAudioTrackStateCallback(audioTrackStateCallback)
.createAudioDeviceModule()
}
@Provides
@Singleton
fun peerConnectionFactory(
appContext: Context,
audioDeviceModule: AudioDeviceModule
): PeerConnectionFactory {
PeerConnectionFactory.initialize(
PeerConnectionFactory.InitializationOptions.builder(appContext)
.createInitializationOptions()
)
return PeerConnectionFactory.builder()
.setAudioDeviceModule(audioDeviceModule)
.createPeerConnectionFactory()
}
@Provides
@Singleton
fun eglBase(): EglBase {
return EglBase.create()
}
}
}