2013-01-24 251 views
4

我看到一張紙條,上面這個地址 http://developer.apple.com/library/ios/#qa/qa1668/_index.html視頻播放的背景

注:如果您在電影中禁用視頻軌道,或將其從相關AVPlayer卸下AVPlayerLayer它將使電影音頻繼續在後臺播放。但是,這些更改必須在應用程序切換到後臺之前生效。

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
    [self becomeFirstResponder]; 

    [[AVAudioSession sharedInstance] setDelegate: self]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 



    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:AnUrl]]; 
    AVPlayer *avPlayer = [AVPlayer playerWithPlayerItem:playerItem]; 


    AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer]; 
    avPlayerLayer.frame = self.view.layer.bounds; 
    UIView *newView = [[UIView alloc] initWithFrame:self.view.bounds]; 
    [newView.layer addSublayer:avPlayerLayer]; 
    [self.view addSubview:newView]; 

    [avPlayer play]; 

該程序的工作原理。但在背景中,聲音被切斷。我想繼續播放背景音效。我如何從AVPlayer中分離AVPlayerLayer?

回答

1

上面你的代碼是好的,但是從背景轉換到/在做這些事情:

  • 當應用程序被激活:(您avPlayerLayer必須AVPlayerLayer您添加到您的視圖)

    - (void)applicationDidBecomeActive:(UIApplication *)application { 
        [avPlayerLayer playerLayerWithPlayer:avPlayer]; 
    
    } 
    
  • 當應用程序進入背景:(您avPlayerLayer必須AVPlayerLayer您添加到您的視圖)

    - (void)applicationWillResignActive:(UIApplication *)application { 
        [avPlayerLayer playerLayerWithPlayer:nil]; 
    } 
    

另外,不要忘記在plist的UIBackgroundModes中添加音頻。

乾杯。

+0

我認爲這可能正是我所需要的!但是,快速的問題(可能是noobish):'applicationWillResignActive'是一個'AppDelegate'方法,我所有的'AVPlayerLayer'代碼都在一個單獨的ViewController文件中。能夠在AppDelegate中引用VideoViewController的播放器的最佳方式是什麼?將VideoVideoController導入到AppDelegate中,還是在應用程序範圍內「獲取AVPlayer當前正在運行的」方法或其他東西?那裏的最佳做法是什麼? – Nerrolken

+0

您可以使用委託或通知。 (1)對於代表的使用,請參閱此stackoverflow問題:http://stackoverflow.com/questions/626898/how-do-i-create-delegates-in-objective-c。 (2)有關通知,請參閱:http://stackoverflow.com/questions/9011868/whats-the-best-way-to-detect-when-the-app-is-entering-the-background-for-我的看法。我會建議使用通知。 (使用UIApplicationDidBecomeActiveNotification和UIApplicationWillResignActiveNotification)。 – mltpyt