我正在尝试使用MPMoviePlayerController
或AVPlayer
在我的应用中播放短片。问题是(因为我的视频没有任何声音),我不想干扰后台其他应用程序播放的声音。我尝试使用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];
但在这种情况下,声音停止半秒然后恢复,视频播放器停止播放。有什么方法可以实现我想做的事情吗?感谢。
答案 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)