LFLiveKitMac
将 LFLiveKit 移植到 macOS
LFLiveKit 是一个开源的 iOS RTMP 流媒体 SDK,本项目已将 LFLiveKit 移植到 macOS。它可以帮助你在 macOS 应用中广播 RTMP 直播流。
要求
目前只在以下操作系统和 Xcode 版本上进行了测试
- macOS 10.13 和 Xcode 9.1 到 9.2
- macOS 10.12 和 Xcode 8.3
然而,它应该支持 Xcode 7 和 macOS 10.8 及以上版本。
使用方法
与 iOS 不同,一个 Mac 用户可能连接了很多外部音频和视频捕获设备,例如 USB麦克风、摄像头等。因此,我们修改了创建 LFLiveSession 对象的接口,创建视频设备和一个音频设备是必须的。
您的代码可能如下所示
LFLiveAudioConfiguration *audioConfig = [LFLiveAudioConfiguration defaultConfiguration];
LFLiveVideoConfiguration *videoConfig = [LFLiveVideoConfiguration defaultConfigurationForQuality:LFLiveVideoQuality_Medium3];
AVCaptureDevice *audioDevice = [LFLiveSession availableAudioDevices][0];
AVCaptureDevice *videoDevice = [LFLiveSession availableCameraDevices][0];
_session = [[LFLiveSession alloc] initWithAudioConfiguration:audioConfig audioDevice:audioDevice videoConfiguration:videoConfig videoDevice:videoDevice captureType:LFLiveCaptureMaskAll];
_session.delegate = self;
安装
该 SDK 支持 CocoaPods。请在 Podfile 中添加 pod LFLiveKitMac
,然后调用 pod install。
对原始 LFLiveKit 的修改
由于 iOS 和 macOS 的 API 不同,我们需要修改 LFLiveKit,使其能够在 macOS 上构建和运行。我们所做的是包括
- 将所有 OpenES API 调用更改为相应的 OpenGL 调用。
- 更改音频录制组件。LFLiveKit 在 iOS 上使用远程IO节点,但我们需要在 macOS 上使用 kAudioUnitSubType_HALOutput。
- 更改 GPUImageFramebuffer 生成像素缓冲区的方式。GPUImageFramebuffer 使用 iOS 特定的纹理缓存来读取处理过的纹理并将它们写入 CVPixelBufferRef 对象。但是,缓存在 macOS 上不存在。我们必须使用其他方式来创建 CVPixelBufferRef 对象。
- LFHardwareAudioEncoder 在 macOS 上无法工作,因此我们始终使用 LFH264VideoEncoder。
- 为了简化移植,暂时删除了一些视频过滤器。
- 相机手电筒和旋转设置也一并删除,因为 macOS 不支持这些功能。
注意
无法访问相机和麦克风
如果尝试通过调用 [LFLiveSession availableAudioDevices]
和 [LFLiveSession availableCameraDevices]
获取相机和音频设备,而它们没有任何返回结果,您可能需要检查 Xcode 中的 "功能" 选项卡。
请选择 Xcode 项目中的应用程序目标,并选择第二个选项卡 "功能"。然后,勾选 "硬件:相机" 和 "硬件:麦克风" 复选框。完成设置后,您才能访问用户的硬件。
不要使用省电音频 I/O 模式
Apple 提供了一个名为 Audio Power Hint 的 API,有助于节省电池寿命。一旦您希望帮助用户节省更多电力,可以通过调用 AudioObjectSetPropertyData 将 kAudioHardwarePropertyPowerHint
设置为 kAudioHardwarePowerHintFavorSavingPower
,或者在 Info.plist 文件中将 AudioHardwarePowerHint
键设置为 "Favor Saving Power"。
将 Audio Power Hint 设置为节能模式非常适合音频播放,但对于录制来说却很糟糕。当处于节能模式时,I/O 缓冲区大小会改变,这可能会导致录制的音质变差。
有关 Audio Power Hint 的更多信息,请参阅 技术说明 TN2321。
享受吧!
许可
LFLiveKit 在 MIT 许可下发布。有关详细信息,请参阅 LICENSE。