KSY Live iOS SDK
Source Type: Binary SDK Charge Type: free of charge
阅读对象
本文档面向所有使用金山云直播SDK的开发者、测试人员等,要求读者具备一定的iOS编程开发经验,并希望读者有阅读wiki的习惯。
一. 功能特性
金山云直播SDK是金山云提供的直播解决方案的一部分,负责iOS端音视频数据的采集、处理、推流和播放。
金山云直播SDK不限制用户的推流、拉流地址。用户不仅限于使用金山云直播SDK并且无需使用金山云的云服务。
金山云直播SDK不收取任何授权使用费用,没有任何失效时间或远程关闭的后门。同时金山云直播SDK也不要求ak/sk等鉴权,不包含任何用户标识信息。
金山云直播SDK提供业内一流的H.265编码、解码能力,H.265功能完全免费,欢迎使用。
金山云直播SDK目前没有提供开源代码,如果需要其他定制化开发功能,请通过金山云商务渠道联系。
1.1 关于热更新
金山云SDK保证,提供的金山云直播SDK没有使用任何热更新技术,例如:RN(ReactNative)、weex、JSPatch等,请放心使用。
1.2 推流功能
- AAC音频编码(支持软、硬件编解码)
- H.264视频编码(支持软、硬件编解码,支持基准/主/高清晰度配置)
- H.265视频软件编解码器
- H.264视频编码(支持软编码H.264/H.265,支持硬件编解码H.264(支持基准/主/高清晰度配置))
- 多分辨率编码支持
- 摄像头控制(方向、闪光灯、前后摄像头)
- 摄像头控制(可以调用原生的系统API)
- 用户可自由设定音视频码率
- 根据网络带宽自适应调整视频码率,网络自适应模式可配置
- 支持RTMP协议直播推流
- 提供两种层次的API:简单易用的kit类API和灵活的组件化API,提供开源的kit类代码
- 能够与GPUImage无缝集成
- 提供GPU实现的内置美颜滤镜
- 支持背景音乐播放
- 支持混音
- 支持视频动态推流开关/纯音频推流
- 支持后台推流
- 支持earphone return(耳返)
- 支持画中画推流
- 支持预览和采集分辨率分别设置,支持任意分辨率
- 支持第三方连麦
- 场景编码
- 支持软、硬件编解码的性能编码模式
- 支持预览和推流分别镜像
- 在线API文档支持
- 支持边推边录,在直播推流过程中同时保存录像文件
- 支持立体声推流(双声道)
- 支持涂鸦推流
- 支持桌面录制、手游直播
1.3 播放特点
- 与系统播放器MPMoviePlayerController接口一致,可以无缝快速切换至KSYMediaPlayer;
- 支持本地全媒体格式,并对主流的媒体格式(mp4, avi, wmv, flv, mkv, mov, rmvb 等)进行优化;
- 支持广泛的流式视频格式,如HLS, RTMP, HTTP伪流式等;
- 低延时直播体验,配合金山云推流SDK,可以达到全程直播稳定的4秒内延时;
- 实现快速全屏播放,为用户带来更快捷优质的播放体验;
- 版本适配支持iOS 7.0以上版本;
- 业内一流的H.265解码;
- 小于2M大小的超轻量级直播SDK;
1.4 文档
1.4 关于热更新
金山云SDK保证,提供的KSYLive iOS直播SDK未使用热更新技术,例如:RN(ReactNative)、weex、JSPatch等,请放心使用。
1.5 关于费用
金山云SDK保证,提供的KSYLive iOS直播SDK可用于商业应用,不会收取任何SDK使用费用。但基于KSYLive iOS直播SDK的其他商业服务,将由特定供应商收取授权费用,大致包括:
- 云存储
- CDN分发
- 动态贴纸
- 连麦
- 第三方美颜
二. 推流端大事记
2.1 2016年发布大事记
- 2016.02.25 上行网络自适应上线;
- 2016.03.26 内置美颜上线;
- 2016.04.11 支持美声四种混响模式上线;
- 2016.05.18 耳返上线;
- 2016.06.12 画中画推流上线;
- 2016.06.27 支持短视频录制;
- 2016.08.24 支持纯音频推流,支持后台推流,支持视频动态发送开关;
- 2016.08.31 场景编码,有效提升直播画质;
- 2016.09.07 内置新美颜上线;
- 2016.09.12 kit类顶层代码开源,podspec中将集成framework改为集成静态库
- 2016.09.21 特效滤镜上线;
- 2016.09.26 双人连麦稳定版本上线;
- 2016.09.28 视频硬编性能编码模式上线。音频AAC硬编功能上线。网络自适应场景上线;
- 2016.10.19 支持推流横竖屏动态变化;
- 2016.10.20 支持replaykit录屏推流;
- 2016.11.18 支持边推流边录制为mp4文件
- 2016.2.22 支持动态帧率
- 2016.3.1 支持主播音频采集变声
- 2017.3.14 支持立体声推流
- 2017.5.16 支持涂鸦推流
- 2017.7.7 支持桌面录制、手游直播
- 2017.7.7 支持iOS 11 HEVC 硬编推流
- 2017.8.3 支持采集降噪
2.2 近期工作
- 2017.03.xx 多视角直播;
- 2017.03.xx 背景音降噪;
三. SDK集成方法介绍
3.1 系统要求
- 最低支持的iOS版本:iOS 7.0
- 最低支持的iPhone型号:iPhone 4
- 支持的CPU架构:armv7, armv7s, arm64(和i386、x86_64模拟器)
- 含有i386和x86_64模拟器版本的库文件,推流功能无法在模拟器上工作,播放功能完全支持模拟器。
3.2 下载工程
本SDK提供以下获取方式:
3.2.1 从 github clone
目录结构如下所示:
- demo : demo工程为KSYLive,演示本SDK的主要接口使用
- doc/docset : appleDoc风格的接口文档,安装后可在xcode中直接查看方法和属性的文档
- doc/html : appleDoc风格的网页版接口文档,也可查看在线版本
- prebuilt : 预编译库的头文件和库文件
- source : 顶层kit类的源代码
- releaseFramework: 用于将预编译库打包为方便集成的framework的脚本和工程
$ git clone https://github.com/ksvc/KSYLive_iOS.git KSYLive_iOS --depth 1
3.2.2 从 bitbucket clone
对于部分地方访问github较慢的情况,可以从bitbucket clone,获取的库内容和github一致。
$ git clone https://bitbucket.org/ksvc/ksylive_ios.git --depth 1
3.2.3 使用Cocoapods进行安装
通过Cocoapods可以将本SDK的静态库和代码下载到本地,只需要将类似如下语句中的一句加入你的Podfile:
pod 'libksygpulive/KSYGPUResource'
pod 'libksygpulive/libksygpulive'
执行 pod install即可。
其中,第一段libksygpulive为SDK名,第二段KSYGPUResource和libksygpulive为子模块名。
本SDK提供了多个不同的子模块以满足不同用户的需求
- KSYMediaPlayer :用于直播的播放内核(支持格式精简)
- KSYMediaPlayer_vod :用于点播的播放内核(支持格式丰富)
- libksygpulive :用于直播推流和播放的SDK(直播推流功能和精简版本的播放SDK)
- libksygpulive_265:用于直播推流和播放的SDK(支持265推流和播放SDK的简化版本)
- KSYGPUResource:直播推流中使用的资源文件,主要用于美颜和特效滤镜
Pod依赖进阶
- 本地开发版(sdk clone或下载到本地后)
pod 'libksygpulive/libksygpulive', :path => '../'
- 直接指定SDK的GitHub仓库地址和版本号
pod 'libksygpulive/libksygpulive', :git => 'https://github.com/ksvc/KSYLive_iOS.git', :tag => 'v1.8.0'
- 从cocoapod官方库Trunk获取spec,从GitHub下载sdk
pod 'libksygpulive/libksygpulive'
- 从cocoapod官方库Trunk获取spec,从金山云存储ks3下载sdk(国内速度较快)
pod 'libksygpulive_ks3/libksygpulive'
- 如果pod install时出现无法找到specification的提示,请先更新repo
pod repo update
- 注意1:以上语句都不能同时加入Podfile,它们的作用是相同的,只是Podspec读取位置不同。
3.2.4 GPUImage依赖
请参考官方cocoapods提供的GPUImage,当前我们测试通过的版本是0.1.7
3.3 开始运行demo工程
!!!!!注意:这里提供以下两种方法运行demo,但不能同时使用;如果需要更换方法,请重新下载解压,或者恢复git仓库原状后再尝试。!!!!!
3.3.1 使用Cocoapod的的方式来运行demo
demo目录中已有一个Podfile,指定了本地开发版的pod
在demo目录下执行以下命令,即可开始编译运行demo
$ cd demo
$ pod install
$ open KSYLiveDemo.xcworkspace
注意
- 更新pod之后,需要打开xcwrokspace,而不是xcodeproj
3.3.2 手动编译framework生成依赖项运行示例demo
- 将SDK打包为framework
将压缩包解压(或者clone成功)后,进入releaseFramework目录,通过release-libKSYLive.sh下载依赖项并打包出framework,生成到KSYLive_iOS/framework/static目录下。
$ cd releaseFramework
$ ./release-libKSYLive.sh libksygpulive lite
$ ls ../framework/static
Bugly.framework GPUImage.framework libksygpulive.framework
参数的详细说明请参考脚本release-libKSYLive.sh的帮助(./release-libKSYLive.sh -h)或动态库第4点说明。
Bugly.framework是为了收集demo的崩溃信息用的(仅限于demo中使用)。集成SDK到用户项目中时,不依赖Bugly。
- 给demo添加库依赖选项
打开demo目录下的KSYLiveDemo.xcodeproj,修改KSYLiveDemo项目的配置文件
选中KSYLiveDemo工程->选中Project KSYLiveDemo->选中Info标签->选择Configurations->Debug或Release->给KSYLiveDemo分别选择对应的KSYLiveDemo-framework.xcconfig文件。注意,如果使用动态库则选择KSYLiveDemo-dy-framework.xcconfig。
或者手动在项目配置中添加如下参数:(具体请参见demo目录下的KSYLiveDemo-framework.xcconfig)
OTHER_LDFLAGS = $(inherited) -ObjC -all_load -framework libksygpulive -framework GPUImage -framework Bugly -lstdc++.6 -lz
FRAMEWORK_SEARCH_PATHS = $(inherited) ../framework/ ../framework/static
以上为静态库的集成方法,动态库的配置使用方法请参考Wiki中动态库相关内容。
3.4 添加头文件到需要使用本SDK的文件中
#import <GPUImage/GPUImage.h>
#import <libksygpulive/KSYGPUStreamerKit.h>
以上两个头文件都需要引入:
-
GPUImage.h是为了引入依赖的第三方framework而需要的
-
KSYGPUStreamerKit.h是为开放的顶层kit类,kit类可以直接使用,也可以自行修改
-
当需要自定义修改GPUImage时,GPUImage的版本要求是0.1.7
3.5 SDK版本号查询
本SDK的版本号主要通过核心类查询。
NSLog(@"version: %@", [streamerBase getKSYVersion]);
NSLog(@"version: %@", [kit getKSYVersion]);
3.6 集成时的注意事项
- 本框架已包含播放SDK。
且会与播放SDK产生冲突,在集成前,请先确保将之前集成的KSY播放SDK移除。 - 本框架可能与其他使用了FFmpeg的静态库冲突(冲突时可以考虑使用动态库)。
- 本框架为静态库,虽然库的大小为20M+,但最后链接后,对app的增量只有5M+。
- 如果使用cocoapod官方库Trunk时,发现找不到最新版本的库,需要先执行如下命令,更新spec库。
pod repo update
四. 参考文档
五. 播放器使用示例
请见github库:https://github.com/ksvc/KSYMediaPlayer_iOS.git
六. 反馈与建议
6.1 反馈模板
类型 | 描述 |
---|---|
SDK名称 | KSYLive_iOS |
SDK版本 | v2.5.0 |
设备型号 | iphone7 |
OS版本 | iOS 10 |
问题描述 | 描述问题出现的现象 |
操作描述 | 描述经过如何操作出现上述问题 |
额外附件 | 文本形式控制台log、crash报告、其他辅助信息(界面截屏或录像等) |
6.2 联系方式
-
主页:金山云
-
QQ讨论群:
- 574179720 [视频云技术交流群]
- 621137661 [视频云iOS技术交流]
- 以上两个加一个QQ群即可