DubbingLibPlugin.kt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package cn.i2edu.dubbing_lib
  2. import android.annotation.SuppressLint
  3. import android.app.Activity
  4. import android.os.Build
  5. import android.view.View
  6. import cn.i2edu.dubbing_lib.util.*
  7. import io.flutter.plugin.common.MethodCall
  8. import io.flutter.plugin.common.MethodChannel
  9. import io.flutter.plugin.common.MethodChannel.MethodCallHandler
  10. import io.flutter.plugin.common.MethodChannel.Result
  11. import io.flutter.plugin.common.PluginRegistry.Registrar
  12. class DubbingLibPlugin : MethodCallHandler {
  13. private val activity: Activity
  14. private val pausableThreadPool: PausableThreadPool = PausableThreadPool(1)
  15. companion object {
  16. private lateinit var channel: MethodChannel
  17. val CHANNEL_NAME = "cn.hwwwwh.flutter.plugins/DubbingPlugin"
  18. @JvmStatic
  19. fun registerWith(registrar: Registrar) {
  20. if (registrar.activity() == null) return
  21. channel = MethodChannel(registrar.messenger(), "dubbing_lib")
  22. channel.setMethodCallHandler(DubbingLibPlugin(registrar.activity()))
  23. }
  24. }
  25. @SuppressLint("CheckResult")
  26. constructor(activity: Activity) {
  27. this.activity = activity
  28. }
  29. override fun onMethodCall(call: MethodCall, result: Result) {
  30. when (call.method) {
  31. "getPlatformVersion" -> result.success("Android ${android.os.Build.VERSION.RELEASE}")
  32. "setExtraFullScreen" -> {
  33. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  34. activity.window.decorView.systemUiVisibility = activity.window.decorView.systemUiVisibility.or(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
  35. }
  36. }
  37. "mixinAudio" -> {
  38. try {
  39. MixinPaintedUtil.getInstance(context = activity.applicationContext)
  40. .initParams(audioPaths = call.argument<List<String>>("audioPaths")!!, bgmPath = call.argument<String>("bgmPath")!!,
  41. durationList = call.argument<List<Long>>("durationList")!!, endTimeList = call.argument<List<Long>>("endTimeList")!!,
  42. decodeDirPath = call.argument<String>("decodeDirPath")!!,
  43. mixinFilePath = call.argument<String>("mixinFilePath")!!,
  44. resultPath = call.argument<String>("resultPath")!!)
  45. .setComposeCallBack(
  46. object : MixinPaintedCallBack {
  47. override fun onResult(resultPath: String) {
  48. activity.runOnUiThread {
  49. result.success(resultPath)
  50. }
  51. }
  52. override fun onError(message: String) {
  53. activity.runOnUiThread {
  54. result.error("1005", "message", null)
  55. }
  56. }
  57. }
  58. )
  59. .startMixin()
  60. } catch (e: Exception) {
  61. e.printStackTrace()
  62. result.error("1005", "mixin audio failed", null)
  63. }
  64. }
  65. "mixinVideoAndAudio" -> {
  66. try {
  67. val resultPath = call.argument<String>("resultPath")!!
  68. val videoAudioMixer = Mp4ParserMixer(activity.applicationContext)
  69. videoAudioMixer.setListener(object : Mp4ParserMixer.VideoAudioMixListener {
  70. override fun mixSuccess() {
  71. activity.runOnUiThread {
  72. result.success(resultPath)
  73. }
  74. }
  75. override fun mixFail(reason: String?) {
  76. activity.runOnUiThread {
  77. result.error("1005", "error: $reason", null)
  78. }
  79. }
  80. })
  81. pausableThreadPool.execute {
  82. videoAudioMixer.muxAudioAndVideo(
  83. call.argument<String>("bgmPath")!!,
  84. call.argument<String>("videoPath")!!,
  85. resultPath)
  86. }
  87. } catch (e: Exception) {
  88. e.printStackTrace()
  89. result.error("1006", "mixin video failed", null)
  90. }
  91. }
  92. else -> result.notImplemented()
  93. }
  94. }
  95. }