PLCameraStreamingKit 1.8.1

PLCameraStreamingKit 1.8.1

测试已测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布最后发布2016年7月

0dayZhDd19890612lawder 维护。



  • hzwangsiyu

PLCameraStreamingKit 是一个适用于 iOS 的 RTMP 直播推流 SDK,支持高度定制化和二次开发。其特色是支持 iOS Camera 画面捕获并进行 H.264 硬编码,同时支持 iOS 麦克风音频采样并进行 AAC 硬编码;还应根据移动网络环境的变化,实现了一套可供开发者灵活选择的编码参数集合。借助 PLCameraStreamingKit,开发者可以快速构建一款类似 MeerkatPeriscope 的手机直播应用。

功能特性

  • [x] 采集模块源码开放
  • [x] 支持硬件编码
  • [x] 多码率可选
  • [x] 支持 H.264 视频编码
  • [x] 支持 AAC 音频编码
  • [x] 支持前后摄像头
  • [x] 支持自动对焦
  • [x] 支持手动调整对焦点
  • [x] 支持闪光灯操作
  • [x] 支持多分辨率编码
  • [x] 支持 HeaderDoc 文档
  • [x] 支持构造带安全授权凭证的 RTMP 推流地址
  • [x] 支持 ARMv7, ARM64, i386, x86_64 架构
  • [x] 支持 RTMP 协议直播推流
  • [x] 支持音视频配置分离
  • [x] 支持推流时可变码率
  • [x] 提供发送 buffer
  • [x] 支持 Zoom 操作
  • [x] 支持音频静音操作
  • [x] 支持视频方向操作
  • [x] 支持自定义 DNS 解析
  • [x] 支持弱网丢帧策略
  • [x] 支持纯音频或纯视频推流
  • [x] 支持后台音频推流
  • [x] 支持水印功能
  • [x] 支持美颜功能

内容摘要

快速开始

先来看看 PLCameraStreamingKit 接入的步骤

配置工程

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

pod update
  • 完成!运行你工程的 workspace

示例代码

AppDelegate.m 中进行 SDK 初始化,如果未进行 SDK 初始化,在核心类 PLStreamingSession 初始化阶段将抛出异常

#import <PLStreamingKit/PLStreamingEnv.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [PLStreamingEnv initEnv];
    // Override point for customization after application launch.
    return YES;
}

在需要的地方添加

#import <PLCameraStreamingKit/PLCameraStreamingKit.h>

PLCameraStreamingSession 是核心类,你只需要关注并使用这个类就可以完成通过摄像头推流、预览的工作。如果你只需要做纯音频推流,在创建 PLCameraStreamingSession 时音频相关的 Configuration 传入 nil 即可。

推流前务必要先检查摄像头 / 麦克风的授权,并记得设置预览界面,StreamingSession 的创建需要 Stream 对象

// streamJSON 是从服务端拿回的
//
// 从服务端拿回的 streamJSON 结构如下:
//    @{@"id": @"stream_id",
//      @"title": @"stream_title",
//      @"hub": @"hub_name",
//      @"publishKey": @"publish_key",
//      @"publishSecurity": @"dynamic", // or static
//      @"disabled": @(NO),
//      @"profiles": @[@"480p", @"720p"],    // or empty Array []
//      @"hosts": @{
//            ...
//      }
NSDictionary *streamJSON;
PLStream *stream = [PLStream streamWithJSON:streamJSON];
// 授权后执行
void (^permissionBlock)(void) = ^{
            PLVideoCaptureConfiguration *videoCaptureConfiguration = [self.videoCaptureConfigurations defaultConfiguration];
            PLAudioCaptureConfiguration *audioCaptureConfiguration = [PLAudioCaptureConfiguration defaultConfiguration];
            PLVideoStreamingConfiguration *videoStreamingConfiguration = [self.videoStreamingConfigurations defaultConfiguration];
            PLAudioStreamingConfiguration *audioStreamingConfiguration = [PLAudioStreamingConfiguration defaultConfiguration];

      self.session = [[PLCameraStreamingSession alloc] initWithVideoCaptureConfiguration:videoCaptureConfiguration audioCaptureConfiguration:audioCaptureConfiguration videoStreamingConfiguration:videoStreamingConfiguration audioStreamingConfiguration:audioStreamingConfiguration stream:stream videoOrientation:orientation];

      self.session.delegate = self;
      self.session.previewView = self.view;
};

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

// 检查摄像头是否有授权
PLAuthorizationStatus status = [PLCameraStreamingSession cameraAuthorizationStatus];

if (PLAuthorizationStatusNotDetermined == status) {
    [PLCameraStreamingSession requestCameraAccessWithCompletionHandler:^(BOOL granted) {
    // 回调确保在主线程,可以安全对 UI 做操作
        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];

采集参数

编码参数

由于移动端网络环境不稳定及用户电量宝贵等原因,不建议直接使用最高码率和分辨率进行推流,以最佳编码参数来做设置可以带来更好的推流效果和用户体验。

如果你不确定如何配置各个编码参数,也不必担心,PLCameraStreamingKit 提供了一个编码配置的类来帮助你快速完成配置,你可以通过使用 SDK 预先定义好的 quality 来构建编码推流配置。

视频编码参数

// 视频推流质量
/*!
 * @abstract Video streaming quality low 1
 *
 * @discussion 具体参数 fps: 12, profile level: baseline31, video bitrate: 150Kbps
 */
extern NSString *kPLVideoStreamingQualityLow1;

/*!
 * @abstract Video streaming quality low 2
 *
 * @discussion 具体参数 fps: 15, profile level: baseline31, video bitrate: 264Kbps
 */
extern NSString *kPLVideoStreamingQualityLow2;

/*!
 * @abstract Video streaming quality low 3
 *
 * @discussion 具体参数 fps: 15, profile level: baseline31, video bitrate: 350Kbps
 */
extern NSString *kPLVideoStreamingQualityLow3;

/*!
 * @abstract Video streaming quality medium 1
 *
 * @discussion 具体参数 fps: 30, profile level: baseline31, video bitrate: 512Kbps
 */
extern NSString *kPLVideoStreamingQualityMedium1;

/*!
 * @abstract Video streaming quality medium 2
 *
 * @discussion 具体参数 fps: 30, profile level: baseline31, video bitrate: 800Kbps
 */
extern NSString *kPLVideoStreamingQualityMedium2;

/*!
 * @abstract Video streaming quality medium 3
 *
 * @discussion 具体参数 fps: 30, profile level: baseline31, video bitrate: 1000Kbps
 */
extern NSString *kPLVideoStreamingQualityMedium3;

/*!
 * @abstract Video streaming quality high 1
 *
 * @discussion 具体参数 fps: 30, profile level: baseline31, video bitrate: 1200Kbps
 */
extern NSString *kPLVideoStreamingQualityHigh1;

/*!
 * @abstract Video streaming quality high 2
 *
 * @discussion 具体参数 fps: 30, profile level: baseline31, video bitrate: 1500Kbps
 */
extern NSString *kPLVideoStreamingQualityHigh2;

/*!
 * @abstract Video streaming quality high 3
 *
 * @discussion 具体参数 fps: 30, profile level: baseline31, video bitrate: 2000Kbps
 */
extern NSString *kPLVideoStreamingQualityHigh3;

明确以上两者,即可直接获取最佳的视频编码配置。

// 该方法每次都会生成一个新的配置,不是单例方法。默认情况下,对应的参数为分辨率 (320, 480), video quality PLStreamingQualityMedium1
PLVideoStreamingConfiguration *videoConfiguration = [PLVideoStreamingConfiguration defaultConfiguration];

// 你也可以指定自己想要的分辨率和已有的 video quality 参数
PLVideoStreamingConfiguration *videoConfiguration = [PLVideoStreamingConfiguration configurationWithVideoSize:CGSizeMake(320, 480) videoQuality:kPLVideoStreamingQualityHigh1];

// 当已有的分辨率无法满足你的需求时,你可以自己定义所有参数,但请务必确保你清楚参数的含义
PLVideoStreamingConfiguration *videoConfiguration = [[PLVideoStreamingConfiguration alloc] initWithVideoSize:CGSizeMake(width, height) videoFrameRate:30 videoMaxKeyframeInterval:90 videoBitrate:1200 * 1000 videoProfileLevel:AVVideoProfileLevelH264Main32]];

Video Quality 具体参数

质量 每秒帧数 (FPS) 配置等级 视频码率 (Kbps)
低质量视频流1 12 基线31 150
低质量视频流2 15 基线31 264
低质量视频流3 15 基线31 350
中等质量视频流1 30 基线31 512
中等质量视频流2 30 基线31 800
中等质量视频流3 30 基线31 1000
高质量视频流1 30 基线31 1200
高质量视频流2 30 基线31 1500
高质量视频流3 30 基线31 2000

音频编码参数

// 音频推流质量
/*!
    @constant   kPLAudioStreamingQualityHigh1
    @abstract   音频编码推流质量 high 1。

    @discussion 具体参数 audio bitrate: 64Kbps。

    @since      v1.0.0
 */
extern NSString *kPLAudioStreamingQualityHigh1;

/*!
    @constant   kPLAudioStreamingQualityHigh2
    @abstract   音频编码推流质量 high 2。

    @discussion 具体参数 audio bitrate: 96Kbps。

    @since      v1.0.0
 */
extern NSString *kPLAudioStreamingQualityHigh2;

/*!
 @constant   kPLAudioStreamingQualityHigh3
 @abstract   音频编码推流质量 high 3。

 @discussion 具体参数 audio bitrate: 128Kbps。

 @since      v1.0.0
 */
extern NSString *kPLAudioStreamingQualityHigh3;

生成音频编码配置

// 音频配置默认使用 high2 作为质量选项
PLAudioStreamingConfiguration *audioConfiguration = [PLAudioStreamingConfiguration defaultConfiguration];

// 如果你需要自己定义音频质量
PLAudioStreamingConfiguration *audioConfiguration = [PLAudioStreamingConfiguration configurationWithAudioQuality:kPLAudioStreamingQualityHigh1];

音频质量 具体参数

质量 音频比特率(Kbps)
高质量音频流1 64
高质量音频流2 96
高质量音频流3 128

在创建好编码配置对象后,就可以用它来初始化 PLCameraStreamingSession 了。

流状态变更及处理

实现 PLCameraStreamingSessionDelegatePLAudioStreamingSessionDelegate 的回调方法,可以及时的得知流状态的变更及推流错误

- (void)cameraStreamingSession:(PLCameraStreamingSession *)session streamStateDidChange:(PLStreamState)state {
    // 当流状态变更为非 Error 时,会回调到这里
}
- (void)cameraStreamingSession:(PLCameraStreamingSession *)session didDisconnectWithError:(NSError *)error {
    // 当流状态变为 Error, 会携带 NSError 对象回调这个方法
}
- (void)streamingSession:(PLStreamingSession *)session streamStatusDidUpdate:(PLStreamStatus *)status {
    // 当开始推流时,会每间隔 3s 调用该回调方法来反馈该 3s 内的流状态,包括视频帧率、音频帧率、音视频总码率
}

变更推流质量及策略

在推流时,可以配合发送 buffer 自己设定不同的策略,来满足不同的网络环境。

使用 buffer 可用的方法

// BufferDelegate
@protocol PLStreamingSendingBufferDelegate <NSObject>

- (void)streamingSessionSendingBufferDidEmpty:(id)session;
- (void)streamingSessionSendingBufferDidFull:(id)session;

@end

// StreamingSession 中的 buffer 相关内容
@interface PLCameraStreamingSession (SendingBuffer)

@property (nonatomic, PL_WEAK) id<PLStreamingSendingBufferDelegate> bufferDelegate;

/// [0..1], 不可超出这个范围, 默认为 0.5
@property (nonatomic, assign) CGFloat    threshold;

/// Buffer 最多可包含的包数,默认为 300
@property (nonatomic, assign) NSUInteger    maxCount;
@property (nonatomic, assign, readonly) NSUInteger    currentCount;

@end

buffer 是一个可以缓存待发送内容的队列,它按照帧数作为缓存长度的判定,可以通过 maxCount 来读取和设定,buffer 的阈值设定体现你期望的变更推流质量的策略,默认阈值为 buffer 的 50%(0.5)。

当 buffer 变为空时,会回调

- (void)streamingSessionSendingBufferDidEmpty:(id)session;

当 buffer 满时,会回调

- (void)streamingSessionSendingBufferDidFull:(id)session;

当你希望在 streamStatus 变化,buffer empty 或者 buffer full 时变化 video configuration,可以调用 session 的 reloadVideoConfiguration: 方法

[self.session reloadVideoConfiguration:newConfiguraiton];

手动导入到工程

我们建议使用 CocoaPods 导入,如果由于特殊原因需要手动导入,可以按照如下步骤进行:

文档支持

PLCameraStreamingKit 使用 HeaderDoc 注释来做文档支持。 开发者无需单独查阅文档,直接通过 Xcode 就可以查看接口和类的相关信息,减少不必要的麻烦。

Encode 推荐

系统要求

  • iOS Target : >= iOS 7

版本历史

  • 1.8.1 (Release Notes && API Diffs)
    • 功能
      • 更新依赖的 PLStreamingKit 到 1.2.5
      • 新增自动重连功能,默认关闭
      • 新增模拟器编译支持
      • 水印和美颜功能调整为支持 iPhone 5、iPad 3、iPod touch 4 及以上设备
    • 缺陷
      • 修复已知场景可能存在的没有声音的问题
      • 修复填充模式改变可能导致 preview 的 frame 发生改变的问题
      • 修复触摸屏幕对焦无效的问题
      • 修复无法正确设置采集相机位置的问题
      • 修复 capture session 设置不正确可能导致 crash 的问题
      • 修复偶尔出现的画面卡住无法正常推流的问题
  • 1.8.0 (Release Notes && API Diffs)
    • 功能
      • 更新依赖的 PLStreamingKit 到 1.2.4
      • 新增内置美颜功能,美颜效果可调节
      • 新增单独调节前后置摄像头预览及推流是否镜像的接口
      • 新增动态帧率功能,通过降低采集帧率来适配弱网环境
    • 缺陷
      • 修复音视频时间戳偶尔出现的非单调递增的缺陷
      • 修复特殊机型可能出现的没有声音的问题
    • 优化
      • 优化水印性能,降低 CPU 和内存消耗
  • 1.7.2 (Release Notes && API Diffs)
    • 功能
      • 更新依赖的 PLStreamingKit 到 1.2.2
      • 新增回调队列配置功能
      • 新增默认摄像头位置配置项
      • 新增录制音量调节选项(由于系统原因,仅对除 iPhone 6s 系列以外的机型生效)
      • 支持初始化的时候传入 stream 为 nil
      • 支持快速重连操作,方便 4G 推流时切换 WIFI 场景快速切换网络
    • 缺陷
      • 修复特殊场景可能出现的电流音问题
      • 修复特殊场景可能出现的没有声音的问题
      • 修复后台推流时被音频打断结束之后无法正常恢复推流的问题
  • 1.7.1 (Release Notes && API Diffs)
    • 缺陷
      • 修复切换前置摄像头之后无法缩放的问题
      • 修复不添加水印无法正常推流的问题
  • 1.7.0 (Release Notes && API Diffs)
    • 功能
      • 新增后台推流功能(仅音频,因 iOS 隐私限制不允许后台访问摄像头)
      • 新增水印功能
      • 新增可选定制美颜功能(需联系工作人员)
    • 缺陷
      • 修复特定机型上的电流音等杂音问题
    • 版本
      • 将依赖的 PLStreamingKit 版本更新到 v1.2.0
    • 其他
      • 部分接口重命名
  • 1.6.3 (发布说明 && API 差异)
    • 将依赖的 PLStreamingKit 版本更新到 v1.1.6
    • 更新 Demo 以适应 PLStreamingKit v1.1.6 接口变更
  • 1.6.2 (发布说明 && API 差异)
    • 将依赖的 PLStreamingKit 版本更新到 v1.1.5
    • 支持 Zoom 操作
  • 1.6.1 (发布说明 && API 差异)
    • 将依赖的 PLStreamingKit 版本更新到 v1.1.3
    • 修复调用 - (void)reloadVideoConfiguration 方法时 fps 变更失败的问题
  • 1.6.0 (发布说明 && API 差异)
    • 将依赖的 PLStreamingKit 版本更新到 v1.1.2
    • 添加 PLStreamStatus 回调,便于客户端监控推流状态
    • 修复采集源 fps 变更失败的问题
  • 1.5.2 (发布说明 && API 差异)
    • 将依赖的 PLStreamingKit 版本更新到 v1.0.3
  • 1.5.1 (发布说明 && API 差异)
    • 将依赖的 PLStreamingKit 版本更新到 v1.0.2
    • 更改音频数据源采集部分,转换为单声道
  • 1.5.0 (发布说明 && API 差异)
    • 编码推流改为依赖 PLStreamingKit
    • 移除 PLAudioStreamingSession 类,建议仅推音频的 App 直接接入 PLStreamingKit
    • 摄像头及音频采集部分开源
    • 底层增加了 HappyDNS,解决部分地区 DNS 严重污染导致推流失败的问题
    • 优化 TCP 层发送,极大地解决了网络正常但推流中经常断开的问题
  • 1.4.16 (发布说明 && API 差异)
    • 解决 destroy 方法可能导致线程卡死的问题
  • 1.4.15 (发布说明 && API 差异)
    • 修复类库 .a 未更新的问题
  • 1.4.14 (发布说明 && API 差异)
    • 解决视频质量切换时导致的崩溃问题
    • 解决推流时触发的只有音频无视频问题
    • 解决音频采样导致的电流声问题
    • 解决潜在内存问题,整体提升稳定性
    • 视频编码统一设置为 baseline31 profileLevel
    • 最高支持分辨率限定为 720p
  • 1.4.13 (发布说明 && API 差异)
    • 更新静音行为,静音后不会中断发送数据包
    • 更新音频设备采样率获取方法
    • 更新底层库,避免冲突
  • 1.4.12 (发布说明 && API 差异)
    • 添加 smoothAutoFocusEnabled 参数,确保拍摄时对焦平滑过渡
    • 修复无网络环境或其他情况触发断流时引起的崩溃
    • 修复频繁切换摄像头时引起的崩溃
    • 修复内存泄漏
  • 1.4.11 (发布说明 && API 差异)
    • 修复 iPhone 6s 系列机型直播无声音问题
  • 1.4.10 (发布说明 && API 差异)
    • 修复错误的或不主动的重连导致 UI 卡顿的问题
  • 1.4.9 (发布说明 && API 差异)
    • 尝试修复 iPhone 6s 音频获取不到权限的问题
    • 优化丢包策略,以兼顾高延迟和低带宽的情况
    • 更新 demo 为全异步请求
  • 1.4.8 (发行说明 && API 差异)
    • 尝试修复 iPhone 6s 音频获取不到权限的问题
    • 修复了弱网环境下触发的内存和 CPU 占用过高的问题
  • 1.4.7 (发行说明 && API 差异)
    • 尝试修复音频无法获取权限的问题
    • 添加了关闭 SDK 预览渲染的接口
  • 1.4.6 (发行说明 && API 差异)
    • 修复了弱网环境下切换 VideoQuality 可能导致的崩溃问题
    • 添加了 PLAudioComponentFailedToCreateNotification 通知,当音频资源被占用时,创建音频结构失败会发送这个通知
  • 1.4.5 (发行说明 && API 差异)
    • 添加了对 CMSampleBufferRef 自定义渲染的支持
  • 1.4.4 (发行说明 && API 差异)
    • 为 PLCameraStreamingSession 的多个属性添加了 KVO 支持
    • 将时间计数改为包数计数
    • 针对弱网环境更改了丢帧策略,以确保不会出现花屏和声音抖动,而将无数据的情况改为断续,但可以保证画面和声音的流畅
    • 修改了发送队列的默认上下阈值,改为 0.3 和 0.7
  • 1.4.3 (发行说明 && API 差异)
    • 优化了网络层调用,添加了 Disconnecting 流状态
    • 抽离了可能导致推流中断的错误
    • 添加了错误回调,同时将错误信息返回,便于调试及异常处理
    • 修复了 destroy 调用导致的崩溃问题
    • 支持 iOS 9 的 bitcode
  • 1.4.2 (发行说明 && API 差异)
    • 添加了对 SendingBuffer 的支持
    • 修复了 iPhone 6s 下崩溃的问题
  • 1.4.1 (发行说明 && API 差异)
    • 添加了可以获取视频源数据的回调方法,便于开发者进行滤镜等处理
    • 对自定义分辨率进行了内部修正,以保证宽高均为 16 的倍数
  • 1.4.0 (发行说明 && API 差异)
    • 添加了音频推流的 PLAudioStreamingSession,纯音频推流合并到 PLCameraStreamingKit
    • 添加了后台推流支持,暂时仅在纯音频推流中有效
  • 1.3.2 (发行说明 && API 差异)
    • 修复了直播被电话/闹钟中断后后续直播无声音的问题
    • 更改了音频采集类型: RecordAndPlay -> Record
    • 添加了对蓝牙音频设备的支持
  • 1.3.1 (发行说明 && API 差异)
    • 修复了在调用 destroy 方法后重新创建 session 进入后台触发的崩溃问题
    • 去除了无用的依赖,将 SDK 大小从 17 MB 降低到 4.7 MB
  • 1.3.0 (发行说明 && API 差异)
    • 添加了带宽质量检测机制,在推流过程中可以无缝切换音视频质量,实现码率及帧率的动态调节
    • 添加了发送队列的配置及状态回调
    • 更新了 Example 以简单地说明如何使用发送队列和 Quality 组合推流策略
  • 1.2.8 (发行说明 && API 差异)
    • 更新了编码配置,将音视频编码配置分离,以提供更灵活的配置方案
    • 去除了 SIGPIPE 断点
    • 修复了 URL 错误时导致的崩溃
    • 修复了在创建 Session 后设置 Stream 推流失败的问题
  • 1.2.7 (发行说明 && API 差异)
    • 修复了断网后停止流时导致的 UI 卡死问题
    • 修复了停止推流时可能出现的崩溃问题
    • PLCameraStreamingSession 添加了 - (void)destroy 方法
    • 暂时去除了 iOS 8 编码,待进一步优化后再开发
    • 修复了反复进出持有 streamingSession 的 viewController 出现 IO 错误或者崩溃的问题
  • 1.2.6 (发布说明API 差异)
    • 修复了 iOS 8 以下版本推流时编码导致的崩溃问题
  • 1.2.5 (发布说明API 差异)
    • 更新了 Quality 配置
  • 1.2.4 (发布说明API 差异)
    • 添加全新的 iOS 8 硬编码器,减少编码延时
  • 1.2.3 (发布说明API 差异)
    • 更新了 PLStream 类结构
    • 添加新的 session 创建接口
    • 移除 publishHost,PLStream 对象支持自动生成推流地址,请搭配服务端 SDK 至少 1.2.0 或更高版本使用
  • 1.2.2 (发布说明API 差异)
    • 更新麦克风资源调用方式,添加进入后台后自动停用麦克风功能
  • 1.2.1 (发布说明API 差异)
    • 修复初次授权摄像头后预览界面为黑屏的问题
  • 1.2.0 (发布说明API 差异)
    • 添加了 PLStream 类,支持 Coding 协议便于打包存储
    • 更新 StreamingSession 创建方法,借助传递 PLStream 对象再无需推流时等待服务端生成推流地址
    • 完善 HeaderDoc 文档
  • 1.1.8 (发布说明API 差异)
    • 添加摄像头开启和关闭的操作,便于开发者控制 AVCaptureSession
  • 1.1.7 (发布说明API 差异)
    • 添加推流质量字段,方便开发者指定推流质量
    • 移除原配置中的网络选项
    • 默认情况下关闭了 PLLog
    • 添加摄像头开始运行的通知
    • 添加麦克风开始运行的通知
  • 1.1.6 (发布说明API 差异)
    • 尝试修复音频变声问题
  • 1.1.5 (发布说明API 差异)
    • 修复了重连后无法播放的问题
  • 1.1.4 (发布说明API 差异)
    • 更新了码率和采样率。现在统一使用 128Kbps 和 44100KHZ,用以解决噪音的问题
    • 更新了网络 socket。对 socket 在调试情况下出现的 SIGPIPE 进行了处理,不会再出现
    • 更新了网络状态的返回情况。当不是主动调用 close 接口导致的断开都将以 error 状态通知 delegate
  • 1.1.3 (发布说明API 差异)
    • 更新了获取视频截图的方法
    • 添加 HeaderDoc 格式注释文档
  • 1.1.2 (发布说明API 差异)
    • 添加自定义视频大小的编码配置
    • 添加进入后台后自动停止推流的支持
    • 添加保持常亮的开关
    • 添加获取当前录制截屏的功能
    • 修复进入后台导致崩溃的问题
    • 修复切换前置摄像头失效的问题
    • 添加发布说明说明每个版本变动
    • 添加 API 差异说明具体修改细节
  • 1.1.1
    • 修复 release 版本无法推流的 Bug
    • 内存优化,比 1.1.0 减少 6% 左右内存消耗
  • 1.1.0
    • 重构接口
    • 优化编码参数
    • 提供不同网络和分辨率下的多种配置可选
    • 添加消息通知,便于监听
    • 兼顾 arc 及非 arc 的工程
  • 1.0.0
    • 发布 CocoaPods 版本