6

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

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

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

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

那么:如何以 iPad 视网膜分辨率播放视频?是否可以?在没有 MPMoviePlayerController 的情况下,还有其他方法可以在 iOS 应用程序上播放视频吗?

4

2 回答 2

2

根据我的测试,可以使用 H264 编码在视网膜 iPad 上播放 2048x1536 的文件。诀窍是手刹(或 FFMPEG)使用这些设置生成文件。在此页面上,您将找到一些 1536p 视频文件,可用于测试此分辨率下的播放。

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

于 2013-07-10T09:37:51.367 回答
1

iPad 视网膜能够显示 1080p 视频内容。这种格式与各种分辨率兼容,但最典型的定义为 1920 x 1080。这也是使用内置相机拍摄的视频的大小,因此很明显它可以播放,并且比文档中描述的要大可接受的尺寸。

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

视图控制器.h

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

@interface CDTViewController : UIViewController{
    MPMoviePlayerController *moviePlayer;
}

-(IBAction) playMovie;

@end

视图控制器.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 文件中有一个播放按钮,它的 touchUpInside 事件附加到 playMovie IBAction。

于 2013-01-19T08:51:52.733 回答