오디오 후킹
PlanetKit은 Planet Cloud가 상대방에게 오디오를 전송하기 전에 오디오 데이터를 가져올 수 있는 오디오 후킹(audio hooking) 기능을 제공합니다. 이 기능은 로컬 사용자의 음성을 변조하거나 오디오 데이터를 음성 인식에 활용하는 용도로 사용할 수 있습니다.
지원 통화 유형 | 최소 SDK 버전 |
---|---|
1대1 통화 | 5.5 |
개요
오디오 후킹 기능을 사용하기 위한 메서드는 PlanetKitCall
클래스에서 제공합니다.
오디오 후킹 활성화
오디오 후킹을 활성화하려면 PlanetKitHookMyAudioListener
구현체를 인자로 enableHookMyAudio()
를 호출하세요.
오디오 후킹이 활성화되면 onHooked
이벤트를 통해 PlanetKitHookedAudio
객체를 받을 수 있습니다.
오디오 데이터 수정하기(선택 사항)
오디오 데이터를 수정하려면 다음 절차를 따르세요.
PlanetKitHookedAudio
의getRawData()
를 호출하여 오디오 데이터를 획득하세요.- 획득한 오디오 데이터를 필요에 따라 수정하세요.
PlanetKitHookedAudio
의setRawData()
를 호출하여 수정된 오디오 데이터를 설정하세요.
PlanetKitHookedAudio
클래스에서는 미가공(raw) 오디오 데이터(data
)만 수정할 수 있고, channel
, sampleCount
, sampleRate
, sampleType
, seq
와 같은 메타데이터는 수정할 수 없습니다. data
를 수정할 때는 반드시 메타데이터가 나타내는 형식을 유지해야 합니다.
오디오 데이터 돌려놓기
가져온 오디오 데이터를 다시 돌려놓으려면 PlanetKitHookedAudio
객체를 인자로 putHookedMyAudioBack()
을 호출하세요.
오디오 후킹을 활성화한 후에는 오디오 데이터 수정 여부와 상관없이 반드시 가져온 오디오 데이터를 다시 돌려놓아야 합니다. 돌려놓지 않으면 상대방에게 오디오가 전달되지 않습니다.
오디오 후킹 비활성화
오디오 후킹을 비활성화하려면 disableHookMyAudio()
를 호출하세요.
샘플 코드
다음 샘플 코드는 음성을 변조하기 위해 오디오 후킹 기능을 사용하는 방법을 보여줍니다.
// Get instance of PlanetKitCall
private var call: PlanetKitCall?
// Single-threaded executor to handle audio processing asynchronously
private val executor = Executors.newSingleThreadExecutor()
// PlanetKitHookMyAudioListener object
private val listener = PlanetKitHookMyAudioListener { audioData ->
processingAudio(audioData) // Pass intercepted audio data to be processed
}
// Method to process and modify the audio data
private fun processingAudio(audioData: PlanetKitHookedAudio) {
// Submit the audio processing task to the executor
executor.submit {
// Get the raw audio data
val processedAudio: ByteArray = audioData.getRawData()
// Modify the audio data as needed
...
// Set the modified audio back
audioData.setRawData(processedAudio)
// Send the processed audio data back to the server
call?.putHookedMyAudioBack(audioData)
}
}
// Method to enable audio hook
fun enableAudioHook() {
call?.enableHookMyAudio(listener, PlanetKitRequestCallback {
if (it.isSuccessful) {
Log.d(TAG, "Audio hook enabled successfully")
} else {
Log.e(TAG, "Failed to enable audio hook")
}
})
}
// Method to disable the audio hook
fun disableAudioHook() {
call?.disableHookMyAudio(PlanetKitRequestCallback {
if (it.isSuccessful) {
Log.d(TAG, "Audio hook disabled successfully")
} else {
Log.e(TAG, "Failed to disable audio hook")
}
})
}
관련 API
오디오 후킹과 관련된 API는 다음과 같습니다.