是否可以在后台使用Avplayer播放视频?

Vis*_*tri 18 iphone video ios avplayer ios5

我正在使用Avplayer来显示视频片段,当我回去(应用程序在后台)视频停止时.我怎么能继续播放视频?

我搜索了后台任务和后台线程,IOS只支持后台音乐(不是视频) http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

这里是关于在后台播放视频的一些讨论

1)https://discussions.apple.com/thread/2799090?start=0&tstart=0

2)http://www.cocoawithlove.com/2011/04/background-audio-through-ios-movie.html

但AppStore中有很多应用程序,可以在背景中播放视频

Swift播放器:https://itunes.apple.com/us/app/swift-player-speed-up-video/id545216639?mt = 8& sign-mpt = int%3D2

SpeedUpTV:https://itunes.apple.com/ua/app/speeduptv/id386986953 mt = 8

Vis*_*tri 13

此方法支持所有可能性:

  • 屏幕由用户锁定;
  • 项目清单
  • 按下主页按钮;

只要你有一个运行iOS的AVPlayer实例就可以防止设备自动锁定.

首先,您需要配置应用程序以支持Info.plist文件中的音频背景,在UIBackgroundModes数组中添加audio元素.

然后把你的AppDelegate.m放入

- (BOOL)应用程序:(UIApplication*)应用程序didFinishLaunchingWithOptions:(NSDictionary*)launchOptions:

这些方法

[[AVAudioSession sharedInstance] setDelegate: self];    
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
Run Code Online (Sandbox Code Playgroud)

#import <AVFoundation/AVFoundation.h>

然后在控制AVPlayer的视图控制器中

-(void)viewDidAppear:(BOOL)animated
{
  [super viewDidAppear:animated];
  [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
  [self becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

- (void)viewWillDisappear:(BOOL)animated
{
    [mPlayer pause];    
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

然后回应

 - (void)remoteControlReceivedWithEvent:(UIEvent *)event {
        switch (event.subtype) {
            case UIEventSubtypeRemoteControlTogglePlayPause:
                if([mPlayer rate] == 0){
                    [mPlayer play];
                } else {
                    [mPlayer pause];
                }
                break;
            case UIEventSubtypeRemoteControlPlay:
                [mPlayer play];
                break;
            case UIEventSubtypeRemoteControlPause:
                [mPlayer pause];
                break;
            default:
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果用户按下主页按钮,则需要另一个技巧来恢复再现(在这种情况下,再现以淡出暂停).

当你控制视频的再现(我有播放方法)设置

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

以及将启动计时器并恢复再现的相应方法.

- (void)applicationDidEnterBackground:(NSNotification *)notification
{
    [mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}
Run Code Online (Sandbox Code Playgroud)

它适用于我在Backgorund播放视频.谢谢大家.