IjkplayerPlugin.m 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #import "IjkplayerPlugin.h"
  2. #import "FlutterIjkManager.h"
  3. #import "FlutterIJK.h"
  4. @interface FlutterMethodCall (Ijk)
  5. - (int64_t)getId;
  6. - (int64_t)getIdParamFromDict;
  7. - (NSString *)getStringParam:(NSString *)key;
  8. @end
  9. @implementation IjkplayerPlugin {
  10. FlutterIjkManager *manager;
  11. }
  12. - (instancetype)initWithRegistrar:(NSObject <FlutterPluginRegistrar> *)registrar {
  13. self = [super init];
  14. if (self) {
  15. self.registrar = registrar;
  16. manager = [FlutterIjkManager managerWithRegistrar:registrar];
  17. }
  18. return self;
  19. }
  20. + (instancetype)pluginWithRegistrar:(NSObject <FlutterPluginRegistrar> *)registrar {
  21. return [[self alloc] initWithRegistrar:registrar];
  22. }
  23. + (void)registerWithRegistrar:(NSObject <FlutterPluginRegistrar> *)registrar {
  24. FlutterMethodChannel *channel = [FlutterMethodChannel
  25. methodChannelWithName:@"top.kikt/ijkplayer"
  26. binaryMessenger:[registrar messenger]];
  27. IjkplayerPlugin *instance = [IjkplayerPlugin pluginWithRegistrar:registrar];
  28. [registrar addMethodCallDelegate:instance channel:channel];
  29. }
  30. - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result {
  31. dispatch_queue_t mainQueue = dispatch_get_main_queue();
  32. dispatch_async(mainQueue, ^{
  33. if ([@"create" isEqualToString:call.method]) {
  34. @try {
  35. int64_t id = [self->manager create];
  36. result(@(id));
  37. }
  38. @catch (NSException *exception) {
  39. result([FlutterError errorWithCode:@"1" message:@"创建失败" details:exception]);
  40. }
  41. } else if ([@"dispose" isEqualToString:call.method]) {
  42. int64_t id = [call getId];
  43. [self->manager disposeWithId:id];
  44. } else if ([@"play" isEqualToString:call.method]) {
  45. FlutterIJK *ijk = [self->manager findIJKWithId:call.getId];
  46. if (ijk) {
  47. [ijk play];
  48. result(@(1));
  49. }
  50. } else if ([@"pause" isEqualToString:call.method]) {
  51. FlutterIJK *ijk = [self->manager findIJKWithId:[call getId]];
  52. if (ijk) {
  53. [ijk pause];
  54. }
  55. } else if ([@"stop" isEqualToString:call.method]) {
  56. FlutterIJK *ijk = [self->manager findIJKWithId:[call getId]];
  57. if (ijk) {
  58. [ijk stop];
  59. }
  60. } else if ([@"setDataSource" isEqualToString:call.method]) {
  61. FlutterIJK *ijk = [self->manager findIJKWithId:[call getIdParamFromDict]];
  62. if (ijk) {
  63. NSString *uri = [call getStringParam:@"uri"];
  64. [ijk setDateSourceWithUri:uri];
  65. result(nil);
  66. } else {
  67. result([FlutterError errorWithCode:@"1" message:@"设置失败" details:nil]);
  68. }
  69. } else {
  70. result(FlutterMethodNotImplemented);
  71. }
  72. });
  73. }
  74. - (void)runOnUI:(DISPATCH_NOESCAPE dispatch_block_t)block {
  75. dispatch_queue_t mainQueue = dispatch_get_main_queue();
  76. dispatch_sync(mainQueue, block);
  77. }
  78. @end
  79. @implementation FlutterMethodCall (Ijk)
  80. - (int64_t)getId {
  81. return [[self arguments] intValue];
  82. }
  83. - (int64_t)getIdParamFromDict {
  84. return [[self arguments][@"id"] intValue];
  85. }
  86. - (NSString *)getStringParam:(NSString *)key {
  87. return [self arguments][key];
  88. }
  89. @end