// // KSYTranscoder.h // // // Created by shixuemei on 07/17/17. // Copyright © 2017 ksyun. All rights reserved. // #import /*! * @abstract 转码状态 */ typedef NS_ENUM(NSInteger, KSYTranscodeState) { /// 初始状态 KSYTranscodeState_Idle, /// 转码中 KSYTranscodeState_Transcoding, /// 转码完成 KSYTranscodeState_Completed, /// 转码失败 KSYTranscodeState_Error, }; /*! * @abstract 转码错误码,用于说明转码失败的原因 */ typedef NS_ENUM(NSInteger, KSYTranscodeErrorCode) { /// 正常无错误 KSYTranscodeErrorCode_None = 0, /// 无效的文件地址(输入或输出地址为空) KSYTranscodeErrorCode_InvalidAddress = -1, /// 打开输入文件失败 KSYTranscodeErrorCode_InputFile_OpenFailed = -2, /// 无效的媒体数据 KSYTranscodeErrorCode_InvalidData = -3, /// 不支持的输出文件格式 KSYTranscodeErrorCode_OutputFile_UnsupportedFormat = -4, /// 打开输出文件失败 KSYTranscodeErrorCode_OutputFile_OpenFailed = -5, /// 输出文件添加流失败 KSYTranscodeErrorCode_OutputFile_AddStreamFailed = -6, /// 输出文件头写入失败(通常为不支持的codec) KSYTranscodeErrorCode_OutputFile_StartWriteFailed = -7, /// 转码过程中出现错误 KSYTranscodeErrorCode_Transcoding_Failed = -8, }; /** 不同音视频文件格式间的转码 1. 输入可以是本地文件/HTTP/RTMP/HLS 2. 输出只能是本地文件 3. 只提供不同封装格式间转换的功能,不涉及音视频编码格式的转换 4. 目前只支持单路音视频流的转换 5. 输出格式目前只支持FLV和MOV */ @interface KSYTranscoder : NSObject /** @abstract 开始转换 @param inputFilePath 输入文件路径 @param outputFilePath 输出文件路径 */ - (void) startTranscode:(NSURL *)inputFilePath outputFilePath:(NSURL *)outputFilePath; /** @abstract 停止转换 @discussion 与startTransform配对调用,除Idle状态外,其他状态下结束转码时都需要调用,否则可能会造成内存泄露 */ - (void) stopTranscode; #pragma mark - transcoder info /** @abstract 转换文件的总时长,单位是秒 */ @property (nonatomic, readonly) float duration; /** @abstract 当前转换位置,单位是秒 */ @property (nonatomic, readonly) float position; /** @abstract 转换进度 @discussion 取值从0.0~1.0,大小为position/duration; */ @property (nonatomic, readonly) float progress; #pragma mark - status FOUNDATION_EXPORT NSString * const KSYTranscodeStateDidChangeNotification; FOUNDATION_EXPORT NSString * const KSYTranscodeStateUserInfoKey; FOUNDATION_EXPORT NSString * const KSYTranscodeErrorCodeUserInfoKey; /** @abstract 当前转码状况 @discussion 可以通过该属性获取转码器的工作状况 @discussion 通知: * KSYTranscodeStateDidChangeNotification 当转码器状态发生变化时提供通知 * 可通过userInfo获取转换后的状态,关键字为KSYTranscodeStateUserInfoKey * 也可以收到通知后,通过本属性查询新的状态,并作出相应的动作 @discussion 状态机转换: * 创建转码对象后状态为KSYTranscodeState_Idle * 只能在KSYTranscodeState_Idle状态下调用 startTranscode 方法, - 成功状态转为KSYTranscodeState_Transcoding - 失败则转为KSYTranscodeState_Error * 开始转码后 - 转码完成状态转为KSYTranscodeState_Completed - 转码过程中出现问题状态转为KSYTranscodeState_Error * 调用 stopTranscode 可将状态转为KSYTranscodeState_Idle */ @property (nonatomic, readonly) KSYTranscodeState transcodeState; /** @abstract 转码器的错误码 @discussion 可以通过该属性获取转码失败的原因 @discussion * 当transcoderStatus为KSYTranscodeState_Error时可查询 * 当transcoderStatus为其他值时,错误码为KSYTranscodingErrorCode_NONE @discussion 通知: * KSYTranscodeStateDidChangeNotification 当转码器状态发生变化时提供通知 * 可通过userInfo获取当前错误码,关键字为KSYTranscodeErrorCodeInfoKey @see transcodeState */ @property (nonatomic, readonly) KSYTranscodeErrorCode transcodeErrorCode; @end