KSYTranscoder.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. //
  2. // KSYTranscoder.h
  3. //
  4. //
  5. // Created by shixuemei on 07/17/17.
  6. // Copyright © 2017 ksyun. All rights reserved.
  7. //
  8. #import <AVFoundation/AVFoundation.h>
  9. /*!
  10. * @abstract 转码状态
  11. */
  12. typedef NS_ENUM(NSInteger, KSYTranscodeState) {
  13. /// 初始状态
  14. KSYTranscodeState_Idle,
  15. /// 转码中
  16. KSYTranscodeState_Transcoding,
  17. /// 转码完成
  18. KSYTranscodeState_Completed,
  19. /// 转码失败
  20. KSYTranscodeState_Error,
  21. };
  22. /*!
  23. * @abstract 转码错误码,用于说明转码失败的原因
  24. */
  25. typedef NS_ENUM(NSInteger, KSYTranscodeErrorCode) {
  26. /// 正常无错误
  27. KSYTranscodeErrorCode_None = 0,
  28. /// 无效的文件地址(输入或输出地址为空)
  29. KSYTranscodeErrorCode_InvalidAddress = -1,
  30. /// 打开输入文件失败
  31. KSYTranscodeErrorCode_InputFile_OpenFailed = -2,
  32. /// 无效的媒体数据
  33. KSYTranscodeErrorCode_InvalidData = -3,
  34. /// 不支持的输出文件格式
  35. KSYTranscodeErrorCode_OutputFile_UnsupportedFormat = -4,
  36. /// 打开输出文件失败
  37. KSYTranscodeErrorCode_OutputFile_OpenFailed = -5,
  38. /// 输出文件添加流失败
  39. KSYTranscodeErrorCode_OutputFile_AddStreamFailed = -6,
  40. /// 输出文件头写入失败(通常为不支持的codec)
  41. KSYTranscodeErrorCode_OutputFile_StartWriteFailed = -7,
  42. /// 转码过程中出现错误
  43. KSYTranscodeErrorCode_Transcoding_Failed = -8,
  44. };
  45. /** 不同音视频文件格式间的转码
  46. 1. 输入可以是本地文件/HTTP/RTMP/HLS
  47. 2. 输出只能是本地文件
  48. 3. 只提供不同封装格式间转换的功能,不涉及音视频编码格式的转换
  49. 4. 目前只支持单路音视频流的转换
  50. 5. 输出格式目前只支持FLV和MOV
  51. */
  52. @interface KSYTranscoder : NSObject
  53. /**
  54. @abstract 开始转换
  55. @param inputFilePath 输入文件路径
  56. @param outputFilePath 输出文件路径
  57. */
  58. - (void) startTranscode:(NSURL *)inputFilePath outputFilePath:(NSURL *)outputFilePath;
  59. /**
  60. @abstract 停止转换
  61. @discussion 与startTransform配对调用,除Idle状态外,其他状态下结束转码时都需要调用,否则可能会造成内存泄露
  62. */
  63. - (void) stopTranscode;
  64. #pragma mark - transcoder info
  65. /**
  66. @abstract 转换文件的总时长,单位是秒
  67. */
  68. @property (nonatomic, readonly) float duration;
  69. /**
  70. @abstract 当前转换位置,单位是秒
  71. */
  72. @property (nonatomic, readonly) float position;
  73. /**
  74. @abstract 转换进度
  75. @discussion 取值从0.0~1.0,大小为position/duration;
  76. */
  77. @property (nonatomic, readonly) float progress;
  78. #pragma mark - status
  79. FOUNDATION_EXPORT NSString * const KSYTranscodeStateDidChangeNotification;
  80. FOUNDATION_EXPORT NSString * const KSYTranscodeStateUserInfoKey;
  81. FOUNDATION_EXPORT NSString * const KSYTranscodeErrorCodeUserInfoKey;
  82. /**
  83. @abstract 当前转码状况
  84. @discussion 可以通过该属性获取转码器的工作状况
  85. @discussion 通知:
  86. * KSYTranscodeStateDidChangeNotification 当转码器状态发生变化时提供通知
  87. * 可通过userInfo获取转换后的状态,关键字为KSYTranscodeStateUserInfoKey
  88. * 也可以收到通知后,通过本属性查询新的状态,并作出相应的动作
  89. @discussion 状态机转换:
  90. * 创建转码对象后状态为KSYTranscodeState_Idle
  91. * 只能在KSYTranscodeState_Idle状态下调用 startTranscode 方法,
  92. - 成功状态转为KSYTranscodeState_Transcoding
  93. - 失败则转为KSYTranscodeState_Error
  94. * 开始转码后
  95. - 转码完成状态转为KSYTranscodeState_Completed
  96. - 转码过程中出现问题状态转为KSYTranscodeState_Error
  97. * 调用 stopTranscode 可将状态转为KSYTranscodeState_Idle
  98. */
  99. @property (nonatomic, readonly) KSYTranscodeState transcodeState;
  100. /**
  101. @abstract 转码器的错误码
  102. @discussion 可以通过该属性获取转码失败的原因
  103. @discussion
  104. * 当transcoderStatus为KSYTranscodeState_Error时可查询
  105. * 当transcoderStatus为其他值时,错误码为KSYTranscodingErrorCode_NONE
  106. @discussion 通知:
  107. * KSYTranscodeStateDidChangeNotification 当转码器状态发生变化时提供通知
  108. * 可通过userInfo获取当前错误码,关键字为KSYTranscodeErrorCodeInfoKey
  109. @see transcodeState
  110. */
  111. @property (nonatomic, readonly) KSYTranscodeErrorCode transcodeErrorCode;
  112. @end