IJK.kt 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.example.ijkplayer
  2. /// create 2019/3/7 by cai
  3. import android.net.Uri
  4. import io.flutter.plugin.common.PluginRegistry
  5. import tv.danmaku.ijk.media.player.IjkMediaPlayer
  6. import tv.danmaku.ijk.media.player.TextureMediaPlayer
  7. class IJK(private val registry: PluginRegistry.Registrar) {
  8. private val textureEntry = registry.textures().createSurfaceTexture()
  9. val id: Long
  10. get() = textureEntry.id()
  11. private val ijkPlayer: IjkMediaPlayer = IjkMediaPlayer()
  12. private val mediaPlayer: TextureMediaPlayer
  13. init {
  14. mediaPlayer = TextureMediaPlayer(ijkPlayer)
  15. mediaPlayer.surfaceTexture = textureEntry.surfaceTexture()
  16. }
  17. fun setUri(uri: String, callback: () -> Unit) {
  18. mediaPlayer.setDataSource(registry.activeContext(), Uri.parse(uri))
  19. mediaPlayer.setOnPreparedListener {
  20. callback()
  21. }
  22. }
  23. fun setNetUri(uri: String, callback: () -> Unit) {
  24. try {
  25. ijkPlayer.setOnPreparedListener {
  26. callback()
  27. }
  28. ijkPlayer.dataSource = uri
  29. ijkPlayer.prepareAsync()
  30. } catch (e: Exception) {
  31. e.printStackTrace()
  32. }
  33. }
  34. fun dispose() {
  35. mediaPlayer.releaseSurfaceTexture()
  36. mediaPlayer.release()
  37. ijkPlayer.release()
  38. textureEntry.release()
  39. }
  40. fun play() {
  41. try {
  42. mediaPlayer.start()
  43. // ijkPlayer.start()
  44. } catch (e: Exception) {
  45. e.printStackTrace()
  46. }
  47. }
  48. fun pause() {
  49. mediaPlayer.pause()
  50. }
  51. fun stop() {
  52. mediaPlayer.stop()
  53. }
  54. fun seekTo(msec: Long) {
  55. mediaPlayer.seekTo(msec)
  56. }
  57. fun getDuration(): Long {
  58. return mediaPlayer.duration
  59. }
  60. }