TXLivePushConfig.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /*
  2. * Module: TXLivePushConfig @ TXLiteAVSDK
  3. *
  4. * Function: 腾讯云直播推流用 RTMP SDK 的参数配置模块
  5. *
  6. * Version: <:Version:>
  7. */
  8. #import <Foundation/NSObject.h>
  9. #if TARGET_OS_IPHONE
  10. #import <UIKit/UIKit.h>
  11. #endif
  12. #import "TXLiveSDKTypeDef.h"
  13. #define CUSTOM_MODE_AUDIO_CAPTURE 0X001 ///> 客户自定义音频采集
  14. #define CUSTOM_MODE_VIDEO_CAPTURE 0X002 ///> 客户自定义视频采集
  15. #define CUSTOM_MODE_AUDIO_PREPROCESS 0X004 ///> 客户自定义音频处理
  16. #define CUSTOM_MODE_VIDEO_PREPROCESS 0X008 ///> 客户自定义视频处理
  17. #define TXRTMPSDK_LINKMIC_STREAMTYPE_MAIN 1 ///> 连麦模式下主播的流
  18. #define TXRTMPSDK_LINKMIC_STREAMTYPE_SUB 2 ///> 连麦模式下连麦观众的流
  19. /**
  20. * 腾讯云直播推流用 RTMP SDK 的参数配置模块
  21. *
  22. * 主要负责 TXLivePusher 对应的参数设置,其中绝大多数设置项在推流开始之后再设置是无效的。
  23. */
  24. @interface TXLivePushConfig : NSObject
  25. /////////////////////////////////////////////////////////////////////////////////
  26. //
  27. // 常用设置项
  28. //
  29. /////////////////////////////////////////////////////////////////////////////////
  30. ///【字段含义】HOME 键所在方向,用来切换横竖屏推流,默认值:HOME_ORIENTATION_DOWN(竖屏推流)。
  31. ///【特别说明】常用的还有 HOME_ORIENTATION_RIGHT 和 HOME_ORIENTATION_LEFT,也就是横屏推流。
  32. /// 改变该字段的设置以后,本地摄像头的预览画面方向也会发生改变,请调用 TXLivePush 的 setRenderRotation 进行矫正。
  33. @property(nonatomic, assign) int homeOrientation;
  34. ///【字段含义】是否允许点击曝光聚焦,默认值:NO。
  35. @property(nonatomic, assign) BOOL touchFocus;
  36. ///【字段含义】是否允许双指手势放大预览画面,默认值:NO。
  37. @property(nonatomic, assign) BOOL enableZoom;
  38. ///【字段含义】水印图片,设为 nil 等同于关闭水印。
  39. @property(nonatomic, retain) TXImage *watermark;
  40. ///【字段含义】水印图片位置,水印大小为图片实际大小,待废弃,推荐使用 watermarkNormalization。
  41. @property(nonatomic, assign) CGPoint watermarkPos;
  42. ///【字段含义】水印图片相对于推流分辨率的归一化坐标
  43. ///【推荐取值】假设推流分辨率为:540x960,该字段设置为:(0.1,0.1,0.1,0.0),那么水印的实际像素坐标为:
  44. /// (540 × 0.1, 960 × 0.1, 水印宽度 × 0.1, 水印高度会被自动计算)
  45. ///【特别说明】watermarkNormalization 的优先级高于 watermarkPos。
  46. @property(nonatomic, assign) CGRect watermarkNormalization;
  47. /////////////////////////////////////////////////////////////////////////////////
  48. //
  49. // 垫片推流(App 切后台)
  50. //
  51. /////////////////////////////////////////////////////////////////////////////////
  52. ///【字段含义】垫片推流的最大持续时间,单位秒,默认值:300s。
  53. ///【特别说明】调用 TXLivePusher 的 pausePush() 接口,会暂停摄像头采集并进入垫片推流状态,如果该状态一直保持,
  54. /// 可能会消耗主播过多的手机流量,本字段用于指定垫片推流的最大持续时间,超过后即断开与云服务器的连接。
  55. @property(nonatomic, assign) int pauseTime;
  56. ///【字段含义】垫片推流时的视频帧率,取值范围3 - 8,默认值:5 FPS。
  57. @property(nonatomic, assign) int pauseFps;
  58. ///【字段含义】垫片推流时使用的图片素材,最大尺寸不能超过1920 x 1920。
  59. @property(nonatomic, retain) TXImage *pauseImg;
  60. /////////////////////////////////////////////////////////////////////////////////
  61. //
  62. // 音视频编码参数
  63. //
  64. /////////////////////////////////////////////////////////////////////////////////
  65. ///【字段含义】视频分辨率,默认值:VIDEO_RESOLUTION_TYPE_360_640。
  66. ///【特别说明】推荐直接使用 TXLivePusher 的 setVideoQuality 接口调整画面质量。
  67. @property(nonatomic, assign) int videoResolution;
  68. ///【字段含义】视频帧率,默认值:15FPS。
  69. ///【特别说明】推荐直接使用 TXLivePusher 的 setVideoQuality 接口调整画面质量。
  70. @property(nonatomic, assign) int videoFPS;
  71. ///【字段含义】视频编码 GOP,也就是常说的关键帧间隔,单位:秒;默认值:3s。
  72. ///【特别说明】推荐直接使用 TXLivePusher 的 setVideoQuality 接口调整画面质量。
  73. @property(nonatomic, assign) int videoEncodeGop;
  74. ///【字段含义】视频编码的平均码率,默认值:700kbps。
  75. ///【特别说明】推荐直接使用 TXLivePusher 的 setVideoQuality 接口调整画面质量。
  76. @property(nonatomic, assign) int videoBitratePIN;
  77. ///【字段含义】码率自适应开关,开启后,SDK 会根据网络情况自动调节视频码率,调节范围在 (videoBitrateMin - videoBitrateMax)。
  78. ///【推荐取值】NO
  79. @property(nonatomic, assign) BOOL enableAutoBitrate;
  80. ///【字段含义】码率自适应算法
  81. ///【推荐取值】AUTO_ADJUST_BITRATE_STRATEGY_1
  82. @property(nonatomic, assign) int autoAdjustStrategy;
  83. ///【字段含义】码率自适应 - 最高码率,默认值:1000kpbs
  84. @property(nonatomic, assign) int videoBitrateMax;
  85. ///【字段含义】码率自适应 - 最低码率,默认值:400kpbs
  86. ///【推荐取值】不要设置太低的数值,过低的码率会导致运动画面出现大面积马赛克。
  87. @property(nonatomic, assign) int videoBitrateMin;
  88. ///【字段含义】音频采样率,采样率越高音质越好,对于有音乐的场景请使用48000的采样率。
  89. ///【推荐取值】AUDIO_SAMPLE_RATE_48000
  90. @property(nonatomic, assign) int audioSampleRate;
  91. ///【字段含义】音频声道数,默认值:1(单声道)。
  92. @property(nonatomic, assign) int audioChannels;
  93. ///【字段含义】是否开启耳返特效
  94. ///【推荐取值】NO
  95. ///【特别说明】开启耳返会消耗更多的 CPU,只有在主播带耳机唱歌的时候才有必要开启此功能。
  96. @property(nonatomic, assign) BOOL enableAudioPreview;
  97. ///【字段含义】是否为纯音频推流
  98. ///【推荐取值】NO
  99. ///【特别说明】如果希望实现纯音频推流的功能,需要在推流前就设置该参数,否则播放端会有兼容性问题。
  100. @property(nonatomic, assign) BOOL enablePureAudioPush;
  101. /////////////////////////////////////////////////////////////////////////////////
  102. //
  103. // 网络相关参数
  104. //
  105. /////////////////////////////////////////////////////////////////////////////////
  106. ///【字段含义】推流遭遇网络连接断开时 SDK 默认重试的次数,取值范围1 - 10,默认值:3
  107. @property(nonatomic, assign) int connectRetryCount;
  108. ///【字段含义】网络重连的时间间隔,单位秒,取值范围3 - 30,默认值:3
  109. @property(nonatomic, assign) int connectRetryInterval;
  110. /////////////////////////////////////////////////////////////////////////////////
  111. //
  112. // 自定义采集和处理
  113. //
  114. /////////////////////////////////////////////////////////////////////////////////
  115. ///【字段含义】自定义采集和自定义处理开关
  116. ///【特别说明】该字段需要使用与运算符进行级联操作(自定义采集和自定义处理不能同时开启):
  117. /// 开启自定义视频采集:_config.customModeType |= CUSTOM_MODE_VIDEO_CAPTURE;
  118. /// 开启自定义音频采集:_config.customModeType |= CUSTOM_MODE_AUDIO_CAPTURE;
  119. @property(nonatomic, assign) int customModeType;
  120. ///【字段含义】仅开启自定义采集时有效,用于设置编码分辨率。
  121. ///【特别说明】此值设置需与调用 sendVideoSampleBuffer 时传入的 SampleBuffer 的宽高比一致,否则会引起画面变形。
  122. /// 如果指定 autoSampleBufferSize 为 YES,则不需要设置该字段。
  123. @property(assign) CGSize sampleBufferSize;
  124. ///【字段含义】仅开启自定义采集时有效,YES 代表编码分辨率等于输入的 SampleBuffer 的分辨率,默认值:NO。
  125. @property BOOL autoSampleBufferSize;
  126. /////////////////////////////////////////////////////////////////////////////////
  127. //
  128. // 专业设置项(慎用)
  129. //
  130. /////////////////////////////////////////////////////////////////////////////////
  131. ///【字段含义】是否开启噪声抑制(注意:早期版本引入了拼写错误,考虑到接口兼容一直没有修正,正确拼写应该是 ANS)
  132. ///【推荐取值】NO:ANS 对于直播环境中由其它设备外放的音乐是不友好的,通过 playBGM 设置的背景音不受影响。
  133. ///【特别说明】如果直播场景只有主播在说话,ANS 有助于让主播的声音更清楚,但如果主播在吹拉弹唱,ANS 会损伤乐器的声音。
  134. @property(nonatomic, assign) BOOL enableNAS;
  135. ///【字段含义】是否开启回声抑制
  136. ///【推荐取值】NO:回声抑制会启用通话模式音量,导致音质变差,非连麦场景下请不要开启。
  137. ///【特别说明】只有在连麦模式下才需要开启 AEC,如果是普通的直播,将主播的手机和观众的手机放在一起所产生的啸叫是正常现象。
  138. @property(nonatomic, assign) BOOL enableAEC;
  139. ///【字段含义】开启视频硬件加速, 默认值:YES。
  140. @property(nonatomic, assign) BOOL enableHWAcceleration;
  141. ///【字段含义】开启音频硬件加速, 默认值:YES。
  142. @property(nonatomic, assign) BOOL enableAudioAcceleration;
  143. /////////////////////////////////////////////////////////////////////////////////
  144. //
  145. // 待废弃设置项
  146. //
  147. /////////////////////////////////////////////////////////////////////////////////
  148. ///【字段含义】是否前置摄像头,待废弃,建议直接使用 TXLivePusher 的 frontCamera 属性和 switchCamera 函数。
  149. @property(nonatomic, assign) BOOL frontCamera;
  150. ///【字段含义】美颜强度,待废弃,建议直接使用 TXLivePusher 的 setBeautyStyle 函数。
  151. @property(nonatomic, assign) float beautyFilterDepth;
  152. ///【字段含义】美白强度,待废弃,建议直接使用 TXLivePusher 的 setBeautyStyle 函数。
  153. @property(nonatomic, assign) float whiteningFilterDepth;
  154. ///【字段含义】是否开启就近选路,待废弃,默认值:YES。
  155. @property(nonatomic, assign) BOOL enableNearestIP;
  156. ///【字段含义】RTMP 传输通道的类型,待废弃,默认值为:AUTO。
  157. @property (nonatomic, assign) int rtmpChannelType;
  158. @end