PLAudioStreamingKit 1.1.6

PLAudioStreamingKit 1.1.6

测试已测试
lang语言 Obj-CObjective C
许可证 Apache 2
发布上次发布2015年8月

0dayZhDd19890612 维护。



  • 0dayZh

PLAudioStreamingKit 是一个适用于 iOS 的 RTMP 直播推流 SDK,可进行高度定制化和二次开发。特色是支持 iOS 麦克风音频采样并进行 AAC 硬编码;同时,还支持后台持续推流。

功能特性

  • [x] 硬件编解码
  • [x] 多码率可选
  • [x] AAC 音频编码
  • [x] HeaderDoc 文档支持
  • [x] 内置生成安全的 RTMP 推流地址
  • [x] ARM64 支持
  • [x] 支持 RTMP 协议直播推流
  • [x] 支持后台推流

内容摘要

快速开始

首先看看如何将 PLAudioStreamingKit 集成到项目中

配置工程

  • 配置你的 Podfile 文件,添加以下配置信息
pod 'PLAudioStreamingKit'
  • 安装 CocoaPods 依赖
pod install

pod update
  • 完成!运行你项目的 workspace

示例代码

在需要的地方添加

#import <PLAudioStreamingKit/PLAudioStreamingKit.h>

PLAudioStreamingSession 是核心类,你只需要关注并使用这个类就可以完成通过摄像头推流、预览的工作

在推流前务必先检查麦克风的授权,创建 StreamingSession 需要 Stream 对象和 Publish host

// Stream 对象,正常情况该对象是从自有的服务端请求拿到的
PLStream *stream = [PLStream streamWithJSON:@{@"id": @"STREAM_ID",
                                              @"title": @"STREAM_TITLE",
                                              @"hub": @"HUB_NAME",
                                              @"publishKey": @"PUBLISH_KEY",
                                              @"publishSecurity": @"dynamic", // or static
                                              @"disabled": @(NO)}];

// Publish host
NSString *publishHost = @"YOUR_RTMP_PUBLISH_HOST";

// 授权后执行
void (^permissionBlock)(void) = ^{
        PLAudioStreamingConfiguration *configuration = [PLAudioStreamingConfiguration defaultConfiguration];
        self.session = [[PLAudioStreamingSession alloc] initWithConfiguration:configuration
                                                                        stream:stream
                                                               rtmpPublishHost:publishHost];
        self.session.delegate = self;
};

void (^noPermissionBlock)(void) = ^{ // 处理未授权情况 };

// 检查麦克风是否有授权
PLAuthorizationStatus status = [PLAudioStreamingSession microphoneAuthorizationStatus];

if (PLAuthorizationStatusNotDetermined == status) {
    [PLAudioStreamingSession requestMicrophoneAccessWithCompletionHandler:^(BOOL granted) {
        granted ? permissionBlock() : noPermissionBlock();
    }];
} else if (PLAuthorizationStatusAuthorized == status) {
    permissionBlock();
} else {
    noPermissionBlock();
}

推流操作

// 开始推流,无论 security policy 是 static 还是 dynamic,都无需再单独计算推流地址
[self.session startWithCompleted:^(BOOL success) {
    // 这里的代码在主线程运行,所以可以放心对 UI 控件做操作
    if (success) {
        // 连接成功后的处理
        // 成功后,在这里才可以读取 self.session.pushURL,start 失败和之前不能确保读取到正确的 URL
    } else {
        // 连接失败后的处理
    }
}];

// 停止推流
[self.session stop];

销毁推流 Session

[self.session destroy];

后台推流

PLAudioStreamingKit 提供了两种后台模式,分别为:

typedef NS_ENUM(NSUInteger, PLAudioStreamingBackgroundMode) {
    PLAudioStreamingBackgroundModeAutoStop = 0,
    PLAudioStreamingBackgroundModeKeepAlive,
    PLAudioStreamingBackgroundModeDefault = PLAudioStreamingBackgroundModeAutoStop
};

如果要让 App 在后台后仍然可以继续推流,只需简单的配置即可。

// 将 PLAudioStreamingSession 实例的 backgroundMode 设置为 PLAudioStreamingBackgroundModeKeepAlive
self.session.backgroundMode = PLAudioStreamingBackgroundModeKeepAlive;

开启工程的 Background Modes 中的 Audio and AirPlay

BackgroundMode

现在,当你的 App 正在推流时,进入后台或关闭屏幕后,推流都将继续。

你可以通过实现 delegate 的方法来获取即将开始后台推流任务和即将结束后台推流任务的回调

- (void)audioStreamingSessionWillBeginBackgroundTask:(PLAudioStreamingSession *)session;
- (void)audioStreamingSession:(PLAudioStreamingSession *)session willEndBackgroundTask:(BOOL)isExpirationOccurred;

编码参数

初始化 PLAudioStreamingConfiguration 时,可以指定 Bitrate

typedef NS_ENUM(NSUInteger, PLStreamingAudioBitRate) {
    PLStreamingAudioBitRate_64Kbps = 64000,
    PLStreamingAudioBitRate_96Kbps = 96000,
    PLStreamingAudioBitRate_128Kbps = 128000,
    PLStreamingAudioBitRate_Default = PLStreamingAudioBitRate_128Kbps
};

默认配置使用 128Kbps 码率。

当前版本采样率恒定为 44100

文档支持

PLAudioStreamingKit 通过 HeaderDoc 直接实现文档支持。开发者无需单独查阅文档,直接通过 Xcode 就可以查看接口和类的相关信息,这减少了不必要的麻烦。

Encode 推荐

系统要求

  • iOS 目标:>= iOS 7

版本历史

  • 1.1.6 (发布说明) && (API 差异)
    • 修复URL错误时导致的崩溃
    • 去除了 SIGPIPE 断点
  • 1.1.5 (发布说明) && (API 差异)
    • 修复断网后停止流时导致的 UI 卡死问题
    • 修复停止推流时可能出现的崩溃问题
    • 修复反复进出持有 streamingSession 的 viewController 时出现的 IO 错误或崩溃问题
    • 修复开始推流时因主线程占用导致网络不佳时的卡顿问题
    • - (void)destroy 方法添加到 PLAudioStreamingSession
    • 恢复了 96Kbps 的音频码率
  • 1.1.4 (发布说明) && (API 差异)
    • 更新麦克风调用,提升启动和停用麦克风的效率
  • 1.1.3 (发布说明) && (API 差异)
    • 修复暂停麦克风时出现的卡顿问题
  • 1.1.2 (发布说明) && (API 差异)
    • 修复未推流情况下进入后台仍占用音频资源的问题
  • 1.1.1 (发布说明) && (API 差异)
    • 添加后台推流支持
    • 添加后台任务的回调
  • 1.1.0 (发布说明) && (API 差异)
    • 添加了 PLStream 类,支持 Coding 协议以便打包存储
    • 更新 StreamingSession 创建方法,通过传递 PLStream 对象,无需推流时等待服务端生成推流地址
  • 1.0.2 (发布说明) && (API 差异)
    • 更新仓库地址
  • 1.0.1 (发布说明) && (API 差异)
    • 修 Complex 音问题
  • 1.0.0 (发布说明)
    • 发布 CocoaPods 版本