iOS5:MPMoviePlayerController仅限视频,无音频

Pac*_*acu 7 media-player ipad ios5

这不是No video,音频唯一的问题.这只是相对的.使用iOS 5.0时出现问题.运行4.3或更低版本的iPad可以完美地播放相同的视频文件.

由于iOS 5改变了初始化MPMoviePlayerControllers的方式,我不得不做一些基于SDK的编程才能显示视频.在实现我接下来要显示的片段之前,视频及其控件甚至不会显示在屏幕上.控制器仅显示具有给定CGRect帧的大小和原点的黑色方块.

我处理它的方式如下:

视频文件位于文档文件夹中.因此NSURL必须初始化为fileURLWithPath.完成后,我继续用给定的框架初始化控制器.由于它不起作用,视图只会在更改其loadState后添加播放器.这是通过订阅通知来实现的.订阅者选择器执行将控制器视图添加到主线程上的父视图,因为可以从其他线程处理通知.

初始化视频并将其添加到视图中:

-(void)addVideo:(NSString*) videoName onRect:(CGRect)rect {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    iPadMagazineAppDelegate *appDelegate = GET_APP_DELEGATE;
    NSArray *dirArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *dirName = [dirArray objectAtIndex:0];

    // get directory name for this issue
    NSURL *baseURL; 

    /* 
     BUGFIX: Video does not work on iOS 5.0

     */
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"5.0")){
        baseURL = [[NSURL fileURLWithPath:dirName]URLByAppendingPathComponent:[appDelegate.currentIssue getIssueDirectoryName ]];
    }else {
        baseURL = [[NSURL URLWithString:dirName] URLByAppendingPathComponent:[appDelegate.currentIssue getIssueDirectoryName]];
    }

    /* end  BUGFIX: Video does not work on iOS 5.0 */

    NSURL *videoURL = [baseURL URLByAppendingPathComponent:videoName];    


    MPMoviePlayerController * movieController= [[MPMoviePlayerController alloc]initWithContentURL:videoURL];

    // set frame for player
    movieController.view.frame = rect;

    // set  auto resizing masks
    [movieController.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];

    // don't auto play.
    [movieController setShouldAutoplay:NO];

    [movieController setUseApplicationAudioSession:YES];

    /*
     BUGFIX: Video does not work on iOS 5.0
     */
    if (SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(@"5.0")) {
        [movieController prepareToPlay];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadVideo:) name:MPMoviePlayerLoadStateDidChangeNotification object:movieController];  
    }else {
        [pdfView addSubview:movieController.view];
        [pdfView bringSubviewToFront: movieController.view];
    }

    /* end  BUGFIX: Video does not work on iOS 5.0 */

    [_moviePlayerViewControllerArray addObject:movieController];
    [movieController release];
    [pool release];
}
Run Code Online (Sandbox Code Playgroud)

通知处理程序

-(void)loadVideo:(NSNotification*)notification {

    for (MPMoviePlayerController *movieController in _moviePlayerViewControllerArray) {

        if (movieController.loadState != MPMovieLoadStateUnknown) {


            [pdfView performSelectorOnMainThread:@selector(addSubview:) withObject:movieController.view waitUntilDone:YES];
            [pdfView performSelectorOnMainThread:@selector(bringSubviewToFront:) withObject:movieController.view waitUntilDone:YES];
            [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerLoadStateDidChangeNotification object:movieController];
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

感谢您阅读这个大问题.我感谢你的回答.

干杯.

小智 13

试试这个:将MPMoviePlayerController的属性"useApplicationAudioSession"设置为"NO".


Pac*_*acu 8

显然有一个错误,但它与MPMoviePlayerController无关,而是与iOS 5本身有关.

我的iPad从开关静音,但仍然从iPod应用程序播放音频,所以我没有意识到它是那样的,所以MPMoviePlayerController很好,但操作系统的一部分没有注意到iPad被静音.

我已经在Apple的bug追踪器上提交了相应的错误.错误ID#10368531.

如果我浪费你的时间,我道歉.

更新:获得苹果公司的反馈意见.这是预期的行为.:\