Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video MPMoviePlayerController-黑屏,音频作品_Video_Ios7_Mpmovieplayercontroller - Fatal编程技术网

Video MPMoviePlayerController-黑屏,音频作品

Video MPMoviePlayerController-黑屏,音频作品,video,ios7,mpmovieplayercontroller,Video,Ios7,Mpmovieplayercontroller,我知道也有人问过类似的问题,但我的问题与其他问题略有不同,我自己还没有找到解决办法 我有一个应用程序,可以故意阻止大部分应用程序的界面旋转。但是,该应用程序确实可以播放视频,并且在该视图上允许旋转 该应用程序已经在商店中使用了一段时间,并按预期运行,但我收到了一些关于视频无法在运行iOS 7的设备上播放的报告(音频确实可以播放)。令人恼火的是我无法复制这个问题(我已经在4s、5和5s上进行了测试)。视频和音频在我的所有设备上都可以正常工作 在“详细视图”屏幕上,有一个播放按钮,该按钮将启动一个新

我知道也有人问过类似的问题,但我的问题与其他问题略有不同,我自己还没有找到解决办法

我有一个应用程序,可以故意阻止大部分应用程序的界面旋转。但是,该应用程序确实可以播放视频,并且在该视图上允许旋转

该应用程序已经在商店中使用了一段时间,并按预期运行,但我收到了一些关于视频无法在运行iOS 7的设备上播放的报告(音频确实可以播放)。令人恼火的是我无法复制这个问题(我已经在4s、5和5s上进行了测试)。视频和音频在我的所有设备上都可以正常工作

在“详细视图”屏幕上,有一个播放按钮,该按钮将启动一个新视图的切换,该视图允许全屏视频和旋转-

“全屏视频”屏幕是带有MPMoviePlayerController*moviePlayer和(iAction)playMovie的UIViewController;-将自动调用该操作,以便在新视图出现时立即开始视频播放

viewDidLoad看起来像

[super viewDidLoad];
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:[[self.detailItem valueForKey:@"exerciseVideo"] description] ofType:@"mov"]];
moviePlayer =  [[MPMoviePlayerController alloc]
                initWithContentURL:url];
self.moviePlayer.contentURL = url;
NSError *_error = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &_error];

[moviePlayer stop];
[moviePlayer setShouldAutoplay:NO];
[NSTimer scheduledTimerWithTimeInterval:0.5
                                 target:self
                               selector:@selector(playMovie)
                               userInfo:nil
                                repeats:NO];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:moviePlayer];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerDidExitFullscreenNotification
                                           object:moviePlayer];

moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;
moviePlayer.allowsAirPlay = YES;
[self.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];
这部动作片看起来像

[super viewDidLoad];
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:[[self.detailItem valueForKey:@"exerciseVideo"] description] ofType:@"mov"]];
moviePlayer =  [[MPMoviePlayerController alloc]
                initWithContentURL:url];
self.moviePlayer.contentURL = url;
NSError *_error = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &_error];

[moviePlayer stop];
[moviePlayer setShouldAutoplay:NO];
[NSTimer scheduledTimerWithTimeInterval:0.5
                                 target:self
                               selector:@selector(playMovie)
                               userInfo:nil
                                repeats:NO];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:moviePlayer];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerDidExitFullscreenNotification
                                           object:moviePlayer];

moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;
moviePlayer.allowsAirPlay = YES;
[self.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];
有什么理由视频不能播放这些代码吗?我想知道它是否与单个设备上的设置相关(或者如果有其他后台任务,可能与内存相关),但我在这里碰壁,试图解决一个无法复制的问题

如有任何建议,将不胜感激。

  • 删除不必要的self.moviePlayer.contentURL分配
  • 停止使用奇怪的延迟播放(
    schedueledTimer…
  • 将所有代码移动到
    viewdide:..
  • 添加一个标志(例如,
    self.playerInitialized
    ),在进入/离开全屏后防止重新启动播放器(因为这将重新触发该外观事件)
    • viewDidLoad
    • 视图显示:…
      中,检查该标志是否设置为
      false
    • 如果是
      false
      ,请从上面的
      viewdide:…
    • 在该条件下,将其设置为
      true
    • 在播放机通知处理程序中,将该标志重置为信号中止/完成播放的
      false
    • 确保在该点完全取消初始化播放器和所有通知处理程序
      • 删除不必要的self.moviePlayer.contentURL分配
      • 停止使用奇怪的延迟播放(
        schedueledTimer…
      • 将所有代码移动到
        viewdide:..
      • 添加一个标志(例如,
        self.playerInitialized
        ),在进入/离开全屏后防止重新启动播放器(因为这将重新触发该外观事件)
        • viewDidLoad
        • 视图显示:…
          中,检查该标志是否设置为
          false
        • 如果是
          false
          ,请从上面的
          viewdide:…
        • 在该条件下,将其设置为
          true
        • 在播放机通知处理程序中,将该标志重置为信号中止/完成播放的
          false
        • 确保在该点完全取消初始化播放器和所有通知处理程序

      尝试删除不必要的
      self.moviePlayer.contentURL
      分配,停止使用奇怪的延迟播放(schedueledTimer…)并将所有代码移动到
      ViewDidDisplay:…
      @直到我将其移动到ViewDidDisplay,每当我按下“完成”按钮,视频就会重新开始(我假设是因为一旦视频停止,ViewDidDisplay会再次被调用,重新开始视频-moviePlayBackDidFinish似乎不会被调用。想法?向viewController添加一个标志,该标志在viewDidLoad中设置为false,在ViewDidDisplay中设置为true。在ViewDidDisplay中将其设置为true之前,启动玩家。只有当该标志设置为false时,才启动init部分。有意义吗?@直到完美为止。它在我所有的设备和模拟器上为我播放,所以我将把它上传到商店,看看它是否解决了问题。非常感谢您的帮助。在我收到最终用户的反馈之前,我不知道它是否有效(因为之前的设置在我的模拟器和设备上也适用!)我会重复我的评论作为一个正确的答案-如果你的用户给出了积极的反馈,那就去接受吧。我很确定你以前使用的解决方案是非常脆弱的,在很多情况下很容易失败。你应该真正避免这样的延迟/延迟呼叫,因为它们通常是完全错误的,只有在所有其他事情失败后才是最后的手段。试试看删除不必要的
      self.moviePlayer.contentURL
      分配,停止使用奇怪的延迟播放(schedueledTimer…),并将所有代码移动到
      ViewDidDisplay:…
      @直到我将其移动到ViewDidDisplay,每当我按下“完成”按钮,视频就会重新开始(我假设是因为一旦视频停止,ViewDidDisplay会再次被调用,重新开始视频-moviePlayBackDidFinish似乎不会被调用。想法?向viewController添加一个标志,该标志在viewDidLoad中设置为false,在ViewDidDisplay中设置为true。在ViewDidDisplay中将其设置为true之前,启动玩家。只有当该标志设置为false时,才启动init部分。有意义吗?@直到完美为止。它在我所有的设备和模拟器上为我播放,所以我将把它上传到商店,看看它是否解决了问题。非常感谢您的帮助。在我收到最终用户的反馈之前,我不知道它是否有效(因为以前的设置也适用于我的simu