iOS播放没有音频会话的视频

时间:2014-10-20 21:21:04

标签: ios mpmovieplayercontroller avplayer avaudiosession

我正在尝试使用MPMoviePlayerControllerAVPlayer在我的应用中播放短片。问题是(因为我的视频没有任何声音),我不想干扰后台其他应用程序播放的声音。我尝试使用AVAudioSession

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryAmbient  withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
[audioSession setActive:YES error:nil];

但我没有运气。一旦视频开始播放,背景中的音乐就会停止。我甚至试图将音频会话设置为无效:

   [[AVAudioSession sharedInstance] setActive:NO withOptions: AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];

但在这种情况下,声音停止半秒然后恢复,视频播放器停止播放。有什么方法可以实现我想做的事情吗?感谢。

3 个答案:

答案 0 :(得分:3)

我认为这对你来说不再适用,但可能与其他人有关。

没有什么可做的,但这里有一些解决方法。 关键是,当您初始化视频播放器时,将音频会话类别设置为环境,在这种情况下,它不会中断其他应用程序中的音频会话。然后,如果您需要“取消静音”视频,可以将音频会话类别设置为默认值(单独环境)。它将中断其他应用程序中的音频会话,并将继续播放带有声音的视频。

示例:

SELECT t1.Id, t1.Name, 
       COALESCE(sumOfSalaries, 0) - COALESCE(sumOfDeductions, 0) AS Net_Salary
FROM Manager AS t1
LEFT JOIN (
  SELECT Manager_id, SUM(Emp_Salary) AS sumOfSalaries
      FROM Salary 
      GROUP BY Manager_id
) AS t2 ON t1.Id = t2.Manager_id
  INNER JOIN (
      SELECT Manager_id, SUM(new_policy_deductions) AS sumOfDeductions
      FROM Employee
      GROUP BY Manager_id
) AS t3 ON t2.Manager_id = t3.Manager_id

P.S。我假设,FB应用程序正在制作类似的东西:当视频开始播放静音时,它不会打断其他应用音频,但是当用户按下视频时,它将全屏播放声音,此时会有该视频的活动音频会话,以及所有其他应用程序将停止播放音频。

答案 1 :(得分:0)

您是否正在使用音乐bkg应用进行测试? 如果没有,那么可能答案是大多数音乐应用程序包含:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleAudioSessionInterruption:)
                                             name:AVAudioSessionInterruptionNotification
                                           object:aSession];

和实现如:

- (void) handleAudioSessionInterruption:(NSNotification*)notification
{
    NSNumber *interruptionType = [[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey];
   .....code....

    switch (interruptionType.unsignedIntegerValue) {
        case AVAudioSessionInterruptionTypeBegan:{
            // stop playing
        } break;
        case AVAudioSessionInterruptionTypeEnded:{
            // continue playing
        } break;
        default:
            break;
    }
}

因此,当中断结束时,它们会停止播放并启动它。 (来电等)

答案 2 :(得分:0)

好答案!这是对感兴趣的人的 Swift 5 转换。

try? AVAudioSession.sharedInstance().setCategory(.ambient)