【问题标题】:How do I get the audio from a stream to play through the iPhone's normal (NOT speakerphone) speaker?如何从流中获取音频以通过 iPhone 的普通(非扬声器)扬声器播放?
【发布时间】:2017-12-30 03:28:41
【问题描述】:

我正在使用 OpenTok 为 iOS 制作语音和视频聊天应用程序。当我插入耳机时,可以找到视频流和纯音频流的音频。如果没有,它会通过免提电话播放。我该如何更改?

【问题讨论】:

  • 有人对 [OTAudioDeviceManager setAudioDevice:] 或 OTAudioBus 类有任何帮助吗?

标签: ios objective-c opentok tokbox


【解决方案1】:

设置音频设备和音频总线

[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

【讨论】:

  • 是否有通过手机的小手机扬声器发送音频的音频驱动程序?喜欢您在正常通话中使用的扬声器吗?
  • @spnkr 用于设置应用使用的自定义音频设备。音频设备管理对音频捕获和渲染硬件的访问。更多详情tokbox.com/developer/sdks/ios/reference/Classes/…
  • @spnkr 我会根据你的问题回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
相关资源
最近更新 更多