我正在使用OpenTok为iOS制作语音和视频聊天应用。当我插入耳机时,可以找到视频流和仅音频流的音频。如果我没有,则通过扬声器播放。我该如何改变?
答案 0 :(得分:2)
设置音频设备和音频总线
[OTAudioDeviceManager setAudioDevice:[[OTKBasicAudioDevice alloc] init]];
使用OpenTok iOS SDK中定义的OTAudioFormat类来定义自定义音频驱动程序使用的音频格式。 [OTKBasicAudioDevice init]方法创建OTAudioFormat类的实例,并设置音频格式的采样率和通道数:
- (id)init
{
self = [super init];
if (self) {
self = [super init];
if (self) {
_otAudioFormat = [[OTAudioFormat alloc] init];
_otAudioFormat.sampleRate = kSampleRate;
_otAudioFormat.numChannels = 1;
}
// ...
}
return self;
}
init方法还设置了一些本地属性,用于报告设备是否正在捕获,捕获是否已初始化,是否正在渲染以及渲染是否已初始化:
_isDeviceCapturing = NO;
_isCaptureInitialized = NO;
_isDeviceRendering = NO;
_isRenderingInitialized = NO;
init方法还设置一个文件以将传入的音频保存到文件中。这仅仅是为了说明自定义音频驱动程序的音频渲染器的使用:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *path = [paths[0] stringByAppendingPathComponent:kOutputFileSampleName];
[[NSFileManager defaultManager] createFileAtPath:path
contents:nil
attributes:nil];
_outFile = [NSFileHandle fileHandleForReadingAtPath:path];
[OTKBasicAudioDevice setAudioBus:]方法(由OTAudioDevice协议定义)设置音频设备使用的音频总线(由OTAudioBus协议定义)。音频设备使用此对象向会话发送音频样本和从会话接收音频样本。该对象的实例在实现对象的生命周期中保留。发布者将访问OTAudioBus对象以获取音频样本。订阅者将(从订阅的流)发送音频样本到OTAudioBus对象。这是[OTAudioDevice setAudioBus:]方法的OTKBasicAudioDevice实现:
- (BOOL)setAudioBus:(id<OTAudioBus>)audioBus
{
self.otAudioBus = audioBus;
return YES;
}
[OTKBasicAudioDevice setAudioBus:]方法(由OTAudioDevice协议定义)方法设置音频呈现格式,即在init方法中创建的OTAudioFormat实例:
- (OTAudioFormat*)renderFormat
{
return self.otAudioFormat;
}
更多参考使用this。