אליהו הדס
12/30/2024, 12:20 AMArtem Kobzar
01/01/2025, 3:25 PMkotlin {
wasmJs { ... }
sourceSets {
val wasmMain by getting {
dependencies {
// ...
implementation(npm("@ffmpeg/ffmpeg", "VERSION"))
implementation(npm("@ffmpeg/util", "@ffmpeg/util"))
}
}
}
}
After that you need to declare a file that contains external declarations that describe the library (you can try to generate them using Dukat or Karakum)
As for example, it may look like this (based on the ffmpeg docs):
@file:JsModule("@ffmpeg/ffmpeg")
package org.company.externals.ffmpeg
external interface FFmpegLoadOptions: JsAny {
val coreURL: JsAny
val wasmURL: JsAny
}
external class FFmpeg {
// ...
fun load(opts: FFmpegLoadOptions): Promise<JsAny?>
}
```@file:JsModule("@ffmpeg/util")
package org.company.externals.ffmpeg.utils
external fun toBlobURL(path: String, format: String): Promise<JsAny>
```import org.company.externals.ffmpeg.FFmpeg
import org.company.externals.ffmpeg.FFmpegLoadOptions
import org.company.externals.ffmpeg.utils.toBlobURL
fun FFmpegLoadOptions(coreURL: JsAny, wasmURL: JsAny): FFmpegLoadOptions =
js("({ coreURL: coreURL, wasmURL: wasmURL })")
fun main() = runBlocking {
val ffmpegRef = FFmpeg();
val baseURL = "<https://unpkg.com/@ffmpeg/core@0.12.7/dist/umd>"
ffmpeg
.load(FFmpegLoadOptions(
coreURL = toBlobURL("$baseURL/ffmpeg-core.js", "text/javascript").await(),
wasmURL = toBlobURL("$baseURL/ffmpeg-core.wasm", "application/wasm").await(),
))
.await();
}
אליהו הדס
01/01/2025, 7:23 PM