Giter Club home page Giter Club logo

ksvc / ksylive_ios Goto Github PK

View Code? Open in Web Editor NEW
943.0 49.0 276.0 1.23 GB

金山云直播SDK [ iOS推流+播放 ]融合版 支持美颜滤镜(Beauty Filter)、美声(Beauty Voice)、软硬编(Software/Hardware Encoder) 、网络自适应(Network Auto Adapt)、混音(Audio Mixer)、混响(Reverb)、画中画(PIP)

Home Page: https://github.com/ksvc/KSYLive_iOS/wiki

Ruby 0.54% Objective-C 97.57% Shell 0.70% C 1.20%
livestream recoder ios-sdk gpuimage cocoapods video-streaming aac rtmp h264 h265

ksylive_ios's Introduction

Apps UsingDownloads

Apps Using Downloads

Build Status Latest release CocoaPods platform CocoaPods version CocoaPods version

Source Type: Binary SDK
Charge Type: free of charge

阅读对象

本文档面向所有使用金山云直播SDK的开发、测试人员等, 要求读者具有一定的iOS编程开发经验,并且要求读者具备阅读wiki的习惯。

|live_1.png|live_1.png|live_1.png|

|live_4.png|live_5.png|

一. 功能特性

金山云直播SDK是金山云提供的直播解决方案的一部分,完成了iOS端音视频数据采集、处理、推流和播放的工作。

金山云直播SDK不限制用户的推流、拉流地址。用户可以只使用金山云直播SDK而不使用金山云的云服务。

金山云直播SDK不收取任何授权使用费用,不含任何失效时间或者远程下发关闭的后门。同时金山云直播SDK也不要求ak/sk等鉴权,没有任何用户标识信息。

金山云直播SDK提供了业内一流的H.265编码、解码能力,H.265能力也是免费使用,欢迎集成试用。

金山云直播SDK当前未提供开源代码,如果需要其他定制化开发功能,请通过金山云商务渠道联系。

1.1 关于热更新

金山云SDK保证,提供的金山云直播SDK未使用任何热更新技术,例如:RN(ReactNative)、weex、JSPatch等,请放心使用。

1.2 推流功能

1.3 播放特点

  • 与系统播放器MPMoviePlayerController接口一致,可以无缝快速切换至KSYMediaPlayer;
  • 本地全媒体格式支持, 并对主流的媒体格式(mp4, avi, wmv, flv, mkv, mov, rmvb 等 )进行优化;
  • 支持广泛的流式视频格式, HLS, RTMP, HTTP Pseudo-Streaming 等;
  • 低延时直播体验,配合金山云推流sdk,可以达到全程直播稳定的4秒内延时;
  • 实现快速满屏播放,为用户带来更快捷优质的播放体验;
  • 版本适配支持iOS 7.0以上版本;
  • 业内一流的H.265解码;
  • 小于2M大小的超轻量级直播sdk;

1.4 文档

详情请见wiki

1.4 关于热更新

金山云SDK保证,提供的KSYLive iOS直播SDK未使用热更新技术,例如:RN(ReactNative)、weex、JSPatch等,请放心使用。

1.5 关于费用

金山云SDK保证,提供的KSYLive iOS直播SDK可以用于商业应用,不会收取任何SDK使用费用。但是基于KSYLive iOS直播SDK的其他商业服务,会由特定供应商收取授权费用,大致包括:

  1. 云存储
  2. CDN分发
  3. 动态贴纸
  4. 连麦
  5. 第三方美颜

二. 推流端大事记

2.1 2016年发布大事记  

  1. 2016.02.25 上行网络自适应上线;
  2. 2016.03.26 内建美颜上线;
  3. 2016.04.11 支持四种混响模式的美声上线;
  4. 2016.05.18 耳返上线;
  5. 2016.06.12 画中画推流上线;
  6. 2016.06.27 支持短视频录制;
  7. 2016.08.24 支持纯音频推流,支持后台推流,支持视频动态发送开关;
  8. 2016.08.31 场景编码,有效提升直播画质;
  9. 2016.09.07 内建新美颜上线;
  10. 2016.09.12 kit类顶层代码开源, podspec 中将集成framework改为集成静态库
  11. 2016.09.21 特效滤镜上线;
  12. 2016.09.26 双人连麦稳定版本上线;
  13. 2016.09.28 视频硬编性能编码模式上线。音频AAC硬编功能上线。网络自适应场景上线;
  14. 2016.10.19 支持推流横竖屏动态变化
  15. 2016.10.20 支持replaykit录屏推流
  16. 2016.11.18 支持边推流边录制为mp4文件
  17. 2016.2.22 支持动态帧率
  18. 2016.3.1 支持主播音频采集变声
  19. 2017.3.14 支持立体声推流
  20. 2017.5.16 支持涂鸦推流
  21. 2017.7.7 支持桌面录制、手游直播
  22. 2017.7.7 支持iOS 11 HEVC 硬编推流
  23. 2017.8.3 支持采集降噪

2.2 近期工作  

  1. 2017.03.xx 多视角直播;
  2. 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

注意:

  1. 更新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。

xcode_configs

或者手动在项目配置中添加如下参数: (具体请参见 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 集成时的注意事项

  • 本framework已经包含播放SDK
    且会跟播放SDK产生冲突,在集成前,请先保证将之前集成的KSY播放SDK移除
  • 本framework可能与其他使用了FFmpeg的静态库冲突 (冲突时可以考虑使用动态库)
  • 本framework为静态库,虽然库的大小为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 联系方式

金山云计算

ksylive_ios's People

Contributors

fpzeng avatar ksysdkci avatar lonmoon avatar matoude1234567 avatar noiled avatar pengbins avatar shixuemei avatar sujia avatar sunjian12 avatar sunjunbing avatar yulin6666 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ksylive_ios's Issues

1.8.0 在 XCODE 8中,没法用

用 cocoapods 导入的,结果各种错误,求助

求换回以前的方式。现在不打算使用 1.8了 已放弃

Undefined symbols for architecture armv7:
"OBJC_CLASS$_KSYGPUBeautifyPlusFilter", referenced from:
objc-class-ref in HMFLivePushView.o
"OBJC_METACLASS$_KSYMoviePlayerController", referenced from:
OBJC_METACLASS$_HMFLivePlayerController in HMFLivePlayerController.o
"OBJC_CLASS$_KSYMoviePlayerController", referenced from:
OBJC_CLASS$_HMFLivePlayerController in HMFLivePlayerController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

1.8.4 在Xcode8.1下编译不通过

系统:os x 10.2.1
软件:Xcode8.1
通过cocoapods 安装libksygpulive,执行pod install 后,运行项目编译不通过。
提示
xxx/Pods/Headers/Public/libksygpulive/KSYGPUStreamerKit.h:73:48: Unknown class name 'GPUImageInput'; did you mean 'GPUImageOutput'?
xxx/Pods/Headers/Public/libksygpulive/KSYGPUStreamerKit.h:73:48: Type argument 'GPUImageOutput' must be a pointer (requires a '*')
...
需要如何处理呢

iOS 推流SDK 无法推流

推流报错
codec设置的是X264
kit.streamerBase.videoCodec = KSYVideoCodec.X264

点击推流报如下错误
Could not find AAC encoder
Selected Codec not supported in this version

我按照手动编译方法打包后,发现GPUImage.framework 下面有很多重复的GPUIMAGE。

3.3.2 手动编译framework生成依赖项运行示例demo

将SDK 打包为framework
将压缩包解压(或者clone成功)后, 进入 releaseFramework 目录, 通过 release-libKSYLive.sh 下载依赖项并打包出framework,生成到KSYLive_iOS/framework目录下。

$ cd releaseFramework
$ ./release-libKSYLive.sh libksygpulive lite
$ ls ../framework
Bugly.framework GPUImage.framework libksygpulive.framework

我按照这个方法打包后,发现GPUImage.framework 下面有很多重复的GPUIMAGE。

播放端有时候没有声音

推流是由安卓推的,有时候有声音,有时候没有。
但视频都是有的。
而安卓则没有这问题。
版本是v1.5.4

引用三个framework在ios7上编译报错

import <GPUImage/GPUImage.h>

import <libksygpulive/libksygpulive.h>

import <libksygpulive/libksygpuimage.h>

无法在ios7上编译
ld: embedded dylibs/frameworks are only supported on iOS 8.0 and later (@rpath/libksygpulivedylib.framework/libksygpulivedylib) for architecture arm64

多流播放,回调通知异常,是个必现bug

case:
比如同时播放A、B两路流,当我手动断掉A流的服务器,理论上只应该只有A流的callback『MPMoviePlayerPlaybackDidFinishNotification』的通知回来,但是现在正常播放的B流也回来这个callback通知,是个bug。麻烦处理一下。

另外KSYLive应该是根据bilipili的 ijkPlayer进行修改的吧。可否提供一些修改思路blog,一起进行学习借鉴。
比如七牛云直播,进行了跳帧策略和低延迟策略的两个方向的优化,金山云直播呢,分享一下^_^

pod仓库建议放到pod git仓库上,避免每次都需要花费长时间下载KSYLive.git进行pod集成

现在KSYLive是使用这种方式进行pod集成,
pod 'KSYGPULive_iOS', :git => 'https://github.com/ksvc/KSYLive_iOS.git'

这样有个坏处,
1、没有是用上pod local cache仓库。当相同版本的时候不需要每次都进行下载;
2、版本识别不明显。

强烈建议使用pod 官方的仓库。

liangmingwei$ pod search KSYlive
[!] Unable to find a pod with name matching `KSYlive'

在推流时,多次手动锁屏再启动的BUG

在推流正常的情况下,手动锁屏再启动应用,尝试继续推流时,会有摄像头打不开的情况,无法再继续推流了。有时,锁屏一次就会,有时需要多次。

能否把ios推流与播流分开?

我们项目中有用到ijkplayer 与你们sdk中的播放器冲突。 能否把推流与播流分开。或者把你们的播流音频加上nellymoser格式的解码。 需要沟通可以qq 343188225

C++编译错误

建议将KSYCamera.h里的@import AVFoundation; 改为#import <AVFoundation/AVFoundation.h>.
项目里如果有C++/ObjC++文件引用<libksygpulive/libksygpulive.h>,Xcode就会报错:

Pods/KSYGPULive_iOS/framework/livegpu/libksygpulive.framework/Headers/KSYCamera.h:10:1: Use of '@import' when modules are disabled

@yulin6666

SDK 不支持APP自主解析DNS

我们有自己的DNS解析方式,在将 host 替换成 ip 后,播放器一直返回 error 为 1 的错误。
希望能支持下这个功能。

从后台切换前台时会报错

2016-05-04 20:59:50.896 LMLive[1995:600540] *** -[KSYBgmPlayer interruptHandler:]: message sent to deallocated instance 0x1701b8b80

License?

Hey there, what is the license for this? could you maybe add one to the repo?

本SDK是否集成了播放

我推流使用你们的。然后集成到项目。发现其他的播放SDK无法播放了。

E [gdc95a18] [ffmpeg]: Cannot open the h264_mp4toannexb BSF!
E [gdc95a18] [ffmpeg]: koala_demuxer.c:596

应该是冲突了。怎么解决呢

怎么能优化直播效果?

想实现其它应用的“秒开”的效果,但是现在在进入直播间后,需要2s左右的连接时间,请问一下能从哪些方面改善这个问题呢?

NSUInteger 和 KSYMicType_unknow = -1,冲突。麻烦改一下,

typedef NS_ENUM(NSUInteger, KSYMicType) {
/// Built-in microphone on an iOS device
KSYMicType_builtinMic = 0,
/// Microphone on a wired headset
KSYMicType_headsetMic,
/// 蓝牙设备
KSYMicType_bluetoothMic,

/// 未知设备
KSYMicType_unknow = -1,

};

NSUInteger 和 KSYMicType_unknow = -1,冲突。麻烦改一下,

推流奔溃

推流成功,Connecting后Connected, 但是奔溃
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.