【问题标题】:Can not seek with MPMoviePlayerController无法使用 MPMoviePlayerController 搜索
【发布时间】:2011-04-30 13:06:22
【问题描述】:

我要在 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]; 会出现同样的错误吗?
  • 首先,我尝试过。参数类型为 double。你说的对。但是苹果崩溃了。

标签: iphone mpmovieplayercontroller mediaplayback


【解决方案1】:

您可以使用currentPlaybackTime 属性查找MPMoviePlayerController,该属性记录在MPMediaPlayback Protocol Reference 中。

所以你的代码看起来像:

[player setCurrentPlaybackTime:1.0];

【讨论】:

    【解决方案2】:

    这是一个未记录的 API...不保证可以正常工作。事实上,你不应该期望它。 Apple 完全有可能将其从操作系统更新中删除,现在该方法不存在。

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

    【讨论】:

    • 您的来信表示苹果不允许使用非公共 API。我首先听到了那个声音。我在哪里可以看到相关文档?
    • 如果你真的不相信我(说真的,你为什么认为 Apple 会让非公共 API 通过?),然后阅读以下内容:developer.apple.com/appstore/resources/approval/guidelines.html -特别是第 2.5 节,“使用非公共 API 的应用将被拒绝”
    【解决方案3】:

    这是一个代码,可用于使用自定义滑块在 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;
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-25
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多