| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- //
- // KSYTranscoder.h
- //
- //
- // Created by shixuemei on 07/17/17.
- // Copyright © 2017 ksyun. All rights reserved.
- //
- #import <AVFoundation/AVFoundation.h>
- /*!
- * @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
|