KSYTranscoder.h
4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//
// 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