ijk_event_channel.dart 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. part of 'ijkplayer.dart';
  2. class _IJKEventChannel {
  3. int get textureId => controller?.textureId;
  4. IjkMediaController controller;
  5. _IJKEventChannel(this.controller);
  6. MethodChannel channel;
  7. String get channelName => "top.kikt/ijkplayer/event/$textureId";
  8. Completer _prepareCompleter;
  9. Future<void> init() async {
  10. channel = MethodChannel(channelName);
  11. channel.setMethodCallHandler(handler);
  12. }
  13. void dispose() {
  14. channel.setMethodCallHandler(null);
  15. controller = null;
  16. }
  17. Future<dynamic> handler(MethodCall call) async {
  18. switch (call.method) {
  19. case "finish": // 播放完毕
  20. // var index = call.arguments["type"];
  21. // var type = FinishType.values[index];
  22. onPlayFinish(getInfo(call));
  23. break;
  24. case "playStateChange":
  25. onPlayStateChange(getInfo(call));
  26. break;
  27. case "prepare":
  28. onPrepare(getInfo(call));
  29. break;
  30. case "rotateChanged":
  31. onRotateChanged(call);
  32. break;
  33. default:
  34. return MissingPluginException(
  35. "$channelName ${call.method} not implement",
  36. );
  37. }
  38. return true;
  39. }
  40. VideoInfo getInfo(MethodCall call) {
  41. var map = call.arguments.cast<String, dynamic>();
  42. return VideoInfo.fromMap(map);
  43. }
  44. void onPlayFinish(VideoInfo info) {
  45. controller.isPlaying = info.isPlaying;
  46. controller.pause();
  47. }
  48. void onPlayStateChange(VideoInfo info) {
  49. controller.isPlaying = info.isPlaying;
  50. }
  51. void onPrepare(VideoInfo info) {
  52. controller.isPlaying = info.isPlaying;
  53. _prepareCompleter?.complete();
  54. _prepareCompleter = null;
  55. }
  56. Future<void> waitPrepare() {
  57. _prepareCompleter = Completer();
  58. return _prepareCompleter.future;
  59. }
  60. Future<void> autoPlay(IjkMediaController ijkMediaController) async {
  61. try {
  62. await waitPrepare();
  63. await ijkMediaController.play();
  64. } catch (e) {
  65. LogUtils.info(e);
  66. }
  67. }
  68. Future<void> disableAutoPlay(IjkMediaController ijkMediaController) async {
  69. try {
  70. await waitPrepare();
  71. await ijkMediaController.pause();
  72. } catch (e) {
  73. LogUtils.info(e);
  74. }
  75. }
  76. void onRotateChanged(MethodCall call) {
  77. var info = getInfo(call);
  78. LogUtils.debug("onRotateChanged , info = $info");
  79. }
  80. }
  81. // enum FinishType {
  82. // playEnd,
  83. // userExit,
  84. // error,
  85. // }