我无法使用 MPMoviePlayerController
从电影中提取缩略图图像
-requestThumbnailImagesAtTimes: timeOption:
我 99% 确定我已正确设置所有内容;我根本没有收到这些通知。
我最初在 ReactiveCocoa
工作;为了缩小可能性,我有一个没有它的最小损坏示例。
@import MediaPlayer;
- (void)imagePickerControllerUIImagePickerController *)picker didFinishPickingMediaWithInfoNSDictionary *)info {
// 1. register the observer before requesting the thumbnails
[[NSNotificationCenter defaultCenter] addObserverForName:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
// 4. this never gets hit
NSLog(@"%@", note.name);
}];
// 2. this works fine - media url is correct etc
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[info objectForKey:UIImagePickerControllerMediaURL]];
// 3. previously was using integers instead of floats; fixed that but this still doesn't do anything
[moviePlayer requestThumbnailImagesAtTimes[ @0.0f, @1.0f ] timeOption:MPMovieTimeOptionExact];
// ...
}
@import MediaPlayer;
- (void)imagePickerControllerUIImagePickerController *)picker didFinishPickingMediaWithInfoNSDictionary *)info {
// 1. set the file URL
self.viewModel.movieURL = [info objectForKey:UIImagePickerControllerMediaURL];
// ...
}
// in viewmodel
- (void)viewDidLoad {
RACSignal *moviePlayerSignal = [[RACObserve(self, movieURL) ignore:nil] map:^id(NSURL *url) {
// 2. this allocates correctly
return [[MPMoviePlayerController alloc] initWithContentURL:url];
}];
// 3. observe the moviePlayerSignal;
[[[moviePlayerSignal map:^id(MPMoviePlayerController *player) {
@strongify(self);
NSLog(@"%@", player); // checking that the player exists etc - it does; all good here.
// register the observer before we request the thumbnail
RACSignal *notification = [[[NSNotificationCenter defaultCenter] rac_addObserverForName:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:player] takeUntil:[self rac_willDeallocSignal]];
// request the thumbnail
[player requestThumbnailImagesAtTimes[ @0.0f ] timeOption:MPMovieTimeOptionExact];
// map the signal into a stream of signals on the observer
return notification;
// if we subscribeNext without flattening we correctly get back RACSignals every time
}] flatten] subscribeNext:^(id x) {
// the flattened signal never gets a next because the player isn't firing notifications
NSLog(@"WHY DOESN'T THIS WORK!?");
}];
}
[[NSNotificationCenter defaultCenter] addObserver:self
selectorselector(didReceiveImage
name:MPMoviePlayerThumbnailImageRequestDidFinishNotification
object:self.player];
查看通知的对象。 您需要将其设置为 MPMoviePlayerController。 所以必须写在MPMoviePlayerController的首字母之后。
关于ios - MediaPlayer -requestThumbnailImagesAtTimes 未触发通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25064253/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |