在新iPad视网膜上播放高分辨率视频(2048x1536)

时间:2012-09-06 19:32:09

标签: ios ipad video mpmovieplayercontroller retina-display

我想知道是否有一些方法可以播放带有Retina resolutoion(2048x1536)的iPad视频。 我正在开发一个可以用MPMoviePlayerController全屏播放视频的应用程序,但它无法播放iPad视网膜分辨率的视频。 来自文档:

  

支持的格式此类播放支持的任何电影或音频文件   在iOS中。这包括流内容和固定长度文件。   对于电影文件,这通常意味着扩展名为.mov的文件,   .mp4,.mpv和.3gp并使用以下压缩之一   标准:

     

H.264 Baseline Profile Level 3.0视频,最高640 x 480,30 fps。   (基线配置文件不支持B帧。)MPEG-4第2部分视频   (简单配置文件)如果您使用此类播放音频文件,它   在播放音频时显示带有QuickTime徽标的白色屏幕。   对于音频文件,此类支持高达48 kHz的AAC-LC音频,和   MP3(MPEG-1 Audio Layer 3),最高48 kHz,立体声音频。

这不是真的!我可以在iPhone上播放H.264视频(960x640),在ipad上播放1024x768视频......

所以: 如何使用iPad视网膜分辨率播放视频?可能吗? 还有其他方法可以在没有MPMoviePlayerController的情况下在iOS应用上播放视频吗?

2 个答案:

答案 0 :(得分:2)

根据我的测试,可以使用H264编码在视网膜iPad上播放2048x1536的文件。诀窍是Handbrake(或FFMPEG)使用those settings生成文件。在此页面上,您将找到可用于测试此分辨率播放的some 1536p video files

顺便说一下,我在处理本地视频时建议的一件好事就是只嵌入半视网膜"分辨率视频。 半视网膜,我的意思是1536x1152 。这提供了比非视网膜分辨率更多的信息,因此视频在视网膜iPad上更清晰一些。它足够好,小到足以在iPhone 3GS之前的任何iOS设备上播放。所以您只需要为所有设备添加一个视频

答案 1 :(得分:1)

iPad视网膜能够显示1080p视频内容。此格式与各种分辨率兼容,但最常定义为1920 x 1080.这也是使用内置摄像头拍摄的视频大小,因此显然它可以播放并且比文档状态更大。可接受的尺寸。

我能够使用以下代码验证这一点。创建基本单视图项目并将视频文件添加到支持文件组中。

ViewController.h

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>

@interface CDTViewController : UIViewController{
    MPMoviePlayerController *moviePlayer;
}

-(IBAction) playMovie;

@end

ViewController.m

@implementation CDTViewController
- (void)viewDidLoad {
    [super viewDidLoad];
}

-(void)playMovie {
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"IMG_3803" ofType:@"MOV"]];
    moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];

    if ([moviePlayer respondsToSelector:@selector(loadState)]) {
        [moviePlayer setControlStyle:MPMovieControlStyleEmbedded];
        [moviePlayer setFullscreen:NO];
        [moviePlayer prepareToPlay];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadStateDidChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
    }
}

- (void)moviePlayerLoadStateDidChange:(NSNotification *)notification {
    if ([moviePlayer loadState] == MPMovieLoadStateStalled) {
        //handle stall
    } else if([moviePlayer loadState] != MPMovieLoadStateUnknown) {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerLoadStateDidChangeNotification object:nil];

        [[moviePlayer view] setFrame:self.view.bounds];
        [[self view] addSubview:[moviePlayer view]];
        [moviePlayer play];
    }
}
@end

不要忘记将MediaPlayer.framework添加到您的项目中。这个例子假设xib文件中有一个播放按钮,它有一个附加到playMovie IBAction的touchUpInside事件。