无法使用MPMoviePlayerController进行搜索

3

我要在MPMediaPlayerController上寻求时间轴。

我尝试使用MPMediaPlayerController的未记录方法setCurrentTime,如下所示。

[player setCurrentTime:1.f];

然后苹果就会跟随这些崩溃...
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MPMoviePlayerController setCurrentTime:]: unrecognized selector sent to instance 0x5619fe0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00f59be9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x010ae5c2 objc_exception_throw + 47
    2   CoreFoundation                      0x00f5b6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00ecb366 ___forwarding___ + 966
    4   CoreFoundation                      0x00ecaf22 _CF_forwarding_prep_0 + 50
    5   MPlayerExample                      0x0000227d -[MPlayerExampleViewController PauseVideo] + 69
    6   Foundation                          0x000367f6 __NSFireDelayedPerform + 441
    7   CoreFoundation                      0x00f3afe3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
    8   CoreFoundation                      0x00f3c594 __CFRunLoopDoTimer + 1220
    9   CoreFoundation                      0x00e98cc9 __CFRunLoopRun + 1817
    10  CoreFoundation                      0x00e98240 CFRunLoopRunSpecific + 208
    11  CoreFoundation                      0x00e98161 CFRunLoopRunInMode + 97
    12  GraphicsServices                    0x0188e268 GSEventRunModal + 217
    13  GraphicsServices                    0x0188e32d GSEventRun + 115
    14  UIKit                               0x002c642e UIApplicationMain + 1160
    15  MPlayerExample                      0x00001fe4 main + 102
    16  MPlayerExample                      0x00001f75 start + 53
)
terminate called after throwing an instance of 'NSException'

你确定将其更改为[player setCurrentTime:1.0];会产生相同的错误吗? - Ahmad Kayyali
首先,我尝试了那个。参数类型是双精度浮点数。你是对的。但是苹果崩溃了。 - HAPPY_TIGER
3个回答

11

您可以使用文档中记录的currentPlaybackTime属性,通过寻找MPMoviePlayerController来实现。文档链接:MPMediaPlayback Protocol Reference

所以您的代码应该如下:

[player setCurrentPlaybackTime:1.0];

1

这里有一段代码,可以在使用自定义滑块的情况下,在MPMoviePlayer中寻找视频。

//create slider  

slider1 = [[UISlider alloc] initWithFrame:CGRectMake(85, 435, 150,30)];
    [slider1 addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
    [slider1 setBackgroundColor:[UIColor clearColor]];
    slider1.minimumValue = 0;
    slider1.continuous = YES;

    [self.view addSubview:slider1];

// Set slider max value as moviePlayerController Total Duration and Current (Set Value ) as slider Value

-(void)sliderAction:(id)sender
{
    UISlider *slider = (UISlider*)sender;
    float value = slider.value;

    slider.maximumValue =  self.moviePlayerController.duration;

    self.moviePlayerController.currentPlaybackTime = value;


}

1

这是一个未记录的API...不能保证其可用。事实上,你不应该期望它能够正常工作。苹果公司有可能在操作系统更新中删除了它,现在这个方法已经不存在了。

如果这很重要,你正在传递一个浮点数,我认为它需要一个双精度浮点数。这可能是你遇到问题的原因。但如果你正在编写一个要在应用商店分发的应用程序,那么进一步调查就没有意义了 - 你的应用程序将被拒绝。苹果公司会在提交时自动静态分析代码,任何使用非公共API的行为都会导致你的应用程序被直接退回给你。


你的信意味着苹果不允许使用非公共API。我第一次听到这个声音。我在哪里可以看到相关文件? - HAPPY_TIGER
如果你真的不相信我(而且,为什么你认为苹果会让非公共API通过?),那就去读一下这个链接:https://developer.apple.com/appstore/resources/approval/guidelines.html - 特别是第2.5节,“使用非公共API的应用将被拒绝”。 - lxt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接