KSYClipWriter Class Reference

Inherits from NSObject
Declared in KSYClipWriter.h

Overview

金山云转码SDK iOS版提供了iOS移动设备上的转码合成功能

  • 音频编码采用AAC编码,码率可配置;
  • 视频频编码采用H.264、H.265编码,码率可配置;
  • 支持写入本地flv和mp4文件;

Found: 2017-4-7

– getKSYVersion

获取SDK版本号

- (NSString *)getKSYVersion

Declared In

KSYClipWriter.h

  hostURL

本地录制,输出路径

@property (nonatomic, readonly) NSURL *hostURL

Discussion

将音视频流写入本地文件 eg: /var/xxxxx/xxx.mp4 /var/xxxxx/xxx.flv

Declared In

KSYClipWriter.h

  videoFPS

视频帧率

@property (nonatomic, assign) int videoFPS

Discussion

本地录制的视频帧率,开启编码前丢帧时,帧率生效

编码前丢帧shouldEnableKSYDropModule为YES时,帧率设置生效

编码前丢帧shouldEnableKSYDropModule为NO时,帧率保持与输入帧率一致

Declared In

KSYClipWriter.h

  videoCodec

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

@property (nonatomic, assign) KSYVideoCodec videoCodec

Discussion

video codec used for encode

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

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

Declared In

KSYClipWriter.h

  audioCodec

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

@property (nonatomic, assign) KSYAudioCodec audioCodec

Discussion

audio codec used for encode

See Also

Declared In

KSYClipWriter.h

  videoInitBitrate

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

@property (nonatomic, assign) int videoInitBitrate

Declared In

KSYClipWriter.h

  streamMetaData

写入全局附带的metadata (默认为nil)

@property (atomic, copy) NSDictionary *streamMetaData

Discussion

key 一定要是 NSString* 类型的

Declared In

KSYClipWriter.h

  videoMetaData

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

@property (atomic, copy) NSDictionary *videoMetaData

Discussion

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

Declared In

KSYClipWriter.h

  maxKeyInterval

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

@property (nonatomic, assign) float maxKeyInterval

Discussion

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

Declared In

KSYClipWriter.h

  audiokBPS

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

@property (nonatomic, assign) int audiokBPS

Discussion

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

Declared In

KSYClipWriter.h

  liveScene

待编码的视频场景 (默认为KSYLiveScene_Default)

@property (nonatomic, assign) KSYLiveScene liveScene

Discussion

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

Declared In

KSYClipWriter.h

  recScene

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

@property (nonatomic, assign) KSYRecScene recScene

Discussion

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

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

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

开始录制前设置有效,

Declared In

KSYClipWriter.h

  videoCrf

质量等级(默认:20)

@property (nonatomic, assign) int videoCrf

Discussion

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

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

Declared In

KSYClipWriter.h

  videoEncodePerf

视频编码性能档次

@property (nonatomic, assign) KSYVideoEncodePerformance videoEncodePerf

Discussion

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

选择软编码的默认为KSYVideoEncodePer_LowPower

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

Declared In

KSYClipWriter.h

  bWithVideo

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

@property (nonatomic, assign) BOOL bWithVideo

Discussion

Warning: 启动合成前设置为NO, 则在转码过程中无法再开启图像

启动合成前设置为NO, 写入过程中修改本属性无效

Declared In

KSYClipWriter.h

  bWithAudio

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

@property (nonatomic, assign) BOOL bWithAudio

Declared In

KSYClipWriter.h

  mp4FastStart

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

@property (nonatomic, assign) BOOL mp4FastStart

Discussion

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

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

Declared In

KSYClipWriter.h

  writeState

当前写入状态

@property (nonatomic, readonly) KSYStreamState writeState

Discussion

可以通过该属性获取写入的工作状态

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

Declared In

KSYClipWriter.h

– getWriteStateName:

获取写入状态对应的字符串

- (NSString *)getWriteStateName:(KSYStreamState)stat

Parameters

stat

状态码

Return Value

状态名称

Declared In

KSYClipWriter.h

– getCurWriteStateName

获取当前写入状态对应的字符串

- (NSString *)getCurWriteStateName

Return Value

当前状态名称

Declared In

KSYClipWriter.h

  streamErrorCode

当前转码/写入的错误码

@property (nonatomic, readonly) KSYStreamErrorCode streamErrorCode

Discussion

可以通过该属性获取写入失败的原因

当streamState 为KSYStreamStateError时可查询

KSYStreamErrorCode_KSYAUTHFAILED 除外

在streamState 为KSYStreamStateConnected 时查询到

状态变化后清0

Declared In

KSYClipWriter.h

  writeStateChange

数据流写入状态变化时的回调函数

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

Discussion

参数为新状态

Declared In

KSYClipWriter.h

– getKSYWriteErrorCodeName:

获取错误码对应的字符串

- (NSString *)getKSYWriteErrorCodeName:(KSYStreamErrorCode)code

Parameters

code

错误码

Declared In

KSYClipWriter.h

– getCurKSYWriteErrorCodeName

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

- (NSString *)getCurKSYWriteErrorCodeName

Declared In

KSYClipWriter.h

  videoFPSChange

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

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

Discussion

参数为建议设定的fps

Declared In

KSYClipWriter.h

– initWithDefaultCfg

初始化方法 (step1)

- (instancetype)initWithDefaultCfg

Discussion

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

Warning: KSYClipWriter只支持单实例写入,构造多个实例会出现异常

Declared In

KSYClipWriter.h

– startWritingWith:

启动写入文件 (step2)

- (void)startWritingWith:(NSURL *)url

Discussion

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

“/var/xxx/xx.mp4”, “/var/xxx/xx.flv”

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

Declared In

KSYClipWriter.h

– stopWriting

停止写入 (step3)

- (void)stopWriting

Discussion

停止文件写入

Declared In

KSYClipWriter.h

– stopWriting:

停止写入 (step3)

- (void)stopWriting:(void ( ^ ) ( ))complete

Parameters

complete

完成回调

Discussion

停止文件写入

Declared In

KSYClipWriter.h

– muteStream:

静音 (仍然有音频,只是音量为0)

- (void)muteStream:(BOOL)bMute

Parameters

bMute

YES / ON

Declared In

KSYClipWriter.h

– processVideoSampleBuffer:onComplete:

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

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

Parameters

sampleBuffer

Buffer to process

completion

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

Discussion

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

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

Declared In

KSYClipWriter.h

– processVideoPixelBuffer:timeInfo:onComplete:

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

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

Parameters

pixelBuffer

待编码的像素数据

timeStamp

待编码的时间戳

completion

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

Discussion

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

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

Declared In

KSYClipWriter.h

– processAudioSampleBuffer:

处理一段音频数据

- (void)processAudioSampleBuffer:(CMSampleBufferRef)sampleBuffer

Parameters

sampleBuffer

Buffer to process

Discussion

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

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

Declared In

KSYClipWriter.h

– isWriting

查询当前是否处于写入状态 (connecting, 或connected)

- (BOOL)isWriting

Declared In

KSYClipWriter.h

  encodeVKbps

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

@property (nonatomic, readonly) double encodeVKbps

Discussion

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

Declared In

KSYClipWriter.h

  encodeAKbps

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

@property (nonatomic, readonly) double encodeAKbps

Discussion

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

Declared In

KSYClipWriter.h

  encodingFPS

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

@property (nonatomic, readonly) double encodingFPS

Discussion

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

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

Declared In

KSYClipWriter.h

  encodedFrames

查询本次视频写入已经编码的总帧数

@property (nonatomic, readonly) int encodedFrames

Discussion

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

Declared In

KSYClipWriter.h

  logBlock

clip writer

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

Discussion

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

Declared In

KSYClipWriter.h

  shouldEnableKSYDropModule

是否允许编码前丢帧,默认开启(videoFPS生效) @warnning 离线转码需要输出所有帧的情况下开启,videoFPS将不生效,根据输入源的fps保持一致

@property (nonatomic, assign) BOOL shouldEnableKSYDropModule

Declared In

KSYClipWriter.h