KSYStreamerBase Class Reference

Inherits from NSObject
Declared in KSYStreamerBase.h

Overview

金山云直播推流SDK iOS版提供了iOS移动设备上的推流功能

  • 音频编码采用AAC编码,码率可配置;
  • 视频频编码采用H.264编码,码率可配置;
  • 支持 RTMP 协议直播推流;
  • 支持写入本地flv和mp4文件;
  • 支持推流同时旁路录像功能;

Found: 2015-10-15

– getKSYVersion

获取SDK版本号

- (NSString *)getKSYVersion

Declared In

KSYStreamerBase.h

  hostURL

直播推流时为rtmp主机地址; 本地文件录制时,为输出文件路径

@property (nonatomic, readonly) NSURL *hostURL

Discussion

直播时将音视频流推向该主机或写入本地文件

eg: rtmp://xxx.xxx.xxx.xxx/appname/streamKey
eg: /var/xxxxx/xxx.mp4  /var/xxxxx/xxx.flv

Declared In

KSYStreamerBase.h

  videoFPS

视频帧率 默认:15

@property (nonatomic, assign) int videoFPS

Discussion

请保持调用 processVideoSampleBuffer 或 processVideoPixelBuffer 的频率与此设置的帧率一致

当实际送入的视频帧率过高时会主动丢帧

video frame per seconds 有效范围[1~30], 超出会提示参数错误

Declared In

KSYStreamerBase.h

  videoMinFPS

视频帧率最小值,默认与videoFPS相同

@property (nonatomic, assign) int videoMinFPS

Discussion

video frame per seconds 有效范围[1~30], 超出会提示参数错误

不设置该值时表示网络自适应不使用动态帧率

Declared In

KSYStreamerBase.h

  videoMaxFPS

视频帧率最大值,默认与videoFPS相同

@property (nonatomic, assign) int videoMaxFPS

Discussion

video frame per seconds 有效范围[1~30], 超出会提示参数错误

不设置该值时表示网络自适应不使用动态帧率

Declared In

KSYStreamerBase.h

  videoCodec

视频编码器 默认为 自动选择

@property (nonatomic, assign) KSYVideoCodec videoCodec

Discussion

video codec used for encode

修改此选项会导致videoEncodePerf值变化

如果需要定制编码档次, 请在修改videoCodec之后再测设置

Declared In

KSYStreamerBase.h

  audioCodec

音频编码器 (默认为AAC-HE)

@property (nonatomic, assign) KSYAudioCodec audioCodec

Discussion

audio codec used for encode

See Also

Declared In

KSYStreamerBase.h

  videoInitBitrate

视频编码起始码率(单位:kbps, 默认:500)

@property (nonatomic, assign) int videoInitBitrate

Discussion

开始推流时的视频码率,开始推流后,根据网络情况在Min~Max范围内调节

视频码率上调则画面更清晰,下调则画面更模糊

Declared In

KSYStreamerBase.h

  videoMaxBitrate

视频编码最高码率(单位:kbps, 默认:800)

@property (nonatomic, assign) int videoMaxBitrate

Discussion

视频码率自适应调整的上限, 为目标码率

Declared In

KSYStreamerBase.h

  videoMinBitrate

视频编码最低码率(单位:kbps, 默认:200)

@property (nonatomic, assign) int videoMinBitrate

Discussion

视频码率自适应调整的下限

Declared In

KSYStreamerBase.h

  streamMetaData

推流全局附带的metadata (默认为nil)

@property (atomic, copy) NSDictionary *streamMetaData

Discussion

key 一定要是 NSString* 类型的

Declared In

KSYStreamerBase.h

  videoMetaData

视频流附带的metadata (默认为nil)

@property (atomic, copy) NSDictionary *videoMetaData

Discussion

key 一定要是 NSString* 类型的; 目前有效

Declared In

KSYStreamerBase.h

  maxKeyInterval

最大关键帧间隔(单位:秒, 默认:3)

@property (nonatomic, assign) float maxKeyInterval

Discussion

即GOP长度 画面静止时,隔n秒插入一个关键帧

Declared In

KSYStreamerBase.h

  audiokBPS

音频编码码率(单位:kbps)

@property (nonatomic, assign) int audiokBPS

Discussion

音频目标编码码率 (比如48,96,128等)

Declared In

KSYStreamerBase.h

  bwEstimateMode

带宽估计模式

@property (nonatomic, assign) KSYBWEstimateMode bwEstimateMode

Discussion

带宽估计的策略选择 (开始推流前设置有效)

Declared In

KSYStreamerBase.h

  liveScene

本次直播的目标场景 (默认为KSYLiveScene_Default)

@property (nonatomic, assign) KSYLiveScene liveScene

Discussion

KSY内部会根据场景的特征进行参数调优,开始推流前设置有效

Declared In

KSYStreamerBase.h

  recScene

本次录制的目标场景 (默认为KSYRecScene_ConstantBitRate)

@property (nonatomic, assign) KSYRecScene recScene

Discussion

用于指定录制时, 视频编码器码率控制的优先目标

恒定码率: 最后视频文件的码率更平稳,但复杂场景质量可能差一些

恒定质量: 最后视频文件的质量更平稳写, 但码率波动要大一些

开始录制前设置有效, 录制本地文件时有效, 直播不建议修改

Declared In

KSYStreamerBase.h

  videoCrf

质量等级(默认:20)

@property (nonatomic, assign) int videoCrf

Discussion

视频恒定质量等级,范围0~51,值越小,质量越好

recScene 为 KSYRecScene_ConstantQuality, 且选择软编码器时有效

Declared In

KSYStreamerBase.h

  videoEncodePerf

视频编码性能档次

@property (nonatomic, assign) KSYVideoEncodePerformance videoEncodePerf

Discussion

视频质量和设备资源之间的权衡,开始推流前, videoCodec设置之后,修改有效

选择软编码的默认为KSYVideoEncodePer_LowPower

选择Auto或硬编码的默认为KSYVideoEncodePer_HighPerformance

Declared In

KSYStreamerBase.h

  bWithVideo

是否处理视频的图像数据 (默认YES)

@property (nonatomic, assign) BOOL bWithVideo

Discussion

Warning: 如果在推流前设置为NO, 则在推流过程中无法再开启图像

启动推流前设置为NO, 推流过程中修改本属性无效

Declared In

KSYStreamerBase.h

  bWithAudio

是否处理音频数据 (默认YES)

@property (nonatomic, assign) BOOL bWithAudio

Declared In

KSYStreamerBase.h

  bWithMessage

是否处理Message (默认YES)

@property (nonatomic, assign) BOOL bWithMessage

Declared In

KSYStreamerBase.h

  scaleRatio

cpu缩放比率,设置>0为按比例缩放,默认为0

@property (nonatomic, assign) float scaleRatio

Discussion

Warning: 请在推流之前进行设置

Declared In

KSYStreamerBase.h

  streamState

当前推流状况

@property (nonatomic, readonly) KSYStreamState streamState

Discussion

可以通过该属性获取推流会话的工作状况

通知: * KSYStreamStateDidChangeNotification 当推流工作状态发生变化时提供通知 * 收到通知后,通过本属性查询新的状态,并作出相应的动作

Declared In

KSYStreamerBase.h

– getStreamStateName:

获取推流状态对应的字符串

- (NSString *)getStreamStateName:(KSYStreamState)stat

Parameters

stat

状态码

Return Value

状态名称

Declared In

KSYStreamerBase.h

– getCurStreamStateName

获取当前推流状态对应的字符串

- (NSString *)getCurStreamStateName

Return Value

当前状态名称

Declared In

KSYStreamerBase.h

  streamErrorCode

当前推流的错误码

@property (nonatomic, readonly) KSYStreamErrorCode streamErrorCode

Discussion

可以通过该属性获取推流失败的原因

streamState 为KSYStreamStateError时可查询

KSYStreamErrorCode_KSYAUTHFAILED 除外

streamState 为KSYStreamStateConnected 时查询到

状态变化后清0

Declared In

KSYStreamerBase.h

  streamStateChange

发生推流状态变化时的回调函数

@property (nonatomic, copy) void ( ^ ) ( KSYStreamState newState ) streamStateChange

Discussion

参数为新状态

Declared In

KSYStreamerBase.h

– getKSYStreamErrorCodeName:

获取错误码对应的字符串

- (NSString *)getKSYStreamErrorCodeName:(KSYStreamErrorCode)code

Parameters

code

错误码

Declared In

KSYStreamerBase.h

– getCurKSYStreamErrorCodeName

获取当前错误码对应的字符串

- (NSString *)getCurKSYStreamErrorCodeName

Declared In

KSYStreamerBase.h

  netStateCode

当前推流的网络事件

@property (nonatomic, readonly) KSYNetStateCode netStateCode

Discussion

可以通过该属性查询网络状况

通知: * KSYNetStateEventNotification 当检测到网络发生特定事件时SDK发出通知 * 收到通知后,通过本属性查询具体事件类型

KSYNetStateEventNotification

Declared In

KSYStreamerBase.h

  videoFPSChange

帧率应发生变化时的回调函数

@property (nonatomic, copy) void ( ^ ) ( int32_t newVideoFPS ) videoFPSChange

Discussion

参数为建议设定的fps

Declared In

KSYStreamerBase.h

– initWithDefaultCfg

初始化方法 (step1)

- (instancetype)initWithDefaultCfg

Discussion

初始化,将下列属性设置为默认值

Warning: KSYStreamerBase只支持单实例推流,构造多个实例会出现异常

Declared In

KSYStreamerBase.h

– startStream:

启动推流 (step2)

- (void)startStream:(NSURL *)url

Parameters

url

目标地址

Discussion

实现直播功能时, url为 rtmp 服务器地址 “rtmp://xxx.xx/appname/streamKey"

设置完成推流参数之后,将媒体流推送到 publishURL 对应的地址

实现本地录制功能时, url为本地文件地址 “/var/xxx/xx.mp4”

本地录制支持mp4和flv两种输出格式, 通过url的文件后缀指定

推流参数主要是视频编码器,音视频码率的设置

Declared In

KSYStreamerBase.h

– stopStream

停止推流 (step3)

- (void)stopStream

Discussion

断开网络连接 或停止文件写入

Declared In

KSYStreamerBase.h

– muteStream:

静音推流 (仍然有音频输出发送, 只是音量为0)

- (void)muteStream:(BOOL)bMute

Parameters

bMute

YES / ON

Declared In

KSYStreamerBase.h

– processVideoSampleBuffer:

处理一个视频帧(只支持编码前的原始图像数据)

- (void)processVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer

Parameters

sampleBuffer

Buffer to process

Discussion

应当在开始推流前定期调用此接口,比如按照采集帧率调用

支持的图像格式包括: BGR0,NV12,YUVA444P,YUV420P

Declared In

KSYStreamerBase.h

– processVideoSampleBuffer:onComplete:

处理一个视频帧(只支持编码前的原始图像数据)

- (void)processVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer onComplete:(void ( ^ ) ( BOOL ))completion

Parameters

sampleBuffer

Buffer to process

completion

当前视频帧处理完成的回调

Declared In

KSYStreamerBase.h

– processVideoPixelBuffer:timeInfo:

处理一个视频帧(只支持编码前的原始图像数据)

- (void)processVideoPixelBuffer:(CVPixelBufferRef)pixelBuffer timeInfo:(CMTime)timeStamp

Parameters

pixelBuffer

待编码的像素数据

timeStamp

待编码的时间戳

Discussion

应当在开始推流前定期调用此接口,比如按照采集帧率调用

支持的图像格式包括: BGR0,NV12,YUVA444P,YUV420P

Declared In

KSYStreamerBase.h

– processVideoPixelBuffer:timeInfo:onComplete:

处理一个视频帧(只支持编码前的原始图像数据)

- (void)processVideoPixelBuffer:(CVPixelBufferRef)pixelBuffer timeInfo:(CMTime)timeStamp onComplete:(void ( ^ ) ( BOOL ))completion

Parameters

pixelBuffer

待编码的像素数据

timeStamp

待编码的时间戳

completion

当前视频帧处理完成的回调

Declared In

KSYStreamerBase.h

– processAudioSampleBuffer:

处理一段音频数据

- (void)processAudioSampleBuffer:(CMSampleBufferRef)sampleBuffer

Parameters

sampleBuffer

Buffer to process

Discussion

应当在开始推流前定期调用此接口,与processVideoSampleBuffer 交错进行

Warning: 目前只支持 S16 格式的PCM数据

Declared In

KSYStreamerBase.h

– processAudioData:nbSample:withFormat:timeinfo:

处理一段音频数据

- (void)processAudioData:(uint8_t **)pData nbSample:(int)len withFormat:(const AudioStreamBasicDescription *)fmt timeinfo:(CMTime *)pts

Parameters

pData

原始数据指针数组

len

数据的长度,单位为字节

fmt

原始数据的格式 (必须保证一次推流过程中数据格式不变)

pts

原始数据的时间戳

Declared In

KSYStreamerBase.h

– processMessageData:

处理一个消息

- (void)processMessageData:(NSDictionary *)messageData

Parameters

message

message to process

Discussion

开始推流后发生相应事件时调用此接口 @warning

Declared In

KSYStreamerBase.h

  clientAk

获取当前用户的ak @warnning 默认是空的,只有在需要鉴权时,才能获取到

@property (nonatomic, assign) NSString *clientAk

Declared In

KSYStreamerBase.h

  expireDate

获取当前SDK过期时间

@property (nonatomic, assign) NSDate *expireDate

Discussion

为nil时,可以永久使用不会过期 @warnning sdk自行解析得到, 外部赋值无效

Declared In

KSYStreamerBase.h

  streamID

查询当前推流的事件ID

@property (nonatomic, readonly) NSString *streamID

Discussion

md5(hostURL+timestamp) 对本次推流活动的标识

timestamp 为建立连接时的事件戳

Declared In

KSYStreamerBase.h

– isStreaming

查询当前是否处于推流状态 (建立连接中, 或连接中)

- (BOOL)isStreaming

Declared In

KSYStreamerBase.h

  encodeVKbps

查询当前编码的视频码率大小(每秒更新)

@property (nonatomic, readonly) double encodeVKbps

Discussion

该码率为编码器产生的视频码率大小,单位为kbps

Declared In

KSYStreamerBase.h

  encodeAKbps

查询当前编码的音频码率大小(每秒更新)

@property (nonatomic, readonly) double encodeAKbps

Discussion

该码率为编码器产生的音频码率大小,单位为kbps

Declared In

KSYStreamerBase.h

  uploadedKByte

查询本次推流发送的流量大小 (仅推流时有效)

@property (nonatomic, readonly) int uploadedKByte

Discussion

从开始推流到现在,发送出去的数据字节数,单位为KByte

Declared In

KSYStreamerBase.h

  currentUploadingKbps

查询当前上传的码率大小 (每秒更新)

@property (nonatomic, readonly) double currentUploadingKbps

Discussion

该码率为实际上传的速度, 也就是每秒上传的字节数,单位为kbps

Declared In

KSYStreamerBase.h

  encodingFPS

查询当前编码的平均视频帧率

@property (nonatomic, readonly) double encodingFPS

Discussion

采集设备的输出帧率为videoFPS,约等于编码的目标帧率

编码的视频帧率不会高于采集帧率,但是当CPU资源不足时,编码帧率会低于采集帧率

Declared In

KSYStreamerBase.h

  encodedFrames

查询本次推流编码的视频总帧数

@property (nonatomic, readonly) int encodedFrames

Discussion

从开始推流到现在,编码过的视频总帧数

Declared In

KSYStreamerBase.h

  droppedVideoFrames

查询本次推流发送的丢帧数量

@property (nonatomic, readonly) int droppedVideoFrames

Discussion

这里是指编码后,由于网络发送阻塞导致丢弃的帧数

Declared In

KSYStreamerBase.h

  qosInfo

推流的qos信息

@property (nonatomic, readonly) KSYStreamerQosInfo *qosInfo

Discussion

在推流过程中,查询当前推流qos信息

Declared In

KSYStreamerBase.h

  rtmpHostIP

查询当前推流的rtmp服务器的主机IP

@property (atomic, readonly) NSString *rtmpHostIP

Discussion

开始推流之后获取才为有效IP, 之前为空字符串

Declared In

KSYStreamerBase.h

  shouldEnableKSYStatModule

收集网络相关状态的日志,默认开启

@property (nonatomic, assign) BOOL shouldEnableKSYStatModule

Discussion

可开关

Declared In

KSYStreamerBase.h

  logBlock

获取Streamer中与网络相关的日志

@property (nonatomic, copy) void ( ^ ) ( NSString *logJson ) logBlock

Discussion

相关字段说明请联系金山云技术支持

Declared In

KSYStreamerBase.h

– takePhotoWithQuality:fileName:

截图功能,目前只支持jpg格式

- (void)takePhotoWithQuality:(CGFloat)jpegCompressionQuality fileName:(NSString *)filename

Parameters

jpegCompressionQuality

设置图像的压缩比例

filename

图片的文件名

Declared In

KSYStreamerBase.h

– getSnapshotWithCompletion:

获取当前编码的截图

- (void)getSnapshotWithCompletion:(void ( ^ ) ( UIImage *))completion

Parameters

completion

通过完成代码块获取到截图完成的图像

Declared In

KSYStreamerBase.h

  bypassRecordURL

旁路录像地址

@property (nonatomic, readonly) NSURL *bypassRecordURL

Discussion

开始录像后, 将直播的内容同步存储一份到本地文件 eg: /private/var/mobile/Containers/Data/Application/APPID/tmp/test.mp4

如果只要存储本地文件,请继续使用原来的startStream接口

See Also

Declared In

KSYStreamerBase.h

  bypassMp4FastStart

mp4文件允许快速启动 (默认NO)

@property (nonatomic, assign) BOOL bypassMp4FastStart

Discussion

mp4格式的文件中将moov等index信息放到文件开头

开始录制前设置有效

Warning: 启用此开关会在结束是对文件进行处理, 如果要长时间录制,请关闭本选项

Declared In

KSYStreamerBase.h

– startBypassRecord:

启动旁路录像

- (BOOL)startBypassRecord:(NSURL *)url

Parameters

url

本地录像文件地址:/private/var/…./test.mp4

Return Value

是否能尝试启动写入, 不能表明真正开始录像了,真正开始请确认bypassRecordState的值

Discussion

启动推流后才能开始写入文件

文件中的内容和直播内容完全一致

Declared In

KSYStreamerBase.h

– stopBypassRecord

停止旁路录像

- (void)stopBypassRecord

Declared In

KSYStreamerBase.h

  bypassRecordDuration

旁路录像的文件时长

@property (nonatomic, readonly) double bypassRecordDuration

Declared In

KSYStreamerBase.h

  bypassRecordState

旁路录像的状态

@property (nonatomic, readonly) KSYRecordState bypassRecordState

Declared In

KSYStreamerBase.h

  bypassRecordErrorCode

旁路录像的错误码

@property (nonatomic, readonly) KSYRecordError bypassRecordErrorCode

Declared In

KSYStreamerBase.h

  bypassRecordErrorName

旁路录像的错误名称

@property (nonatomic, readonly) NSString *bypassRecordErrorName

Declared In

KSYStreamerBase.h

  bypassRecordStateChange

当旁路录制的状态变化时

@property (nonatomic, copy) void ( ^ ) ( KSYRecordState recordState ) bypassRecordStateChange

Discussion

只有设置 loop为NO时才有效, 在开始播放前设置有效

Declared In

KSYStreamerBase.h

  shouldEnableKSYDropModule

是否允许编码前丢帧,默认开启 @warnning 请勿在直播时使用,否则可能出现音视频不同步,仅在离线转码需要输出所有帧的情况下开启

@property (nonatomic, assign) BOOL shouldEnableKSYDropModule

Declared In

KSYStreamerBase.h

  netReachability

/ 网络状态监控 (当SDK内部发现网络不可用时主动发出connet_break的错误码)

@property (nonatomic, readonly) KSYReachability *netReachability

Declared In

KSYStreamerBase.h

  netReachState

是否能连通外网

@property (nonatomic, readonly) KSYNetReachState netReachState

Discussion

networkDetectURL为nil或未探测到结果前,该值为KSYNetReachState_Unknown

Declared In

KSYStreamerBase.h

  reachabilityDetectURL

用于检测网络连通性的地址,默认使用地址为“www.baidu.com”

@property (nonatomic, readwrite) NSString *reachabilityDetectURL

Availability

Available in KSYLive_iOS 2.1.1 and later

Discussion

用户可自定义地址,但不可设置无效地址,如果不清楚规则,建议使用默认值

设置为nil时,则关闭网络连通性的检测, netReachability为nil,netReachState为KSYNetReachState_Unknown

Declared In

KSYStreamerBase.h