如何:在 iOS App Objective C iOS 8 中将本地 MP4 视频作为背景

Posted

技术标签:

【中文标题】如何:在 iOS App Objective C iOS 8 中将本地 MP4 视频作为背景【英文标题】:How to : Local MP4 Video as Background in iOS App Objective C iOS 8 【发布时间】:2015-06-23 14:23:34 【问题描述】:

我尝试使用一个简单的 13 秒 mp4 视频作为登录屏幕的背景循环。

我希望视频自动播放和循环播放。它没有音频,我也不需要控件。

我需要它前面的按钮和其他对象。

我尝试使用 WebView 并将本教程中的 MP4 制作为 GIF 文件:https://medium.com/swift-programming/ios-make-an-awesome-video-background-view-objective-c-swift-318e1d71d0a2

但问题是我的 5 MB MP4(转换为 GIF)大小为 95 MB。

我不能用这个方法。

有没有“好用”的方法?

编辑:

好的,这就是我现在所做的。

我导入了 AVFoundation。

这是视图中的代码

- (void)viewDidLoad 
[super viewDidLoad];

NSURL* mURL = [[NSBundle mainBundle] URLForResource:@"App-BG-Loop" withExtension:@"mp4"];

AVPlayer* player = [AVPlayer playerWithURL:mURL];
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerItemDidReachEnd:)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:[player currentItem]];

AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame = _videoView.bounds;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
playerLayer.needsDisplayOnBoundsChange = YES;
[_videoView.layer addSublayer:playerLayer];

_videoView.layer.needsDisplayOnBoundsChange = YES;

[player play];

// Do any additional setup after loading the view, typically from a nib.

- (void)playerItemDidReachEnd:(NSNotification *)notification 
AVPlayerItem *p = [notification object];
[p seekToTime:kCMTimeZero];

这在 iOS 模拟器中效果很好,但是当我尝试在设备上启动它时,它不会启动或播放视频。视图只是保持白色。 No Error 什么都没有。

有什么想法吗?

编辑 2:

无法在设备上播放的问题是视频太大了。 Apple 仅在设备上支持 1080p。

【问题讨论】:

创建图像的 UIView 动画。这通常是最简单的方法 您可能想研究一种将 mp4 转换为 GIF 的更好方法,因为这比在后台处理循环视频要容易得多。或者正如@soulshined 提到的,创建一个带有图像的动画来制作你自己的 gif(各种)......***.com/questions/6040528/… 感谢您的 cmets。我会尝试你的方法 tmrw 也许你可以检查我的编辑? 【参考方案1】:

我最近也不得不使用动画。我先用UIImageView 尝试过,但内存管理不太好。我最终用它制作了一个 .mp4 并在 MPMoviePlayerController 中使用它:

-(void)setupDashboardAnimation

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(checkMovieStatus:)
                                                 name:MPMoviePlayerLoadStateDidChangeNotification
                                               object:nil];

    NSBundle *bundle = [NSBundle mainBundle];
    NSString *moviePath = [bundle pathForResource:@"some_movie" ofType:@"some_extention"];
    NSURL *movieURL = [NSURL fileURLWithPath:moviePath];

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];

    _backgroundAnimationMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
    _backgroundAnimationMoviePlayer.controlStyle = MPMovieControlStyleNone;
    _backgroundAnimationMoviePlayer.repeatMode = MPMovieRepeatModeOne;
    _backgroundAnimationMoviePlayer.view.backgroundColor = [UIColor clearColor];
    for (UIView *aSubView in _backgroundAnimationMoviePlayer.view.subviews)
    
        aSubView.backgroundColor = [UIColor clearColor];
    
    [_backgroundAnimationMoviePlayer.view setFrame:imv_background.frame];
    [_backgroundAnimationMoviePlayer prepareToPlay];


-(void)checkMovieStatus:(NSNotification *)notification

    if (_backgroundAnimationMoviePlayer.loadState & (MPMovieLoadStatePlayable | MPMovieLoadStatePlaythroughOK) && _backgroundAnimationMoviePlayer.playbackState != MPMoviePlaybackStatePlaying)
    
        [self.view insertSubview:_backgroundAnimationMoviePlayer.view aboveSubview:imv_background];
        [_backgroundAnimationMoviePlayer play];
        [[NSNotificationCenter defaultCenter] removeObserver:self
                                                        name:MPMoviePlayerLoadStateDidChangeNotification
                                                      object:nil];
        dashboardAnimationDidSetup = YES;
    

【讨论】:

它可能是一个带有视频静止画面的 UIImageView,所以你看不到视频“正在加载”

以上是关于如何:在 iOS App Objective C iOS 8 中将本地 MP4 视频作为背景的主要内容,如果未能解决你的问题,请参考以下文章

tableview 图像未正确显示 - iOS 8 iPhone App Objective C

如何从我的 IOS(Objective c) 应用程序分享微信应用程序上的文本?

Objective C如何在App内部调用外部dylib 和 framwork

如何在ios Objective C中传递PayTm事务的GET请求

如何在 iOS(Swift 或 Objective C)中实现这样的套接字调用?

如何从 AudioUnits C 函数调用 Objective-C 方法? (iOS)