| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- //
- // Created by Caijinglong on 2019-03-15.
- //
- #import "KKIjkNotifyChannel.h"
- #import "KKVideoInfo.h"
- @implementation KKIjkNotifyChannel {
- FlutterMethodChannel *channel;
- }
- - (instancetype)initWithController:(IJKFFMoviePlayerController *)controller textureId:(int64_t)textureId
- registrar:(NSObject <FlutterPluginRegistrar> *)registrar {
- self = [super init];
- if (self) {
- self.controller = controller;
- self.textureId = textureId;
- self.registrar = registrar;
- [self initial];
- }
- return self;
- }
- + (instancetype)channelWithController:(IJKFFMoviePlayerController *)controller textureId:(int64_t)textureId
- registrar:(NSObject <FlutterPluginRegistrar> *)registrar {
- return [[self alloc] initWithController:controller textureId:textureId registrar:registrar];
- }
- - (void)initial {
- NSString *channelName = [NSString stringWithFormat:@"top.kikt/ijkplayer/event/%lli", self.textureId];
- channel = [FlutterMethodChannel methodChannelWithName:channelName binaryMessenger:[self.registrar messenger]];
- [self registerObserver];
- }
- - (void)dispose {
- channel = nil;
- [self unregisterObservers];
- }
- - (void)registerObserver {
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(loadStateDidChange:)
- name:IJKMPMoviePlayerLoadStateDidChangeNotification
- object:_controller];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(moviePlayBackFinish:)
- name:IJKMPMoviePlayerPlaybackDidFinishNotification
- object:_controller];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(mediaIsPreparedToPlayDidChange:)
- name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification
- object:_controller];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(moviePlayBackStateDidChange:)
- name:IJKMPMoviePlayerPlaybackStateDidChangeNotification
- object:_controller];
- }
- - (void)unregisterObservers {
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:IJKMPMoviePlayerLoadStateDidChangeNotification
- object:_controller];
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:IJKMPMoviePlayerPlaybackDidFinishNotification
- object:_controller];
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification
- object:_controller];
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:IJKMPMoviePlayerPlaybackStateDidChangeNotification
- object:_controller];
- }
- - (NSDictionary *)getInfo {
- return [[_infoDelegate getInfo] toMap];
- }
- - (void)moviePlayBackStateDidChange:(NSNotification *)notification {
- [channel invokeMethod:@"playStateChange" arguments:[self getInfo]];
- }
- - (void)mediaIsPreparedToPlayDidChange:(NSNotification *)notification {
- [channel invokeMethod:@"prepare" arguments:[self getInfo]];
- }
- - (void)moviePlayBackFinish:(NSNotification *)notification {
- int reason = [[[notification userInfo] valueForKey:IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];
- switch (reason) {
- case IJKMPMovieFinishReasonPlaybackEnded:
- // if ([_infoDelegate isLooping]) {
- // [_controller setCurrentPlaybackTime:0];
- // [_controller play];
- // }
- break;
- case IJKMPMovieFinishReasonUserExited:
- if (_eventSink) {
- _eventSink(@{@"event": @"user quit"});
- }
- break;
- case IJKMPMovieFinishReasonPlaybackError:
- if (_eventSink) {
- _eventSink([FlutterError
- errorWithCode:@"VideoError"
- message:@"Video finished with error"
- details:nil]);
- }
- break;
- default:
- break;
- }
- // [channel invokeMethod:@"playFinish" arguments:[self getInfo]];
- }
- - (void)loadStateDidChange:(NSNotification *)notification {
- // [channel invokeMethod:@"loadStateChange" arguments:[self getInfo]];
- }
- @end
|