【问题标题】:play hi-res video (2048x1536) on New iPad retina在新 iPad 视网膜上播放高分辨率视频 (2048x1536)
【发布时间】:2012-09-06 19:32:09
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: ios ipad video mpmovieplayercontroller retina-display


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-20
      • 2015-06-05
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多