录音代码不写了。
问题:
在使用VLC播放视频时录音,切换声道会导致录音中断。
因为VLC播放器中设置了AVAudioSession.sharedInstance().setActive(false)
导致的。
原因:
因为录音需要保证你的AVAudioSession为激活状态。中断导致录音暂停。
解决:
修改VLC播放器切换声道代码,不让它控制AVAudioSession的active
一、
AVAudioSession类由AVFoundation框架引入。每个IOS应用都有一个音频会话。这个会话可以被AVAudioSession类的sharedInstance类方法访问,如下:
AVAudioSession*audioSession = [AVAudioSession sharedInstance];
在获得一个AVAudioSession类的实例后,你就能通过调用音频会话对象的setCategory:error:实例方法,来从IOS应用可用的不同类别中作出选择。下面列出了可供使用的音频会话类别:
AVAudioSessionCategoryAmbient:
用于非以语音为主的应用,随着静音键和屏幕关闭而静音。不中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。锁屏时,应用将停止所有正在回放的音频。如果正当iPod播放一手歌时,你开始播放音频,将设备设为静音模式并不能停止你的音频回放。
AVAudioSessionCategorySoloAmbient(默认类别)
这个类别非常像AVAudioSessionCategoryAmbient类别,除了会停止其他程序的音频回放,比如iPod程序。当设备被设置为静音模式,你的音频回放将会停止。
AVAudioSessionCategoryPlayback
会静止其他应用的音频回放(比如iPod应用的音频回放)。你可以使用AVAudioPlayer的prepareToPlay和play方法,在你的应用中播放声音。屏幕被锁定或者设备为静音模式,音频会放都会继续。
AVAudioSessionCategoryRecord
这会停止其他应用的声音(比如iPod)并让你的应用也不能初始化音频回放(比如AVAudioPlayer)。在这种模式下,你只能进行录音。使用这个类别,调用AVAudioPlayer的prepareToPlay会返回YES,但是调用play方法将返回NO。主UI界面会照常工作。这时,即使你的设备屏幕被用户锁定了,应用的录音仍会继续。
AVAudioSessionCategoryPlayAndRecord
这个类别允许你的应用中同时进行声音的播放和录制。当你的声音录制或播放开始后,其他应用的声音播放将会停止。主UI界面会照常工作。这时,即使屏幕被锁定或者设备为静音模式,音频回放和录制都会继续。
AVAudioSessionCategoryAudioProcessing
这个类别用于应用中进行音频处理的情形,而不是音频回放或录制。设置了这种模式,你在应用中就不能播放和录制任何声音。调用AVAPlayer的prepareToPlay和play方法都将返回NO。其他应用的音频回放,比如iPod,也会在此模式下停止。
//判断如果其他应用有正在播放的音频 恢复播放。
[[AVAudioSession sharedInstance] setActive:NO
withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
error:nil];
网友评论