TXLiveSDKTypeDef.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. #ifndef __TX_LIVE_SDK_TYPE_DEF_H__
  2. #define __TX_LIVE_SDK_TYPE_DEF_H__
  3. #include "TXLiveSDKEventDef.h"
  4. #import <Foundation/Foundation.h>
  5. #if TARGET_OS_IPHONE
  6. #import <UIKit/UIKit.h>
  7. typedef UIView TXView;
  8. typedef UIImage TXImage;
  9. typedef UIEdgeInsets TXEdgeInsets;
  10. #elif TARGET_OS_MAC
  11. #import <AppKit/AppKit.h>
  12. typedef NSView TXView;
  13. typedef NSImage TXImage;
  14. typedef NSEdgeInsets TXEdgeInsets;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////////
  17. //
  18. // 【视频相关枚举值定义】
  19. //
  20. /////////////////////////////////////////////////////////////////////////////////
  21. /**
  22. * 1.1 视频分辨率
  23. *
  24. * 在普通模式下,TXLivePusher 只支持三种固定的分辨率,即:360 × 640、540 × 960 以及 720 × 1280。
  25. *
  26. *【如何横屏推流】
  27. * 如果希望使用 640 × 360、960 × 540、1280 × 720 这样的横屏分辨率,需要设置 TXLivePushConfig 中的 homeOrientation 属性,
  28. * 并使用 TXLivePusher 中的 setRenderRotation 接口进行画面旋转。
  29. *
  30. *【自定义分辨率】
  31. * 如果希望使用其他分辨率,可以设置 TXLivePushConfig 中的 customModeType 为 CUSTOM_MODE_VIDEO_CAPTURE,
  32. * 自己采集 SampleBuffer 送给 TXLivePusher 的 sendVideoSampleBuffer 接口。
  33. *
  34. *【建议的分辨率】
  35. * 手机直播场景下最常用的分辨率为 9:16 的竖屏分辨率 540 × 960。
  36. * 从清晰的角度,540 × 960 比 360 × 640 要清晰,同时跟 720 × 1280 相当。
  37. * 从性能的角度,540 × 960 可以避免前置摄像头开启 720 × 1280 的采集分辨率,对于美颜开销很大的场景能节省不少的计算量。
  38. */
  39. typedef NS_ENUM(NSInteger, TX_Enum_Type_VideoResolution) {
  40. /// 竖屏分辨率,宽高比为 9:16
  41. VIDEO_RESOLUTION_TYPE_360_640 = 0, ///< 建议码率 800kbps
  42. VIDEO_RESOLUTION_TYPE_540_960 = 1, ///< 建议码率 1200kbps
  43. VIDEO_RESOLUTION_TYPE_720_1280 = 2, ///< 建议码率 1800kbps
  44. VIDEO_RESOLUTION_TYPE_1080_1920 = 30, ///< 建议码率 3000kbps
  45. /// 如下均为内建分辨率,为 SDK 内部使用,不支持通过接口进行设置
  46. VIDEO_RESOLUTION_TYPE_640_360 = 3,
  47. VIDEO_RESOLUTION_TYPE_960_540 = 4,
  48. VIDEO_RESOLUTION_TYPE_1280_720 = 5,
  49. VIDEO_RESOLUTION_TYPE_1920_1080 = 31,
  50. VIDEO_RESOLUTION_TYPE_320_480 = 6,
  51. VIDEO_RESOLUTION_TYPE_180_320 = 7,
  52. VIDEO_RESOLUTION_TYPE_270_480 = 8,
  53. VIDEO_RESOLUTION_TYPE_320_180 = 9,
  54. VIDEO_RESOLUTION_TYPE_480_270 = 10,
  55. VIDEO_RESOLUTION_TYPE_240_320 = 11,
  56. VIDEO_RESOLUTION_TYPE_360_480 = 12,
  57. VIDEO_RESOLUTION_TYPE_480_640 = 13,
  58. VIDEO_RESOLUTION_TYPE_320_240 = 14,
  59. VIDEO_RESOLUTION_TYPE_480_360 = 15,
  60. VIDEO_RESOLUTION_TYPE_640_480 = 16,
  61. VIDEO_RESOLUTION_TYPE_480_480 = 17,
  62. VIDEO_RESOLUTION_TYPE_270_270 = 18,
  63. VIDEO_RESOLUTION_TYPE_160_160 = 19,
  64. };
  65. /**
  66. * 1.2 画面质量挡位
  67. *
  68. * 如果您希望调整直播的编码参数,建议您直接使用 TXLivePusher 提供的 setVideoQuality 接口。
  69. * 由于视频编码参数中的分辨率,码率和帧率对最终效果都有着复杂的影响,如果您之前没有相关操作经验,不建议直接修改这些编码参数。
  70. * 我们在 setVideoQuality 接口中提供了如下几个挡位供您选择:
  71. *
  72. * 1. 标清:采用 360 × 640 的分辨率,码率调控范围 300kbps - 800kbps,关闭网络自适应时的码率为 800kbps,适合网络较差的直播环境。
  73. * 2. 高清:采用 540 × 960 的分辨率,码率调控范围 600kbps - 1500kbps,关闭网络自适应时的码率为 1200kbps,常规手机直播的推荐挡位。
  74. * 3. 超清:采用 720 × 1280 的分辨率,码率调控范围 600kbps - 1800kbps,关闭网络自适应时的码率为 1800kbps,能耗高,但清晰度较标清提升并不明显。
  75. * 4. 连麦(大主播):主播从原来的“推流状态”进入“连麦状态”后,可以通过 setVideoQuality 接口调整自 MAIN_PUBLISHER 挡位。
  76. * 5. 连麦(小主播):观众从原来的“播放状态”进入“连麦状态”后,可以通过 setVideoQuality 接口调整自 SUB_PUBLISHER 挡位。
  77. * 6. 视频通话:该选项后续会逐步废弃,如果您希望实现纯视频通话而非直播功能,推荐使用腾讯云 [TRTC](https://cloud.tencent.com/product/trtc) 服务。
  78. *
  79. * 【推荐设置】如果您对整个平台的清晰度要求比较高,推荐使用 setVideoQuality(HIGH_DEFINITION, NO, NO) 的组合。
  80. * 如果您的主播有很多三四线城市的网络适配要求,推荐使用 setVideoQuality(HIGH_DEFINITION, YES, NO) 的组合。
  81. *
  82. * @note 在开启硬件加速后,您可能会发现诸如 368 × 640 或者 544 × 960 这样的“不完美”分辨率。
  83. * 这是由于部分硬编码器要求像素能被 16 整除所致,属于正常现象,您可以通过播放端的填充模式解决“小黑边”问题。
  84. */
  85. typedef NS_ENUM(NSInteger, TX_Enum_Type_VideoQuality) {
  86. VIDEO_QUALITY_STANDARD_DEFINITION = 1, ///< 标清:采用 360 × 640 的分辨率
  87. VIDEO_QUALITY_HIGH_DEFINITION = 2, ///< 高清:采用 540 × 960 的分辨率
  88. VIDEO_QUALITY_SUPER_DEFINITION = 3, ///< 超清:采用 720 × 1280 的分辨率
  89. VIDEO_QUALITY_ULTRA_DEFINITION = 7, ///< 蓝光:采用 1080 × 1920 的分辨率
  90. VIDEO_QUALITY_LINKMIC_MAIN_PUBLISHER = 4, ///< 连麦场景下的大主播使用
  91. VIDEO_QUALITY_LINKMIC_SUB_PUBLISHER = 5, ///< 连麦场景下的小主播(连麦的观众)使用
  92. VIDEO_QUALITY_REALTIME_VIDEOCHAT = 6, ///< 纯视频通话场景使用(已废弃)
  93. };
  94. /**
  95. * 1.3 画面旋转方向
  96. */
  97. typedef NS_ENUM(NSInteger, TX_Enum_Type_HomeOrientation) {
  98. HOME_ORIENTATION_RIGHT = 0, ///< HOME 键在右边,横屏模式
  99. HOME_ORIENTATION_DOWN = 1, ///< HOME 键在下面,手机直播中最常见的竖屏直播模式
  100. HOME_ORIENTATION_LEFT = 2, ///< HOME 键在左边,横屏模式
  101. HOME_ORIENTATION_UP = 3, ///< HOME 键在上边,竖屏直播(适合小米 MIX2)
  102. };
  103. /**
  104. * 1.4 画面填充模式
  105. */
  106. typedef NS_ENUM(NSInteger, TX_Enum_Type_RenderMode) {
  107. RENDER_MODE_FILL_SCREEN = 0, ///< 图像铺满屏幕,不留黑边,如果图像宽高比不同于屏幕宽高比,部分画面内容会被裁剪掉。
  108. RENDER_MODE_FILL_EDGE = 1, ///< 图像适应屏幕,保持画面完整,但如果图像宽高比不同于屏幕宽高比,会有黑边的存在。
  109. };
  110. /**
  111. * 1.5 美颜风格
  112. */
  113. typedef NS_ENUM(NSInteger, TX_Enum_Type_BeautyStyle) {
  114. BEAUTY_STYLE_SMOOTH = 0, ///< 光滑,磨皮程度较高,更适合秀场直播类场景下使用。
  115. BEAUTY_STYLE_NATURE = 1, ///< 自然,磨皮算法会最大限度保留皮肤细节。
  116. BEAUTY_STYLE_PITU = 2, ///< 天天P图版美颜, 需要企业版 SDK 才能支持,普通版本设置此选项无效。
  117. };
  118. /**
  119. * 1.6 美颜程度,取值范围1 - 9,该枚举值定义了关闭和最大值。
  120. */
  121. typedef NS_ENUM(NSInteger, TX_Enum_Type_BeautyFilterDepth) {
  122. BEAUTY_FILTER_DEPTH_CLOSE = 0, ///< 关闭美颜
  123. BEAUTY_FILTER_DEPTH_MAX = 9, ///< 最大美颜强度
  124. };
  125. /**
  126. * 1.6 网络自适应算法,推荐选项:AUTO_ADJUST_LIVEPUSH_STRATEGY
  127. */
  128. typedef NS_ENUM(NSInteger, TX_Enum_Type_AutoAdjustStrategy) {
  129. AUTO_ADJUST_NONE = -1, ///< 非法数值,用于 SDK 内部做合法性检查
  130. AUTO_ADJUST_LIVEPUSH_STRATEGY = 0, ///< 最适合直播模式下的流控算法
  131. AUTO_ADJUST_LIVEPUSH_RESOLUTION_STRATEGY = 1, ///< 不推荐:SDK 内部会调整视频分辨率,如果有 H5 分享的需求请勿使用
  132. AUTO_ADJUST_REALTIME_VIDEOCHAT_STRATEGY = 5, ///< 待废弃,请使用腾讯云 TRTC 服务
  133. AUTO_ADJUST_BITRATE_STRATEGY_1 = 0, ///< 已经废弃
  134. AUTO_ADJUST_BITRATE_RESOLUTION_STRATEGY_1 = 1, ///< 已经废弃
  135. AUTO_ADJUST_BITRATE_STRATEGY_2 = 2, ///< 已经废弃
  136. AUTO_ADJUST_BITRATE_RESOLUTION_STRATEGY_2 = 3, ///< 已经废弃
  137. AUTO_ADJUST_REALTIME_BITRATE_STRATEGY = 4, ///< 已经废弃
  138. AUTO_ADJUST_REALTIME_BITRATE_RESOLUTION_STRATEGY = 5, ///< 已经废弃
  139. };
  140. /**
  141. * 1.7 视频帧的数据格式(未压缩前的)
  142. */
  143. typedef NS_ENUM(NSInteger, TXVideoType) {
  144. VIDEO_TYPE_420SP = 1, ///< Android 视频采集格式,PixelFormat.YCbCr_420_SP 17
  145. VIDEO_TYPE_420YpCbCr = 2, ///< iOS 视频采集格式,kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
  146. VIDEO_TYPE_420P = 3, ///< yuv420p格式
  147. VIDEO_TYPE_BGRA8888 = 4, ///< BGRA8888
  148. VIDEO_TYPE_RGBA8888 = 5, ///< RGBA8888
  149. VIDEO_TYPE_NV12 = 6, ///< NV12(iOS)
  150. };
  151. /**
  152. * 1.8 本地视频预览镜像类型
  153. *
  154. * iOS 的本地画面提供三种设置模式
  155. */
  156. typedef NS_ENUM(NSUInteger, TXLocalVideoMirrorType) {
  157. LocalVideoMirrorType_Auto = 0, ///< 前置摄像头镜像,后置摄像头不镜像
  158. LocalVideoMirrorType_Enable = 1, ///< 前后置摄像头画面均镜像
  159. LocalVideoMirrorType_Disable = 2, ///< 前后置摄像头画面均不镜像
  160. };
  161. /////////////////////////////////////////////////////////////////////////////////
  162. //
  163. // 【音频相关枚举值定义】
  164. //
  165. /////////////////////////////////////////////////////////////////////////////////
  166. /**
  167. * 2.1 音频采样率
  168. */
  169. typedef NS_ENUM(NSInteger, TX_Enum_Type_AudioSampleRate) {
  170. AUDIO_SAMPLE_RATE_8000 = 0, ///< 8k采样率
  171. AUDIO_SAMPLE_RATE_16000 = 1, ///< 16k采样率
  172. AUDIO_SAMPLE_RATE_32000 = 2, ///< 32k采样率
  173. AUDIO_SAMPLE_RATE_44100 = 3, ///< 44.1k采样率
  174. AUDIO_SAMPLE_RATE_48000 = 4, ///< 48k采样率
  175. };
  176. /**
  177. * 2.2 混响类型
  178. */
  179. typedef NS_ENUM(NSInteger, TXReverbType) {
  180. REVERB_TYPE_0 = 0, ///< 关闭混响
  181. REVERB_TYPE_1 = 1, ///< KTV
  182. REVERB_TYPE_2 = 2, ///< 小房间
  183. REVERB_TYPE_3 = 3, ///< 大会堂
  184. REVERB_TYPE_4 = 4, ///< 低沉
  185. REVERB_TYPE_5 = 5, ///< 洪亮
  186. REVERB_TYPE_6 = 6, ///< 金属声
  187. REVERB_TYPE_7 = 7, ///< 磁性
  188. };
  189. /**
  190. * 2.3 变声选项
  191. */
  192. typedef NS_ENUM(NSInteger, TXVoiceChangerType) {
  193. VOICECHANGER_TYPE_0 = 0, ///< 关闭变声
  194. VOICECHANGER_TYPE_1 = 1, ///< 熊孩子
  195. VOICECHANGER_TYPE_2 = 2, ///< 萝莉
  196. VOICECHANGER_TYPE_3 = 3, ///< 大叔
  197. VOICECHANGER_TYPE_4 = 4, ///< 重金属
  198. VOICECHANGER_TYPE_5 = 5, ///< 感冒
  199. VOICECHANGER_TYPE_6 = 6, ///< 外国人
  200. VOICECHANGER_TYPE_7 = 7, ///< 困兽
  201. VOICECHANGER_TYPE_8 = 8, ///< 死肥仔
  202. VOICECHANGER_TYPE_9 = 9, ///< 强电流
  203. VOICECHANGER_TYPE_10 = 10, ///< 重机械
  204. VOICECHANGER_TYPE_11 = 11, ///< 空灵
  205. };
  206. /**
  207. * 2.4 声音播放模式(音频路由)
  208. *
  209. * 一般手机都有两个扬声器,设置音频路由的作用就是要决定声音从哪个扬声器播放出来。
  210. * - Speakerphone:扬声器,位于手机底部,声音偏大,适合外放音乐。
  211. * - Earpiece:听筒,位于手机顶部,声音偏小,适合通话。
  212. */
  213. typedef NS_ENUM(NSInteger, TXAudioRouteType) {
  214. AUDIO_ROUTE_SPEAKER = 0, ///< 扬声器,位于手机底部,声音偏大,适合外放音乐。
  215. AUDIO_ROUTE_RECEIVER = 1, ///< 听筒,位于手机顶部,声音偏小,适合通话。
  216. };
  217. /**
  218. * 2.5 系统音量类型
  219. *
  220. * 该枚举值用于控制推流过程中使用何种系统音量类型
  221. */
  222. typedef NS_ENUM(NSInteger, TXSystemAudioVolumeType) {
  223. SYSTEM_AUDIO_VOLUME_TYPE_AUTO = 0, ///< 默认类型,SDK会自动选择合适的音量类型
  224. SYSTEM_AUDIO_VOLUME_TYPE_MEDIA = 1, ///< 仅使用媒体音量,SDK不再使用通话音量
  225. SYSTEM_AUDIO_VOLUME_TYPE_VOIP = 2, ///< 仅使用通话音量,SDK一直使用通话音量
  226. };
  227. /**
  228. * 2.6 推流用网络通道(待废弃)
  229. */
  230. typedef NS_ENUM(NSInteger, TX_Enum_Type_RTMPChannel) {
  231. RTMP_CHANNEL_TYPE_AUTO = 0, ///< 自动:推腾讯云使用加速协议,推友商云使用标准 RTMP 协议。
  232. RTMP_CHANNEL_TYPE_STANDARD = 1, ///< 标准 RTMP 协议
  233. RTMP_CHANNEL_TYPE_PRIVATE = 2, ///< 腾讯云专属加速协议
  234. };
  235. /**
  236. * 2.7 屏幕采集源(用于录屏推流)
  237. */
  238. #if TARGET_OS_OSX
  239. typedef NS_ENUM(NSInteger, TXCaptureVideoInputSource) {
  240. TXCaptureVideoInputSourceCamera,
  241. TXCaptureVideoInputSourceScreen,
  242. TXCaptureVideoInputSourceWindow
  243. };
  244. #endif
  245. /////////////////////////////////////////////////////////////////////////////////
  246. //
  247. // 【状态通知字段名 onNetStatus】
  248. //
  249. /////////////////////////////////////////////////////////////////////////////////
  250. /**
  251. * TXLivePushListener 和 TXLivePlayListener 的 onNetStatus() 会以 2s 一次的时间间隔,定时通知网络状态和内部指标,
  252. * 这些数值采用 key-value 的组织格式,其中 key 值的定义如下:
  253. */
  254. #define NET_STATUS_CPU_USAGE @"CPU_USAGE" ///> 进程 CPU 占用率
  255. #define NET_STATUS_CPU_USAGE_D @"CPU_USAGE_DEVICE" ///> 系统 CPU 占用率
  256. #define NET_STATUS_VIDEO_WIDTH @"VIDEO_WIDTH" ///> 视频分辨率宽度
  257. #define NET_STATUS_VIDEO_HEIGHT @"VIDEO_HEIGHT" ///> 视频分辨率高度
  258. #define NET_STATUS_VIDEO_FPS @"VIDEO_FPS" ///> 视频帧率:也就是视频编码器每秒生产了多少帧画面。
  259. #define NET_STATUS_VIDEO_GOP @"VIDEO_GOP" ///> 关键帧间隔:即每两个关键帧(I帧)间隔时长,单位:秒。
  260. #define NET_STATUS_VIDEO_BITRATE @"VIDEO_BITRATE" ///> 视频码率:即视频编码器每秒生产了多少视频数据,单位:kbps。
  261. #define NET_STATUS_AUDIO_BITRATE @"AUDIO_BITRATE" ///> 音频码率:即音频编码器每秒生产了多少音频数据,单位:kbps。
  262. #define NET_STATUS_NET_SPEED @"NET_SPEED" ///> 传输速度:即每秒钟发送或接收了多少字节的数据。
  263. #define NET_STATUS_VIDEO_CACHE @"VIDEO_CACHE" ///> TXLivePusher:主播端堆积的视频帧数;TXLivePlayer:播放端缓冲的视频总时长。
  264. #define NET_STATUS_AUDIO_CACHE @"AUDIO_CACHE" ///> TXLivePusher:主播端堆积的音频帧数;TXLivePlayer:播放端缓冲的音频总时长。
  265. #define NET_STATUS_VIDEO_DROP @"VIDEO_DROP" ///> TXLivePusher:主播端主动丢弃的视频帧数;TXLivePlayer: N/A。
  266. #define NET_STATUS_AUDIO_DROP @"AUDIO_DROP" ///> 暂未使用
  267. #define NET_STATUS_V_DEC_CACHE_SIZE @"V_DEC_CACHE_SIZE" ///> TXLivePlayer:播放端解码器中缓存的视频帧数(Android 端硬解码时存在)。
  268. #define NET_STATUS_V_SUM_CACHE_SIZE @"V_SUM_CACHE_SIZE" ///> TXLivePlayer:播放端缓冲的总视频帧数,该数值越大,播放延迟越高。
  269. #define NET_STATUS_AV_PLAY_INTERVAL @"AV_PLAY_INTERVAL" ///> TXLivePlayer:音画同步错位时间(播放),单位 ms,此数值越小,音画同步越好。
  270. #define NET_STATUS_AV_RECV_INTERVAL @"AV_RECV_INTERVAL" ///> TXLivePlayer:音画同步错位时间(网络),单位 ms,此数值越小,音画同步越好。
  271. #define NET_STATUS_AUDIO_CACHE_THRESHOLD @"AUDIO_CACHE_THRESHOLD" ///> TXLivePlayer:音频缓冲时长阈值,缓冲超过该阈值后,播放器会开始调控延时。
  272. #define NET_STATUS_AUDIO_INFO @"AUDIO_INFO" ///> 音频信息:包括采样率信息和声道数信息
  273. #define NET_STATUS_NET_JITTER @"NET_JITTER" ///> 网络抖动:数值越大表示抖动越大,网络越不稳定
  274. #define NET_STATUS_QUALITY_LEVEL @"NET_QUALITY_LEVEL" ///> 网络质量:0:未定义 1:最好 2:好 3:一般 4:差 5:很差 6:不可用
  275. #define NET_STATUS_SERVER_IP @"SERVER_IP" ///> 连接的Server IP地址
  276. /////////////////////////////////////////////////////////////////////////////////
  277. //
  278. // 【事件通知字段名 onPushEvent onPlayEvent】
  279. //
  280. /////////////////////////////////////////////////////////////////////////////////
  281. /**
  282. * 腾讯云 LiteAVSDK 通过 TXLivePushListener 中的 onPushEvent(),TXLivePlayListener 中的 onPlayEvent() 向您通知内部错误、警告和事件:
  283. * - 错误:严重且不可恢复的错误,会中断 SDK 的正常逻辑。
  284. * - 警告:非致命性的提醒和警告,可以不理会。
  285. * - 事件:SDK 的流程和状态通知,比如开始推流,开始播放,等等。
  286. *
  287. * 这些数值采用 key-value 的组织格式,其中 key 值的定义如下:
  288. */
  289. #define EVT_MSG @"EVT_MSG" ///> 事件ID
  290. #define EVT_TIME @"EVT_TIME" ///> 事件发生的UTC毫秒时间戳
  291. #define EVT_PARAM1 @"EVT_PARAM1" ///> 事件参数1
  292. #define EVT_PARAM2 @"EVT_PARAM2" ///> 事件参数2
  293. #define EVT_GET_MSG @"EVT_GET_MSG" ///> 消息内容,收到PLAY_EVT_GET_MESSAGE事件时,通过该字段获取消息内容
  294. #define EVT_PLAY_PROGRESS @"EVT_PLAY_PROGRESS" ///> 点播:视频播放进度
  295. #define EVT_PLAY_DURATION @"EVT_PLAY_DURATION" ///> 点播:视频总时长
  296. #define EVT_PLAYABLE_DURATION @"PLAYABLE_DURATION" ///> 点播:视频可播放时长
  297. #define EVT_PLAY_COVER_URL @"EVT_PLAY_COVER_URL" ///> 点播:视频封面
  298. #define EVT_PLAY_URL @"EVT_PLAY_URL" ///> 点播:视频播放地址
  299. #define EVT_PLAY_NAME @"EVT_PLAY_NAME" ///> 点播:视频名称
  300. #define EVT_PLAY_DESCRIPTION @"EVT_PLAY_DESCRIPTION" ///> 点播:视频简介
  301. #define STREAM_ID @"STREAM_ID"
  302. #endif