對(duì)于我們的app要求后臺(tái)也實(shí)時(shí)錄音并推流主要要注意兩點(diǎn):
保證app進(jìn)入后臺(tái)后實(shí)時(shí)錄音 保證app進(jìn)入后臺(tái)后實(shí)時(shí)推流、或者藍(lán)牙語(yǔ)音數(shù)據(jù)交互
1.設(shè)置應(yīng)用為voip應(yīng)用
打開-info.plist文件,加入如下的key
Required background modes,追加
//保證app進(jìn)入后臺(tái)后實(shí)時(shí)錄音 App plays audio or streams audio/video using AirPlay
//保證app進(jìn)入后臺(tái)后實(shí)時(shí)推流 App provides Voice over IP services
2.將socket設(shè)置成異步模式,并將socket設(shè)置成VOIP類的,以便系統(tǒng)能夠托管它。
//保證不關(guān)閉原來(lái)的socket
CFStreamCreatePairWithSocket(NULL, (CFSocketNativeHandle)(mosq->sock), &readStream, NULL);
CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse);
//設(shè)置成voip socket
CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
3.安裝keepAliveTimeout handler,讓系統(tǒng)每隔一段時(shí)間重新建立連接
UIApplication *application = [UIApplication sharedApplication];
[application setKeepAliveTimeout:600 handler:^{ [self reconnect]; }];
到這里始直播然后將app切入后臺(tái)會(huì)發(fā)現(xiàn)屏幕頂部會(huì)有一條紅色條,然后用播放器播放會(huì)發(fā)現(xiàn)錄音與推流成功。
如果是在藍(lán)牙方面在后臺(tái)跟設(shè)備進(jìn)行語(yǔ)音數(shù)據(jù)交互的話只需要上面第一步
再添加后臺(tái)運(yùn)行藍(lán)牙模式即可
1.修改Info.plist文件,添加Required background modes鍵,并添加下面2個(gè)item
- bluetooth-central
- bluetooth-peripheral
這兩個(gè)item的意義分別為:
- App communicates using CoreBluetooth
- App shares data using CoreBluetooth
2.最后開啟后臺(tái)模式
NSArray *backgroundModes = [[[NSBundle mainBundle] infoDictionary]objectForKey:@"UIBackgroundModes"];
if ([backgroundModes containsObject:@"bluetooth-central"]) {
//后臺(tái)模式
_cMgr = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue() options:options];
}
這時(shí)候在app切入后臺(tái)就會(huì)發(fā)現(xiàn)可以跟藍(lán)牙設(shè)備通話,屏幕頂部也會(huì)有一條紅色條