TestsTested | ✗ |
LangLanguage | Obj-CObjective C |
License | Apache 2 |
ReleasedLast Release | Aug 2015 |
Maintained by 0dayZh, Dd19890612.
PLAudioStreamingKit 是一个适用于 iOS 的 RTMP 直播推流 SDK,可高度定制化和二次开发。特色是支持 iOS 麦克风音频采样并进行 AAC 硬编码;同时,还支持后台持续推流。
先来看看 PLAudioStreamingKit 接入的步骤
pod 'PLAudioStreamingKit'
pod install
或
pod update
在需要的地方添加
#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
现在当你的 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
};
默认的 configuration 使用 128Kbps 码率。
当前版本采样率恒定为 44100
PLAudioStreamingKit 通过 HeaderDoc 直接实现文档支持。 开发者无需单独查阅文档,直接通过 Xcode 就可以查看接口和类的相关信息,减少不必要的麻烦。
- (void)destroy
方法到 PLAudioStreamingSession
PLStream
类,支持 Coding
协议便于打包存储StreamingSession
创建方法,借助传递 PLStream
对象再无需推流时等待服务端生成推流地址