iOS设置蓝牙外设播放音频

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS设置蓝牙外设播放音频相关的知识,希望对你有一定的参考价值。

参考技术A

首先,你需要明确地通知AVAudiosession你允许声音可以被输出到蓝牙设备,通过setCategory设置
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionAllowBluetoothA2DP
error:&error];
通过增加AVAudioSessionCategoryOptionAllowBluetoothA2DP, 我们允许iOS通过蓝牙音频设备来播放我们App的声音。

接下来是设置蓝牙设备作为音频播放
1.设置为蓝牙外设播放
NSArray * bluetoothRoutes = @[AVAudioSessionPortBluetoothA2DP, AVAudioSessionPortBluetoothLE,
AVAudioSessionPortBluetoothHFP];
NSArray * routes = [[AVAudioSession sharedInstance] availableInputs];
AVAudioSessionPortDescription blueRoute;
for (AVAudioSessionPortDescription
route in bluetoothRoutes)

if ([types containsObject:route.portType])

blueRoute = route;


NSError *error;
if (blueRoute)
BOOL changeResult = [[AVAudioSession sharedInstance] setPreferredInput:bluetoothPort
error:&audioError];

2.设置耳机
NSArray * headsetRoutes = @[AVAudioSessionPortBuiltInMic];
NSArray * routes = [[AVAudioSession sharedInstance] availableInputs];
AVAudioSessionPortDescription headsetRoute;
for (AVAudioSessionPortDescription
route in headsetRoutes)

if ([types containsObject:route.portType])

headsetRoute = route;


NSError *error;
if (headsetRoute)
BOOL changeResult = [[AVAudioSession sharedInstance] setPreferredInput:headsetRoute
error:&audioError];

3.设置麦克风
NSArray * speakerRoutes = @[AVAudioSessionPortBuiltInSpeaker];
AVAudioSessionPortBluetoothHFP];
NSArray * routes = [[AVAudioSession sharedInstance] availableInputs];
AVAudioSessionPortDescription speakerRoute;
for (AVAudioSessionPortDescription
route in speakerRoutes)

if ([types containsObject:route.portType])

speakerRoute = route;


NSError *error;
if (speakerRoute)
BOOL changeResult = [[AVAudioSession sharedInstance] setPreferredInput:speakerRoute
error:&audioError];

iOS 中针对airplay、蓝牙和相关技术的近似音频延迟

【中文标题】iOS 中针对airplay、蓝牙和相关技术的近似音频延迟【英文标题】:Approximating audio latency in iOS for airplay, bluetooth and related technologies 【发布时间】:2016-07-07 22:09:50 【问题描述】:

在 iOS 上播放到蓝牙(或其他设备,如 airplay)时,是否有确定音频延迟的方法?

我已经搜索并找到了一些东西。例如,advanced audio distribution spec 多次提到“延迟”报告,但我不清楚在更一般的音频播放到某些设备的情况下如何从 iOS 访问它。

如果有一种方法,iOS 将使用该方法来播放视频,同时音频和视频同步播放,但它似乎并不这样做。但是,我确实看到一些其他系统能够对此进行补偿(例如,显然 android YouTube 播放器可以补偿:Detect or Approximate Bluetooth Latency on Android (Audio Playback))

【问题讨论】:

我认为延迟是随机的。 一些编解码器专为低延迟 BT 使用而设计。在测试中,我的一些设备的延迟明显且始终比其他设备长。 CoreBluetooth.framework 用于蓝牙低功耗(仅)。 BLE 不适合音频。那么标签是否正确? @larme 我不确定。这是问题的合理部分(因为我没有意识到这一点),合理的答案可能包括您的评论——我不确定 *** 的政策是什么。 【参考方案1】:

我自己也遇到过这个问题。 AvAudioSession 提供 outputLatency 的属性 以及inputLatency。当我连接到一副蓝牙耳机与 iPhone 麦克风和扬声器时,我确实看到了这些值的差异,尽管我无法说出这些数字有多准确。

【讨论】:

以上是关于iOS设置蓝牙外设播放音频的主要内容,如果未能解决你的问题,请参考以下文章

IOS 应用程序 - 蓝牙音频启用

Android 音频开始缓慢通过蓝牙 sco 开始播放

系统声音服务连接到汽车的蓝牙时不会播放音频

从无线耳机录制音频并通过蓝牙扬声器播放

android WebView 通过听筒或蓝牙播放音频

bluez5.50+pulseaudio实现蓝牙音响音频播放