diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/IMGroupExt.h b/HHVDoctorSDK/ImSDK.framework/Headers/IMGroupExt.h
index d5fddb1..49010ae 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/IMGroupExt.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/IMGroupExt.h
@@ -9,7 +9,6 @@
 #ifndef IMGroupExt_h
 #define IMGroupExt_h
 
-#import "ImSDK.h"
 #import "TIMComm+Group.h"
 #import "TIMGroupManager+Ext.h"
 
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/IMMessageExt.h b/HHVDoctorSDK/ImSDK.framework/Headers/IMMessageExt.h
index 6b03125..110faad 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/IMMessageExt.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/IMMessageExt.h
@@ -9,7 +9,6 @@
 #ifndef ImSDK_h
 #define ImSDK_h
 
-#import "ImSDK.h"
 #import "TIMConversation+MsgExt.h"
 #import "TIMMessage+MsgExt.h"
 #import "TIMComm+MsgExt.h"
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/ImSDK.h b/HHVDoctorSDK/ImSDK.framework/Headers/ImSDK.h
index 793b11f..061dd04 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/ImSDK.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/ImSDK.h
@@ -15,8 +15,10 @@
 #import "TIMConversation.h"
 #import "TIMGroupManager.h"
 #import "TIMCallback.h"
-//#import "TIMFriendshipManager.h"
-
-//#import "IMSdkInt.h"
+#import "TIMFriendshipManager.h"
+#import "IMSdkComm.h"
+#import "TIMErrorCode.h"
+#import "IMGroupExt.h"
+#import "IMMessageExt.h"
 
 #endif
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMCallback.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMCallback.h
index 098bab7..e277724 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMCallback.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMCallback.h
@@ -14,6 +14,8 @@
 @class TIMMessage;
 @class TIMGroupTipsElem;
 @class TIMGroupInfo;
+@class TIMSNSChangeInfo;
+@class TIMFriendPendencyInfo;
 
 /**
  *  连接通知回调
@@ -167,90 +169,40 @@
 - (void)onGroupTipsEvent:(TIMGroupTipsElem*)elem;
 @end
 
-///**
-// *  好友代理事件回调
-// */
-//@protocol TIMFriendshipListener <NSObject>
-//@optional
-//
-///**
-// *  添加好友通知
-// *
-// *  @param users 好友列表(TIMUserProfile*)
-// */
-//- (void)onAddFriends:(NSArray*)users;
-//
-///**
-// *  删除好友通知
-// *
-// *  @param identifiers 用户id列表(NSString*)
-// */
-//- (void)onDelFriends:(NSArray*)identifiers;
-//
-///**
-// *  好友资料更新通知
-// *
-// *  @param profiles 资料列表(TIMUserProfile*)
-// */
-//- (void)onFriendProfileUpdate:(NSArray*)profiles;
-//
-///**
-// *  好友申请通知
-// *
-// *  @param reqs 好友申请者id列表(TIMSNSChangeInfo*)
-// */
-//- (void)onAddFriendReqs:(NSArray*)reqs;
-//
-//@end
+/**
+ *  好友代理事件回调
+ */
+@protocol TIMFriendshipListener <NSObject>
+@optional
 
-//@protocol TIMGroupListener <NSObject>
-//@optional
-//
-///**
-// *  有新用户加入群时的通知回调
-// *
-// *  @param groupId     群ID
-// *  @param membersInfo 加群用户的群资料(TIMGroupMemberInfo*)列表
-// */
-//- (void)onMemberJoin:(NSString*)groupId membersInfo:(NSArray*)membersInfo;
-//
-///**
-// *  有群成员退群时的通知回调
-// *
-// *  @param groupId 群ID
-// *  @param members 退群成员的identifier(NSString*)列表
-// */
-//- (void)onMemberQuit:(NSString*)groupId members:(NSArray*)members;
-//
-///**
-// *  群成员信息更新的通知回调
-// *
-// *  @param groupId     群ID
-// *  @param membersInfo 更新后的群成员资料(TIMGroupMemberInfo*)列表
-// */
-//- (void)onMemberUpdate:(NSString*)groupId membersInfo:(NSArray*)membersInfo;
-//
-///**
-// *  加入群的通知回调
-// *
-// *  @param groupInfo 加入群的群组资料
-// */
-//- (void)onGroupAdd:(TIMGroupInfo*)groupInfo;
-//
-///**
-// * 本地群组资料被删除的通知回调,包括主动退群,被踢,群被解散,群被回收
-// *
-// * @param groupId 对应的群ID
-// */
-//- (void)onGroupDelete:(NSString*)groupId;
-//
-///**
-// *  群资料更新的通知回调
-// *
-// *  @param groupInfo 更新后的群资料信息
-// */
-//- (void)onGroupUpdate:(TIMGroupInfo*)groupInfo;
-//
-//@end
+/**
+ *  添加好友通知
+ *
+ *  @param users 好友列表(NSString*)
+ */
+- (void)onAddFriends:(NSArray*)users;
+
+/**
+ *  删除好友通知
+ *
+ *  @param identifiers 用户id列表(NSString*)
+ */
+- (void)onDelFriends:(NSArray*)identifiers;
+
+/**
+ *  好友资料更新通知
+ *
+ *  @param profiles 资料列表(TIMSNSChangeInfo *)
+ */
+- (void)onFriendProfileUpdate:(NSArray<TIMSNSChangeInfo *> *)profiles;
+
+/**
+ *  好友申请通知
+ *
+ *  @param reqs 好友申请者id列表(TIMFriendPendencyInfo *)
+ */
+- (void)onAddFriendReqs:(NSArray<TIMFriendPendencyInfo *> *)reqs;
+
+@end
 
 #endif
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm+Group.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm+Group.h
index 0d7b502..30f3f50 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm+Group.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm+Group.h
@@ -9,9 +9,10 @@
 #ifndef TIMComm_Group_h
 #define TIMComm_Group_h
 
-#import "ImSDK.h"
+#import "TIMComm.h"
 
 @class TIMGroupPendencyMeta;
+@class TIMCreateGroupMemberInfo;
 
 #pragma mark - 枚举类型
 
@@ -228,9 +229,9 @@ typedef void (^TIMGroupMemberSucc)(NSArray * members);
 /**
  *  群列表回调
  *
- *  @param arr 群列表
+ *  @param arr 群列表,成员类型 TIMGroupInfo
  */
-typedef void (^TIMGroupListSucc)(NSArray * arr);
+typedef void (^TIMGroupListSucc)(NSArray<TIMGroupInfo *> * arr);
 
 /**
  *  本人群组内成员信息回调
@@ -329,7 +330,7 @@ typedef void (^TIMGetGroupPendencyListSucc)(TIMGroupPendencyMeta * meta, NSArray
 /**
  *  创建成员(TIMCreateGroupMemberInfo*)列表
  */
-@property(nonatomic,strong) NSArray* membersInfo;
+@property(nonatomic,strong) NSArray <TIMCreateGroupMemberInfo *>* membersInfo;
 
 @end
 
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm+MsgExt.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm+MsgExt.h
index 8906a6b..7b5bc56 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm+MsgExt.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm+MsgExt.h
@@ -10,7 +10,7 @@
 #define TIMComm_MsgExt_h
 
 #import <Foundation/Foundation.h>
-#import "ImSDK.h"
+#import "TIMComm.h"
 
 @class TIMSendToUsersDetailInfo;
 
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm.h
index 29cd6b8..93b00b1 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMComm.h
@@ -21,16 +21,19 @@
 @protocol TIMMessageRevokeListener;
 @protocol TIMUploadProgressListener;
 @protocol TIMGroupEventListener;
-//@protocol TIMFriendshipListener;
+@protocol TIMFriendshipListener;
 //@protocol TIMGroupListener;
 @class TIMMessage;
 @class TIMImageElem;
 @class TIMConversation;
 @class TIMAPNSConfig;
 @class TIMUserProfile;
+@class TIMFriend;
 @class TIMGroupInfoOption;
 @class TIMGroupMemberInfoOption;
 @class TIMFriendProfileOption;
+@class TIMFriendResult;
+@class TIMCheckFriendResult;
 
 #pragma mark - 枚举类型
 
@@ -53,10 +56,25 @@ typedef NS_ENUM(NSInteger, TIMNetworkStatus) {
  * 日志级别
  */
 typedef NS_ENUM(NSInteger, TIMLogLevel) {
+    /**
+     *  不输出任何 sdk log
+     */
     TIM_LOG_NONE                = 0,
+    /**
+     *  输出 DEBUG,INFO,WARNING,ERROR 级别的 log
+     */
     TIM_LOG_DEBUG               = 3,
+    /**
+     *  输出 INFO,WARNING,ERROR 级别的 log
+     */
     TIM_LOG_INFO                = 4,
+    /**
+     *  输出 WARNING,ERROR 级别的 log
+     */
     TIM_LOG_WARN                = 5,
+    /**
+     *  输出 ERROR 级别的 log
+     */
     TIM_LOG_ERROR               = 6,
 };
 
@@ -175,19 +193,19 @@ typedef NS_ENUM(NSInteger, TIM_IMAGE_TYPE){
  */
 typedef NS_ENUM(NSInteger, TIM_IMAGE_FORMAT){
     /**
-     *  JPG格式
+     *  JPG 格式
      */
     TIM_IMAGE_FORMAT_JPG            = 0x1,
     /**
-     *  GIF格式
+     *  GIF 格式
      */
     TIM_IMAGE_FORMAT_GIF            = 0x2,
     /**
-     *  PNG格式
+     *  PNG 格式
      */
     TIM_IMAGE_FORMAT_PNG            = 0x3,
     /**
-     *  BMP格式
+     *  BMP 格式
      */
     TIM_IMAGE_FORMAT_BMP            = 0x4,
     /**
@@ -196,6 +214,9 @@ typedef NS_ENUM(NSInteger, TIM_IMAGE_FORMAT){
     TIM_IMAGE_FORMAT_UNKNOWN        = 0xff,
 };
 
+/**
+ *  登录状态
+ */
 typedef NS_ENUM(NSInteger, TIMLoginStatus) {
     /**
      *  已登陆
@@ -213,6 +234,9 @@ typedef NS_ENUM(NSInteger, TIMLoginStatus) {
     TIM_STATUS_LOGOUT              = 3,
 };
 
+/**
+ *  群组成员是否可见
+ */
 typedef NS_ENUM(NSInteger, TIMGroupMemberVisibleType) {
     /**
      *  未知
@@ -228,6 +252,9 @@ typedef NS_ENUM(NSInteger, TIMGroupMemberVisibleType) {
     TIM_GROUP_MEMBER_VISIBLE_YES              = 0x02,
 };
 
+/**
+ *  群组是否能被搜到
+ */
 typedef NS_ENUM(NSInteger, TIMGroupSearchableType) {
     /**
      *  未知
@@ -302,13 +329,13 @@ typedef NS_ENUM(NSInteger, TIMGroupReceiveMessageOpt) {
      */
     TIM_GROUP_NOT_RECEIVE_MESSAGE                   = 1,
     /**
-     *  接受消息,不进行iOS APNs 推送
+     *  接受消息,不进行 iOS APNs 推送
      */
     TIM_GROUP_RECEIVE_NOT_NOTIFY_MESSAGE            = 2,
 };
 
 /**
- *  群Tips类型
+ *  群 Tips 类型
  */
 typedef NS_ENUM(NSInteger, TIM_GROUP_TIPS_TYPE){
     /**
@@ -342,7 +369,7 @@ typedef NS_ENUM(NSInteger, TIM_GROUP_TIPS_TYPE){
 };
 
 /**
- *  群Tips类型
+ *  群变更信息 Tips 类型
  */
 typedef NS_ENUM(NSInteger, TIM_GROUP_INFO_CHANGE_TYPE){
     /**
@@ -433,6 +460,9 @@ typedef NS_ENUM(NSInteger, TIM_GROUP_SYSTEM_TYPE){
     TIM_GROUP_SYSTEM_CUSTOM_INFO                         = 0xff,
 };
 
+/**
+ *  推送规则
+ */
 typedef NS_ENUM(NSInteger, TIMOfflinePushFlag) {
     /**
      *  按照默认规则进行推送
@@ -444,6 +474,9 @@ typedef NS_ENUM(NSInteger, TIMOfflinePushFlag) {
     TIM_OFFLINE_PUSH_NO_PUSH    = 1,
 };
 
+/**
+ *  安卓离线推送模式
+ */
 typedef NS_ENUM(NSInteger, TIMAndroidOfflinePushNotifyMode) {
     /**
      *  通知栏消息
@@ -480,6 +513,9 @@ typedef NS_ENUM(NSInteger, TIMGroupMemberRole) {
     TIM_GROUP_MEMBER_ROLE_SUPER               = 400,
 };
 
+/**
+ * 好友验证方式
+ */
 typedef NS_ENUM(NSInteger, TIMFriendAllowType) {
     /**
      *  同意任何用户加好友
@@ -497,6 +533,9 @@ typedef NS_ENUM(NSInteger, TIMFriendAllowType) {
     TIM_FRIEND_DENY_ANY                     = 2,
 };
 
+/**
+ * 性别
+ */
 typedef NS_ENUM(NSInteger, TIMGender) {
     /**
      *  未知性别
@@ -513,61 +552,8 @@ typedef NS_ENUM(NSInteger, TIMGender) {
     
 };
 
-/**
- * 基本资料标志位
- */
-typedef NS_ENUM(NSInteger, TIMProfileFlag) {
-    /**
-     * 昵称
-     */
-    TIM_PROFILE_FLAG_NICK                = 0x01,
-    /**
-     * 好友验证方式
-     */
-    TIM_PROFILE_FLAG_ALLOW_TYPE          = (0x01 << 1),
-    /**
-     * 头像
-     */
-    TIM_PROFILE_FLAG_FACE_URL            = (0x01 << 2),
-    /**
-     * 好友备注
-     */
-    TIM_PROFILE_FLAG_REMARK              = (0x01 << 3),
-    /**
-     * 好友分组
-     */
-    TIM_PROFILE_FLAG_GROUP               = (0x01 << 4),
-    /**
-     * 用户签名
-     */
-    TIM_PROFILE_FLAG_SELFSIGNATURE       = (0x01 << 5),
-    /**
-     * 用户性别
-     */
-    TIM_PROFILE_FLAG_GENDER              = (0x01 << 6),
-    /**
-     * 用户生日
-     */
-    TIM_PROFILE_FLAG_BIRTHDAY            = (0x01 << 7),
-    /**
-     * 用户区域
-     */
-    TIM_PROFILE_FLAG_LOCATION            = (0x01 << 8),
-    /**
-     * 用户语言
-     */
-    TIM_PROFILE_FLAG_LANGUAGE            = (0x01 << 9),
-    /**
-     * 用户等级
-     */
-    TIM_PROFILE_FLAG_LEVEL               = (0x01 << 10),
-    /**
-     * 用户角色
-     */
-    TIM_PROFILE_FLAG_ROLE                = (0x01 << 11),
-};
 
-#pragma mark - block回调
+#pragma mark - block 回调
 
 /**
  *  获取消息回调
@@ -620,12 +606,12 @@ typedef void (^TIMLogFunc)(TIMLogLevel lvl, NSString * msg);
 /**
  *  上传图片成功回调
  *
- *  @param elem 上传图片成功后elem
+ *  @param elem 上传图片成功后 elem
  */
 typedef void (^TIMUploadImageSucc)(TIMImageElem * elem);
 
 /**
- *  APNs推送配置更新成功回调
+ *  APNs 推送配置更新成功回调
  *
  *  @param config 配置
  */
@@ -634,7 +620,7 @@ typedef void (^TIMAPNSConfigSucc)(TIMAPNSConfig* config);
 /**
  *  群创建成功
  *
- *  @param groupId 群组Id
+ *  @param groupId 群组 Id
  */
 typedef void (^TIMCreateGroupSucc)(NSString * groupId);
 
@@ -643,7 +629,7 @@ typedef void (^TIMCreateGroupSucc)(NSString * groupId);
  *
  *  @param friends 好友列表
  */
-typedef void (^TIMFriendSucc)(NSArray * friends);
+typedef void (^TIMFriendArraySucc)(NSArray<TIMFriend *> *friends);
 
 /**
  *  获取资料回调
@@ -652,566 +638,395 @@ typedef void (^TIMFriendSucc)(NSArray * friends);
  */
 typedef void (^TIMGetProfileSucc)(TIMUserProfile * profile);
 
+/**
+ *  获取资料回调
+ *
+ *  @param profiles 资料
+ */
+typedef void (^TIMUserProfileArraySucc)(NSArray<TIMUserProfile *> *profiles);
+
+/**
+ *  好友操作回调
+ *
+ *  @param result 资料
+ */
+typedef void (^TIMFriendResultSucc)(TIMFriendResult *result);
+
+/**
+ *  好友操作回调
+ *
+ *  @param results 资料
+ */
+typedef void (^TIMFriendResultArraySucc)(NSArray<TIMFriendResult *> *results);
+
+/**
+ *  检查好友操作回调
+ *
+ *  @param results 检查结果
+ */
+typedef void (^TIMCheckFriendResultArraySucc)(NSArray<TIMCheckFriendResult *> *results);
+
 #pragma mark - 基本类型
 
+/// 实现 NSCoding 协议
 @interface TIMCodingModel : NSObject <NSCoding>
 
+///读取实例变量,并把这些数据写到 coder 中去,序列化数据
 - (void)encodeWithCoder:(NSCoder *)encoder;
+
+///从 coder 中读取数据,保存到相应的变量中,即反序列化数据
 - (id)initWithCoder:(NSCoder *)decoder;
 
 @end
 
+/// 初始化 SDK 配置信息
 @interface TIMSdkConfig : NSObject
 
-/**
- *  用户标识接入SDK的应用ID,必填
- */
+///用户标识接入 SDK 的应用 ID,必填
 @property(nonatomic,assign) int sdkAppId;
 
-/**
- *  用户的账号类型,必填
- */
-@property(nonatomic,strong) NSString * accountType;
+///用户的账号类型,新版本不需要再填写
+//@property(nonatomic,strong) NSString * accountType;
 
-/**
- *  禁用crash上报,默认上报
- */
-@property(nonatomic,assign) BOOL disableCrashReport;
-
-/**
- *  禁止在控制台打印log
- */
+///禁止在控制台打印 log
 @property(nonatomic,assign) BOOL disableLogPrint;
 
-/**
- *  本地写log文件的等级,默认DEBUG等级
- */
+///本地写 log 文件的等级,默认 DEBUG 等级
 @property(nonatomic,assign) TIMLogLevel logLevel;
 
-/**
- *  log文件路径,不设置时为默认路径
- */
+///log 文件路径,不设置时为默认路径
 @property(nonatomic,strong) NSString * logPath;
 
-/**
- *  回调给log函数的log等级,默认DEBUG等级
- */
+///回调给 log 函数的 log 等级,默认 DEBUG 等级
 @property(nonatomic,assign) TIMLogLevel logFuncLevel;
 
-/**
- *  log监听函数
- */
+///log 监听函数
 @property(nonatomic,copy) TIMLogFunc logFunc;
 
-/**
- *  消息数据库路径,不设置时为默认路径
- */
+///消息数据库路径,不设置时为默认路径
 @property(nonatomic,strong) NSString * dbPath;
 
-/**
- *  网络监听器
- */
+///网络监听器
 @property(nonatomic,strong) id<TIMConnListener> connListener;
 
 @end
 
-
+/// 设置用户配置信息
 @interface TIMUserConfig : NSObject
 
-/**
- *  禁用本地存储(加载消息扩展包有效)
- */
-@property(nonatomic,assign) BOOL disableStorage;
-
-/**
- *  禁止自动上报(加载消息扩展包有效)
- */
+///禁止消息已读自动上报,一旦禁用自动上报,需要开发者显式调用 setReadMessage ,详情请参考官网文档 [未读消息计数](https://cloud.tencent.com/document/product/269/9151)
 @property(nonatomic,assign) BOOL disableAutoReport;
 
-/**
- *  开启C2C已读回执(加载消息扩展包有效)
- */
+///开启 C2C 已读回执,只针对 C2C 消息生效,用户开启已读回执功能后,对方调用 setReadMessage 时会同步已读信息到本客户端,您可以在 TIMMessageReceiptListener 监听消息已读回执
 @property(nonatomic,assign) BOOL enableReadReceipt;
 
-/**
- *  不开启最近联系人(加载消息扩展包有效)
- */
-@property(nonatomic,assign) BOOL disableRecnetContact;
-
-/**
- *  不通过onNewMessage:抛出最近联系人的最后一条消息(加载消息扩展包有效)
- */
-@property(nonatomic,assign) BOOL disableRecentContactNotify;
-
-///**
-// *  开启关系链数据本地缓存功能(加载好友扩展包有效)
-// */
-//@property(nonatomic,assign) BOOL enableFriendshipProxy;
-
-///**
-// *  开启群组数据本地缓存功能(加载群组扩展包有效)
-// */
-//@property(nonatomic,assign) BOOL enableGroupAssistant;
-
-/**
- *  设置默认拉取的群组资料
- */
+///设置默认拉取的群组资料
 @property(nonatomic,strong) TIMGroupInfoOption * groupInfoOpt;
 
-/**
- *  设置默认拉取的群成员资料
- */
+///设置默认拉取的群成员资料
 @property(nonatomic,strong) TIMGroupMemberInfoOption * groupMemberInfoOpt;
 
-/**
- *  设置默认拉取的好友资料
- */
+///关系链参数
 @property(nonatomic,strong) TIMFriendProfileOption * friendProfileOpt;
 
-/**
- *  用户登录状态监听器
- */
-@property(nonatomic,strong) id<TIMUserStatusListener> userStatusListener;
+///用户登录状态监听器
+@property(nonatomic,weak) id<TIMUserStatusListener> userStatusListener;
 
-/**
- *  会话刷新监听器(未读计数、已读同步)(加载消息扩展包有效)
- */
-@property(nonatomic,strong) id<TIMRefreshListener> refreshListener;
+///会话刷新监听器(未读计数、已读同步)
+@property(nonatomic,weak) id<TIMRefreshListener> refreshListener;
 
-/**
- *  消息已读回执监听器(加载消息扩展包有效)
- */
-@property(nonatomic,strong) id<TIMMessageReceiptListener> messageReceiptListener;
+///消息已读回执监听器
+@property(nonatomic,weak) id<TIMMessageReceiptListener> messageReceiptListener;
 
-/**
- *  消息svr重写监听器(加载消息扩展包有效)
- */
-@property(nonatomic,strong) id<TIMMessageUpdateListener> messageUpdateListener;
+///消息 svr 重写监听器
+@property(nonatomic,weak) id<TIMMessageUpdateListener> messageUpdateListener;
 
-/**
- *  消息撤回监听器(加载消息扩展包有效)
- */
-@property(nonatomic,strong) id<TIMMessageRevokeListener> messageRevokeListener;
-
-/**
- *  文件上传进度监听器
- */
-@property(nonatomic,strong) id<TIMUploadProgressListener> uploadProgressListener;
+///消息撤回监听器
+@property(nonatomic,weak) id<TIMMessageRevokeListener> messageRevokeListener;
 
-/**
- *  群组事件通知监听器
- */
-@property(nonatomic,strong) id<TIMGroupEventListener> groupEventListener;
+///文件上传进度监听器
+@property(nonatomic,weak) id<TIMUploadProgressListener> uploadProgressListener;
 
-///**
-// *  关系链数据本地缓存监听器(加载好友扩展包、enableFriendshipProxy有效)
-// */
-//@property(nonatomic,strong) id<TIMFriendshipListener> friendshipListener;
+///群组事件通知监听器
+@property(nonatomic,weak) id<TIMGroupEventListener> groupEventListener;
 
-///**
-// *  群组据本地缓存监听器(加载群组扩展包、enableGroupAssistant有效)
-// */
-//@property(nonatomic,strong) id<TIMGroupListener> groupListener;
+///关系链数据本地缓存监听器
+@property(nonatomic,weak) id<TIMFriendshipListener> friendshipListener;
 
 @end
 
-/**
- *  登陆信息
- */
-
+/// 登陆参数
 @interface TIMLoginParam : NSObject
 
-/**
- * 用户名
- */
+///用户名
 @property(nonatomic,strong) NSString* identifier;
 
-/**
- *  鉴权Token
- */
+///鉴权 Token
 @property(nonatomic,strong) NSString* userSig;
 
-/**
- *  App用户使用OAuth授权体系分配的Appid
- */
+///App 用户使用 OAuth 授权体系分配的 Appid
 @property(nonatomic,strong) NSString* appidAt3rd;
 
 
 @end
 
-/**
- *  APNs 配置
- */
+/// APNs 配置
 @interface TIMAPNSConfig : NSObject
-/**
- *  是否开启推送:0-不进行设置 1-开启推送 2-关闭推送
- */
+
+///是否开启推送:0-不进行设置 1-开启推送 2-关闭推送
 @property(nonatomic,assign) uint32_t openPush;
-/**
- *  C2C消息声音,不设置传入nil
- */
+
+///C2C 消息声音,不设置传入 nil
 @property(nonatomic,strong) NSString * c2cSound;
 
-/**
- *  Group消息声音,不设置传入nil
- */
+///Group 消息声音,不设置传入 nil
 @property(nonatomic,strong) NSString * groupSound;
 
-/**
- *  Video声音,不设置传入nil
- */
+///Video 音视频邀请声音,不设置传入 nil (暂不支持)
 @property(nonatomic,strong) NSString * videoSound;
 
 @end
 
-/**
- *  SetToken 参数
- */
+/// SetToken 参数
 @interface TIMTokenParam : NSObject
-/**
- *  获取的客户端Token信息
- */
+
+///获取的客户端 Token 信息
 @property(nonatomic,strong) NSData* token;
-/**
- *  业务ID,传递证书时分配
- */
+
+///业务 ID,传递证书时分配
 @property(nonatomic,assign) uint32_t busiId;
 
 @end
 
-
-/**
- *  切后台参数
- */
+/// 切后台参数
 @interface TIMBackgroundParam : NSObject
 
-/**
- *  C2C 未读计数
- */
+///C2C 未读计数
 @property(nonatomic,assign) int c2cUnread;
 
-/**
- *  群 未读计数
- */
+///群未读计数
 @property(nonatomic,assign) int groupUnread;
 
 @end
 
+/// 消息定位
 @interface TIMMessageLocator : NSObject
-/**
- *  所属会话的id
- */
+
+///所属会话的 id
 @property(nonatomic,strong) NSString * sessId;
-/**
- *  所属会话的类型
- */
+
+///所属会话的类型
 @property(nonatomic,assign) TIMConversationType sessType;
-/**
- *  消息序列号
- */
+
+///消息序列号
 @property(nonatomic,assign) uint64_t seq;
-/**
- *  消息随机码
- */
+
+///消息随机码
 @property(nonatomic,assign) uint64_t rand;
-/**
- *  消息时间戳
- */
+
+///消息时间戳
 @property(nonatomic,assign) time_t time;
-/**
- *  是否本人消息
- */
+
+///是否本人消息
 @property(nonatomic,assign) BOOL isSelf;
 
-/**
- *  是否来自撤销通知
- */
+///是否来自撤销通知
 @property(nonatomic,assign) BOOL isFromRevokeNotify;
 
 @end
 
-/**
- *  已读回执
- */
+/// 已读回执
 @interface TIMMessageReceipt : NSObject
-/**
- *  已读回执对应的会话(目前只支持C2C会话)
- */
+
+///已读回执对应的会话(目前只支持 C2C 会话)
 @property(nonatomic,strong) TIMConversation * conversation;
-/**
- *  收到已读回执时,这个时间戳之前的消息都已读
- */
+
+///收到已读回执时,这个时间戳之前的消息都已读
 @property(nonatomic,assign) time_t timestamp;
 @end
 
+/// Android 离线推送配置
 @interface TIMAndroidOfflinePushConfig : NSObject
-/**
- *  离线推送时展示标签
- */
+
+///离线推送时展示标签
 @property(nonatomic,strong) NSString * title;
-/**
- *  Android离线Push时声音字段信息
- */
+
+///Android 离线 Push 时声音字段信息
 @property(nonatomic,strong) NSString * sound;
-/**
- *  离线推送时通知形式
- */
+
+///离线推送时通知形式
 @property(nonatomic,assign) TIMAndroidOfflinePushNotifyMode notifyMode;
 
 @end
 
+/// iOS 离线推送配置
 @interface TIMIOSOfflinePushConfig : NSObject
-/**
- *  离线Push时声音字段信息
- */
+
+///离线 Push 时声音字段信息
 @property(nonatomic,strong) NSString * sound;
-/**
- *  忽略badge计数
- */
+
+///忽略 badge 计数
 @property(nonatomic,assign) BOOL ignoreBadge;
 
 @end
 
-/**
- *  群组内的本人信息
- */
+/// 群组内的本人信息
 @interface TIMGroupSelfInfo : NSObject
 
-/**
- *  加入群组时间
- */
+///加入群组时间
 @property(nonatomic,assign) uint32_t joinTime;
 
-/**
- *  群组中的角色
- */
+///群组中的角色
 @property(nonatomic,assign) TIMGroupMemberRole role;
 
-/**
- *  群组消息接收选项
- */
+///群组消息接收选项
 @property(nonatomic,assign) TIMGroupReceiveMessageOpt recvOpt;
 
-/**
- *  群组中的未读消息数
- */
+///群组中的未读消息数
 @property(nonatomic,assign) uint32_t unReadMessageNum;
 
 @end
 
-/**
- *  群资料信息
- */
+/// 群资料信息
 @interface TIMGroupInfo : TIMCodingModel
 
-/**
- *  群组Id
- */
+///群组 Id
 @property(nonatomic,strong) NSString* group;
-/**
- *  群名
- */
+
+///群名
 @property(nonatomic,strong) NSString* groupName;
-/**
- *  群创建人/管理员
- */
+
+///群创建人/管理员
 @property(nonatomic,strong) NSString * owner;
-/**
- *  群类型:Private,Public,ChatRoom
- */
+
+///群类型:Private,Public,ChatRoom
 @property(nonatomic,strong) NSString* groupType;
-/**
- *  群创建时间
- */
+
+///群创建时间
 @property(nonatomic,assign) uint32_t createTime;
-/**
- *  最近一次群资料修改时间
- */
+
+///最近一次群资料修改时间
 @property(nonatomic,assign) uint32_t lastInfoTime;
-/**
- *  最近一次发消息时间
- */
+
+///最近一次发消息时间
 @property(nonatomic,assign) uint32_t lastMsgTime;
-/**
- *  最大成员数
- */
+
+///最大成员数
 @property(nonatomic,assign) uint32_t maxMemberNum;
-/**
- *  群成员数量
- */
+
+///群成员数量
 @property(nonatomic,assign) uint32_t memberNum;
 
-/**
- *  入群类型
- */
+///入群类型
 @property(nonatomic,assign) TIMGroupAddOpt addOpt;
 
-/**
- *  群公告
- */
+///群公告
 @property(nonatomic,strong) NSString* notification;
 
-/**
- *  群简介
- */
+///群简介
 @property(nonatomic,strong) NSString* introduction;
 
-/**
- *  群头像
- */
+///群头像
 @property(nonatomic,strong) NSString* faceURL;
 
-/**
- *  最后一条消息
- */
+///最后一条消息
 @property(nonatomic,strong) TIMMessage* lastMsg;
 
-/**
- *  在线成员数量
- */
+///在线成员数量
 @property(nonatomic,assign) uint32_t onlineMemberNum;
 
-/**
- *  群组是否被搜索类型
- */
+///群组是否被搜索类型
 @property(nonatomic,assign) TIMGroupSearchableType isSearchable;
 
-/**
- *  群组成员可见类型
- */
+///群组成员可见类型
 @property(nonatomic,assign) TIMGroupMemberVisibleType isMemberVisible;
 
-/**
- 是否全员禁言
- */
+///是否全员禁言
 @property(nonatomic,assign) BOOL allShutup;
 
-/**
- *  群组中的本人信息
- */
+///群组中的本人信息
 @property(nonatomic,strong) TIMGroupSelfInfo* selfInfo;
 
-/**
- *  自定义字段集合,key是NSString*类型,value是NSData*类型
- */
-@property(nonatomic,strong) NSDictionary* customInfo;
+///自定义字段集合,key 是 NSString* 类型,value 是 NSData* 类型
+@property(nonatomic,strong) NSDictionary<NSString *,NSData *>* customInfo;
 
 @end
 
-/**
- *  事件上报信息
- */
+/// 事件上报信息
 @interface TIMEventReportItem : NSObject
-/**
- *  事件id
- */
+
+///事件 id
 @property(nonatomic,assign) uint32_t event;
-/**
- *  错误码
- */
+
+///错误码
 @property(nonatomic,assign) uint32_t code;
-/**
- *  错误描述
- */
+
+///错误描述
 @property(nonatomic,strong) NSString * desc;
-/**
- *  事件延迟(单位ms)
- */
+
+///事件延迟(单位 ms)
 @property(nonatomic,assign) uint32_t delay;
 
 @end
 
+/// 获取某个群组资料
 @interface TIMGroupInfoOption : NSObject
 
-/**
- *  需要获取的群组信息标志(TIMGetGroupBaseInfoFlag),默认为0xffffff
- */
+///需要获取的群组信息标志(TIMGetGroupBaseInfoFlag),默认为0xffffff
 @property(nonatomic,assign) uint64_t groupFlags;
 
-/**
- *  需要获取群组资料的自定义信息(NSString*)列表
- */
+///需要获取群组资料的自定义信息(NSString*)列表
 @property(nonatomic,strong) NSArray * groupCustom;
 
 @end
 
+/// 需要某个群成员资料
 @interface TIMGroupMemberInfoOption : NSObject
 
-/**
- *  需要获取的群成员标志(TIMGetGroupMemInfoFlag),默认为0xffffff
- */
+///需要获取的群成员标志(TIMGetGroupMemInfoFlag),默认为0xffffff
 @property(nonatomic,assign) uint64_t memberFlags;
 
-/**
- *  需要获取群成员资料的自定义信息(NSString*)列表
- */
+///需要获取群成员资料的自定义信息(NSString*)列表
 @property(nonatomic,strong) NSArray * memberCustom;
 
 @end
 
-/**
- *  成员操作返回值
- */
+/// 群成员资料
 @interface TIMGroupMemberInfo : TIMCodingModel
 
-/**
- *  被操作成员
- */
+///成员
 @property(nonatomic,strong) NSString* member;
 
-/**
- *  群名片
- */
+///群名片
 @property(nonatomic,strong) NSString* nameCard;
 
-/**
- *  加入群组时间
- */
+///加入群组时间
 @property(nonatomic,assign) time_t joinTime;
 
-/**
- *  成员类型
- */
+///成员类型
 @property(nonatomic,assign) TIMGroupMemberRole role;
 
-/**
- *  禁言结束时间(时间戳)
- */
+///禁言结束时间(时间戳)
 @property(nonatomic,assign) uint32_t silentUntil;
 
-/**
- *  自定义字段集合,key是NSString*类型,value是NSData*类型
- */
+///自定义字段集合,key 是 NSString*类型,value 是 NSData*类型
 @property(nonatomic,strong) NSDictionary* customInfo;
 
 @end
 
+///资料与关系链
 @interface TIMFriendProfileOption : NSObject
 
-/**
- *  需要获取的好友信息标志(TIMProfileFlag),默认为0xffffff
- */
-@property(nonatomic,assign) uint64_t friendFlags;
-
-/**
- *  需要获取的好友自定义信息(NSString*)列表
- */
-@property(nonatomic,strong) NSArray * friendCustom;
-
-/**
- *  需要获取的用户自定义信息(NSString*)列表
- */
-@property(nonatomic,strong) NSArray * userCustom;
+///关系链最大缓存时间(默认缓存一天;获取资料和关系链超过缓存时间,将自动向服务器发起请求)
+@property NSInteger expiredSeconds;
 
 @end
 
-/**
- *  好友资料
- */
+///用户资料
 @interface TIMUserProfile : TIMCodingModel
 
 /**
- *  用户identifier
+ *  用户 identifier
  */
 @property(nonatomic,strong) NSString* identifier;
 
@@ -1221,11 +1036,6 @@ typedef void (^TIMGetProfileSucc)(TIMUserProfile * profile);
 @property(nonatomic,strong) NSString* nickname;
 
 /**
- *  用户备注(最大96字节,获取自己资料时,该字段为空)
- */
-@property(nonatomic,strong) NSString* remark;
-
-/**
  *  好友验证方式
  */
 @property(nonatomic,assign) TIMFriendAllowType allowType;
@@ -1241,22 +1051,22 @@ typedef void (^TIMGetProfileSucc)(TIMUserProfile * profile);
 @property(nonatomic,strong) NSData* selfSignature;
 
 /**
- *  好友性别
+ *  用户性别
  */
 @property(nonatomic,assign) TIMGender gender;
 
 /**
- *  好友生日
+ *  用户生日
  */
 @property(nonatomic,assign) uint32_t birthday;
 
 /**
- *  好友区域
+ *  用户区域
  */
 @property(nonatomic,strong) NSData* location;
 
 /**
- *  好友语言
+ *  用户语言
  */
 @property(nonatomic,assign) uint32_t language;
 
@@ -1271,16 +1081,61 @@ typedef void (^TIMGetProfileSucc)(TIMUserProfile * profile);
 @property(nonatomic,assign) uint32_t role;
 
 /**
- *  好友分组名称 NSString* 列表
+ *  自定义字段集合,key是NSString类型,value是NSData类型或者NSNumber类型
+ *  key值按照后台配置的字符串传入,不包括 TIMProfileTypeKey_Custom_Prefix 前缀
+ */
+@property(nonatomic,strong) NSDictionary* customInfo;
+
+@end
+
+typedef void(^ProfileCallBack) (TIMUserProfile * proflie);
+
+/**
+ *  好友
  */
-@property(nonatomic,strong) NSArray* friendGroups;
+@interface TIMFriend : TIMCodingModel
+
+/**
+ *  好友identifier
+ */
+@property(nonatomic,strong) NSString *identifier;
+
+/**
+ *  好友备注(最大96字节,获取自己资料时,该字段为空)
+ */
+@property(nonatomic,strong) NSString *remark;
+
+/**
+ *  分组名称 NSString* 列表
+ */
+@property(nonatomic,strong) NSArray *groups;
+
+/**
+ *  申请时的添加理由
+ */
+@property(nonatomic,strong) NSString *addWording;
+
+/**
+ *  申请时的添加来源
+ */
+@property(nonatomic,strong) NSString *addSource;
+
+/**
+ * 添加时间
+ */
+@property(nonatomic,assign) uint64_t addTime;
 
 /**
  *  自定义字段集合,key是NSString类型,value是NSData类型或者NSNumber类型
- *  (key值按照后台配置的字符串传入)
+ *  key值按照后台配置的字符串传入,不包括 TIMFriendTypeKey_Custom_Prefix 前缀
  */
 @property(nonatomic,strong) NSDictionary* customInfo;
 
+/**
+ * 好友资料
+ */
+@property(nonatomic,strong) TIMUserProfile *profile;
+
 @end
 
 #endif
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMConversation+MsgExt.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMConversation+MsgExt.h
index 24ace2a..0efab20 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMConversation+MsgExt.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMConversation+MsgExt.h
@@ -9,93 +9,100 @@
 #ifndef TIMConversation_h
 #define TIMConversation_h
 
-#import "ImSDK.h"
+#import "TIMConversation.h"
 #import "TIMMessage+MsgExt.h"
 
 @interface TIMConversation (MsgExt)
 
 /**
- *  保存消息到消息列表,这里只保存在本地
+ *  保存会话消息
+ *
+ *  保存消息到消息列表,这里只保存在本地。
  *
  *  @param msg 消息体
  *  @param sender 发送方
  *  @param isReaded 是否已读,如果发送方是自己,默认已读
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)saveMessage:(TIMMessage*)msg sender:(NSString*)sender isReaded:(BOOL)isReaded;
 
 /**
- *  获取会话消息
+ *  获取会话漫游消息
+ *
+ *  1. 登录后可以获取漫游消息,单聊和群聊消息免费漫游7天,用户有额外消息漫游需求时,可前往 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 消息 ->消息漫游时长 购买,具体资费请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673)。
+ *  2. 如果本地消息全部都是连续的,则不会通过网络获取,如果本地消息不连续,会通过网络获取断层消息。
+ *  3. 对于图片、语音等资源类消息,消息体只会包含描述信息,需要通过额外的接口下载数据,详情请参考 [消息收发](https://cloud.tencent.com/document/product/269/9150)中的 "消息解析" 部分文档。
  *
  *  @param count 获取数量
- *  @param last  上次最后一条消息
+ *  @param last  上次最后一条消息,如果 last 为 nil,从最新的消息开始读取
  *  @param succ  成功时回调
  *  @param fail  失败时回调
  *
- *  @return 0 本次操作成功
+ *  @return 0:本次操作成功;1:本次操作失败
  */
 - (int)getMessage:(int)count last:(TIMMessage*)last succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
 
 /**
- *  向前获取会话消息
+ *  向前获取会话漫游消息
+ *
+ *  调用方式和 getMessage 一样,区别是 getMessage 获取的是时间更老的消息,主要用于下拉 Tableview 刷新消息数据,getMessageForward 获取的是时间更新的消息,主要用于上拉 Tableview 刷新消息数据。
  *
  *  @param count 获取数量
- *  @param last  上次最后一条消息
+ *  @param last  上次最后一条消息,如果 last 为 nil,从最新的消息开始读取
  *  @param succ  成功时回调
  *  @param fail  失败时回调
  *
- *  @return 0 本次操作成功
+ *  @return 0:本次操作成功;1:本次操作失败
  */
 - (int)getMessageForward:(int)count last:(TIMMessage*)last succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
 
 /**
  *  获取本地会话消息
  *
+ *  1. 对于单聊,登录后可以获取本地缓存消息
+ *  2. 对于群组,开启最近联系人漫游(登录之后 SDK 默认开启,可以通过 TIMUserConfig 里面的 disableRecnetContact 关闭)的情况下,登录后只能获取最近一条消息,可通过 getMessage 获取漫游消息
+ *
  *  @param count 获取数量
  *  @param last  上次最后一条消息
  *  @param succ  成功时回调
  *  @param fail  失败时回调
  *
- *  @return 0 本次操作成功
+ *  @return 0:本次操作成功;1:本次操作失败
  */
 - (int)getLocalMessage:(int)count last:(TIMMessage*)last succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取会话消息
+ *  获取指定会话消息
  *
  *  @param locators 消息定位符(TIMMessageLocator)数组
  *  @param succ  成功时回调
  *  @param fail  失败时回调
  *
- *  @return 0 本次操作成功
+ *  @return 0:本次操作成功;1:本次操作失败
  */
 - (int)findMessages:(NSArray*)locators succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
 
 /**
- *  撤回消息(仅C2C和GROUP会话有效、onlineMessage无效、AVChatRoom和BChatRoom无效)
+ *  撤回消息
+ *
+ *  1. 仅 C2C 和 GROUP 会话有效、onlineMessage 无效、AVChatRoom 和 BChatRoom 无效。
+ *  2. 可以在 TIMUserConfig 设置的 TIMMessageRevokeListener 监听 onRevokeMessage 消息撤回回调。
+ *  3. 遍历本地消息列表,如果消息的 respondsToLocator 函数返回 YES,则是对应的消息,您可以在 UI 上执行删除操作,具体可以参考 TUIMessageController.h 里面的 onRevokeMessage 回调的实现。
  *
  *  @param msg   被撤回的消息
  *  @param succ  成功时回调
  *  @param fail  失败时回调
  *
- *  @return 0 本次操作成功
+ *  @return 0:本次操作成功;1:本次操作失败
  */
 - (int)revokeMessage:(TIMMessage*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
- *  同步本会话的消息撤回通知(仅GROUP会话有效)
- *
- *  @param succ  成功时回调,同步的通知会通过TIMMessageRevokeListener抛出
- *  @param fail  失败时回调
- *
- *  @return 0 本次操作成功
- */
-- (int)syncRevokeNotify:(TIMSucc)succ fail:(TIMFail)fail;
-
-/**
  *  删除本地会话消息
  *
+ *  可以在保留会话同时删除本地的会话消息。
+ *
  *  @param succ  成功时回调
  *  @param fail  失败时回调
  *
@@ -106,7 +113,11 @@
 /**
  *  设置已读消息
  *
- *  @param readed 会话内最近一条已读的消息,nil表示上报最新消息
+ *  1. 如果在 TIMUserConfig 关闭了自动已读上报(设置 disableAutoReport 为 YES),这里需要显示调用 setReadMessage ,消息的已读状态才会改变。
+ *  2. 如果在 TIMUserConfig 开启了消息回执(设置 enableReadReceipt 为 YES),收消息的用户需要显示调用 setReadMessage ,发消息的用户才能通过 TIMMessageReceiptListener 监听到消息的已读回执。
+ *  3. 如果您需要设置单条消息的已读状态,请使用 TIMMessage+MsgExt.h 中的 setCustomInt 自定义字段接口设置,通过 customInt 获取,需要注意的是,这个接口设置的字段只在本地保存,如果切换了终端,或则 APP 被卸载,这个值都会失效。
+ *
+ *  @param readed 会话内最近一条已读的消息,nil 表示上报最新消息
  *
  *  @param succ  成功时回调
  *  @param fail  失败时回调
@@ -116,7 +127,10 @@
 - (int)setReadMessage:(TIMMessage*)readed succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取该会话的未读计数
+ *  获取会话的未读计数
+ *
+ *  1. 单终端,未卸载 APP 的情况下,您可以通过当前接口获取准确的未读计数。
+ *  2. 如果需要在多终端或则程序 APP 卸载重装后未读计数依然准确,请设置 TIMUserConfig 的 disableAutoReport 为 YES,然后显示调用 setReadMessage。详情请参考 [未读消息计数](https://cloud.tencent.com/document/product/269/9151)
  *
  *  @return 返回未读计数
  */
@@ -134,32 +148,28 @@
  *
  *  @param msgs 消息(TIMMessage*)列表
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)importMessages:(NSArray*)msgs;
 
 /**
  *  设置会话草稿
  *
- *  @param draft 草稿内容
+ *  UI 展示最近联系人列表时,时常会展示用户的草稿内容,ImSDK 提供了设置和获取草稿的接口,用户可以通过此接口设置会话的草稿信息。草稿信息会存本地数据库,重新登录后依然可以获取。
+ *
+ *  @param draft 草稿内容,详情请参考 TIMMessage+MsgExt.h 里面的 TIMMessageDraft 定义
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)setDraft:(TIMMessageDraft*)draft;
 
 /**
  *  获取会话草稿
  *
- *  @return 草稿内容,没有草稿返回nil
+ *  @return 草稿内容,没有草稿返回 nil
  */
 - (TIMMessageDraft*)getDraft;
 
-/**
- * 禁用本会话的存储,只对当前初始化有效,重启后需要重新设置
- * 需要 initSdk 之后调用
- */
-- (void)disableStorage;
-
 @end
 
 #endif /* TIMConversation_h */
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMConversation.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMConversation.h
index 5d3db0e..39b0a69 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMConversation.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMConversation.h
@@ -22,34 +22,45 @@
 /**
  *  发送消息
  *
+ *  TIMMessage 由多个 TIMElem 组成,每个 TIMElem 可以是文本和图片,也就是说每一条消息可包含多个文本和多张图片。详情请参考官网文档 [消息收发](https://cloud.tencent.com/document/product/269/9150)
+ *
  *  @param msg  消息体
  *  @param succ 发送成功时回调
  *  @param fail 发送失败时回调
  *
- *  @return 0 本次操作成功
+ *  @return 0:操作成功;1:操作失败
  */
 - (int)sendMessage:(TIMMessage*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  发送在线消息(服务器不保存消息)
  *
+ *  1. 对于某些场景,需要发送在线消息,即用户在线时收到消息,如果用户不在线,下次登录也不会看到消息,可用于通知类消息,这种消息不会进行存储,也不会计入未读计数。发送接口与 sendMessage 类似。
+ *  2. 暂不支持 AVChatRoom 和 BChatRoom 类型。
+ *
  *  @param msg  消息体
  *  @param succ 成功回调
  *  @param fail 失败回调
  *
- *  @return 0 成功
+ *  @return 0:操作成功;1:操作失败
  */
 - (int)sendOnlineMessage:(TIMMessage*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取会话人,单聊为对方账号,群聊为群组Id
+ *  获取会话人
+ *
+ *  C2C:对方账号;Group:群组Id。
+ *
+ *  对同一个 C2C 会话或则群聊会话,getReceiver 获取的会话人都是固定的,C2C 获取的是对方账号,Group 获取的是群组 Id。
  *
  *  @return 会话人
  */
 - (NSString*)getReceiver;
 
 /**
- *  获取群名称(只有群会话有效)
+ *  获取群名称
+ *
+ *  获取群名称,只有群会话有效。
  *
  *  @return 群名称
  */
@@ -63,9 +74,9 @@
 - (TIMConversationType)getType;
 
 /**
- *  获取该会话所属用户的id
+ *  获取自己的 id
  *
- *  @return 用户id
+ *  @return 用户 id
  */
 - (NSString*)getSelfIdentifier;
 
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMErrorCode.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMErrorCode.h
new file mode 100755
index 0000000..9400beb
--- /dev/null
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMErrorCode.h
@@ -0,0 +1,108 @@
+//
+//  TIMErrorCode.h
+//  ImSDK
+//
+//  Created by jameskhdeng on 2018/11/23.
+//  Copyright © 2018 tencent. All rights reserved.
+//
+
+#ifndef TIMErrorCode_h
+#define TIMErrorCode_h
+
+enum ERROR_CODE {
+    ERR_SUCC = 0,
+    ERR_PARSE_RESPONSE_FAILED            = 6001, //解析响应失败
+    ERR_SERIALIZE_REQ_FAILED             = 6002, //序列化请求失败
+    ERR_NO_SUCC_RESULT                   = 6003, //批量操作无成功结果
+    ERR_INVALID_CONVERSATION             = 6004, //IM: 无效会话
+    ERR_LOADMSG_FAILED                   = 6005, //IM: 加载本地消息存储失败
+    ERR_FILE_TRANS_AUTH_FAILED           = 6006, //IM: 文件传输 - 鉴权失败
+    ERR_FILE_TRANS_NO_SERVER             = 6007, //IM: 文件传输 - 获取svr失败
+    ERR_FILE_TRANS_UPLOAD_FAILED         = 6008, //IM: 文件传输 - 上传失败
+    ERR_FILE_TRANS_DOWNLOAD_FAILED       = 6009, //IM: 文件传输 - 下载失败
+    ERR_HTTP_REQ_FAILED                  = 6010, //HTTP请求失败
+    ERR_TO_USER_INVALID                  = 6011, //IM: 无效接收方
+    ERR_REQUEST_TIMEOUT                  = 6012, //请求超时
+    ERR_SDK_NOT_INITIALIZED              = 6013, //SDK未初始化
+    ERR_SDK_NOT_LOGGED_IN                = 6014, //SDK未登录
+    ERR_IN_PROGESS                       = 6015, //执行中
+    ERR_INVALID_MSG_ELEM                 = 6016, //IM: 无效消息elem
+    ERR_INVALID_PARAMETERS               = 6017, //API参数无效
+    ERR_INIT_CORE_FAIL                   = 6018, //INIT CORE模块失败
+    ERR_DATABASE_OPERATE_FAILED          = 6019, //本地数据库操作失败
+    ERR_EXPIRED_SESSION_NODE             = 6020, //SessionNode为null
+    ERR_INVALID_SDK_OBJECT               = 6021, //无效的imsdk对象,例如用户自己生成TIMImage,或内部赋值错误导致的sdk对象无效
+    ERR_IO_OPERATION_FAILED              = 6022, //本地IO操作失败
+    ERR_LOGGED_OUT_BEFORE_LOGIN_FINISHED = 6023, //在登录完成前进行了登出(在登录时返回)
+    ERR_TLSSDK_NOT_INITIALIZED           = 6024, //tlssdk未初始化
+    ERR_TLSSDK_USER_NOT_FOUND            = 6025, //TLSSDK没有找到相应的用户信息
+    ERR_NO_PREVIOUS_LOGIN                = 6026, //自动登陆时并没有登陆过该用户
+    
+    ERR_BIND_FAIL_UNKNOWN                = 6100, //QALSDK未知原因BIND失败
+    ERR_BIND_FAIL_NO_SSOTICKET           = 6101, //缺少SSO票据
+    ERR_BIND_FAIL_REPEATD_BIND           = 6102, //重复BIND
+    ERR_BIND_FAIL_TINYID_NULL            = 6103, //tiny为空
+    ERR_BIND_FAIL_GUID_NULL              = 6104, //guid为空
+    ERR_BIND_FAIL_UNPACK_REGPACK_FAILED  = 6105, //解注册包失败
+    ERR_BIND_FAIL_REG_TIMEOUT            = 6106, //注册超时
+    ERR_BIND_FAIL_ISBINDING              = 6107, //正在bind操作中
+    
+    ERR_PACKET_FAIL_UNKNOWN              = 6120, //发包未知错误
+    ERR_PACKET_FAIL_REQ_NO_NET           = 6121, //发送请求包时没有网络,处理时转换成ERR_REQ_NO_NET_ON_REQ
+    ERR_PACKET_FAIL_RESP_NO_NET          = 6122, //发送回复包时没有网络,处理时转换成ERR_REQ_NO_NET_ON_RSP
+    ERR_PACKET_FAIL_REQ_NO_AUTH          = 6123, //发送请求包时没有权限
+    ERR_PACKET_FAIL_SSO_ERR              = 6124, //SSO错误
+    ERR_PACKET_FAIL_REQ_TIMEOUT          = 6125, //请求超时,处理时转化成ERR_REQUEST_TIMEOUT
+    ERR_PACKET_FAIL_RESP_TIMEOUT         = 6126, //回复超时,处理时转化成ERR_REQUEST_TIMEOUT
+    ERR_PACKET_FAIL_REQ_ON_RESEND        = 6127, //
+    ERR_PACKET_FAIL_RESP_NO_RESEND       = 6128, //
+    ERR_PACKET_FAIL_FLOW_SAVE_FILTERED   = 6129, //
+    ERR_PACKET_FAIL_REQ_OVER_LOAD        = 6130, //
+    ERR_PACKET_FAIL_LOGIC_ERR            = 6131,
+    
+    ERR_FRIENDSHIP_PROXY_NOT_SYNCED      = 6150, // proxy_manager没有完成svr数据同步
+    ERR_FRIENDSHIP_PROXY_SYNCING         = 6151, // proxy_manager正在进行svr数据同步
+    ERR_FRIENDSHIP_PROXY_SYNCED_FAIL     = 6152, // proxy_manager同步失败
+    ERR_FRIENDSHIP_PROXY_LOCAL_CHECK_ERR = 6153, // proxy_manager请求参数,在本地检查不合法
+    
+    ERR_GROUP_INVALID_FIELD                  = 6160, // group assistant请求字段中包含非预设字段
+    ERR_GROUP_STORAGE_DISABLED             = 6161, // group assistant群资料本地存储没有开启
+    ERR_LOADGRPINFO_FAILED                 = 6162, // failed to load groupinfo from storage
+    
+    ERR_REQ_NO_NET_ON_REQ                = 6200, // 请求的时候没有网络
+    ERR_REQ_NO_NET_ON_RSP                = 6201, // 响应的时候没有网络
+    ERR_SERIVCE_NOT_READY                = 6205, // QALSDK服务未就绪
+    ERR_USER_SIG_EXPIRED                 = 6206, // 票据过期
+    ERR_LOGIN_AUTH_FAILED                = 6207, // 账号认证失败(tinyid转换失败)
+    ERR_LOGIN_KICKED_OFF_BY_OTHER        = 6208, // 账号被踢
+    ERR_NEVER_CONNECT_AFTER_LAUNCH       = 6209, // 在应用启动后没有尝试联网
+    
+    ERR_REQ_FAILED                       = 6210, // QAL执行失败
+    ERR_REQ_INVALID_REQ                  = 6211, // 请求非法,toMsgService非法
+    ERR_REQ_OVERLOADED                   = 6212, // 请求队列満
+    ERR_REQ_KICK_OFF                     = 6213, // 已经被其他终端踢了
+    ERR_REQ_SERVICE_SUSPEND              = 6214, // 服务被暂停
+    ERR_REQ_INVALID_SIGN                 = 6215, // SSO签名错误
+    ERR_REQ_INVALID_COOKIE               = 6216, // SSO cookie无效
+    ERR_LOGIN_TLS_RSP_PARSE_FAILED       = 6217, // 登录时TLS回包校验,包体长度错误
+    ERR_LOGIN_OPENMSG_TIMEOUT            = 6218, // 登录时OPENSTATSVC向OPENMSG上报状态超时
+    ERR_LOGIN_OPENMSG_RSP_PARSE_FAILED   = 6219, // 登录时OPENSTATSVC向OPENMSG上报状态时解析回包失败
+    ERR_LOGIN_TLS_DECRYPT_FAILED         = 6220, // 登录时TLS解密失败
+    ERR_WIFI_NEED_AUTH                   = 6221, // wifi需要认证
+    
+    ERR_USER_CANCELED                    = 6222, // 用户已取消
+    
+    ERR_REVOKE_TIME_LIMIT_EXCEED         = 6223, //消息撤回超过了时间限制(默认2分钟)
+    ERR_LACK_UGC_EXT                     = 6224, // 缺少UGC扩展包
+    ERR_AUTOLOGIN_NEED_USERSIG         = 6226, //自动登录,本地票据过期,需要userSig手动登录
+    
+    
+    ERR_REQ_CONTENT_ATTACK               = 80001, // 消息内容安全打击
+    
+    ERR_LOGIN_SIG_EXPIRE                 = 70001,  // 登陆返回,票据过期
+    
+    ERR_SDK_HAD_INITIALIZED              = 90001,  // SDK 已经初始化无需重复初始化
+    ERR_OPENBDH_BASE                     = 115000,  // openbdh 错误码基
+};
+
+#endif /* TIMErrorCode_h */
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMFriendshipDefine.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMFriendshipDefine.h
new file mode 100755
index 0000000..393f882
--- /dev/null
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMFriendshipDefine.h
@@ -0,0 +1,664 @@
+//
+//  TIMFriendshipDefine.h
+//  imsdk
+//
+//  Created by annidyfeng on 2019/3/7.
+//  Copyright © 2019年 Tencent. All rights reserved.
+//
+
+#ifndef TIMFriendshipDefine_h
+#define TIMFriendshipDefine_h
+
+#import "ImSDK.h"
+
+@class TIMFriendMetaInfo;
+@class TIMFriendPendencyResponse;
+@class TIMFriendPendencyItem;
+@class TIMFriendFutureMeta;
+@class TIMFriendGroup;
+
+#pragma mark - 枚举类型
+
+/**
+ * 好友操作状态
+ *
+ * 详细错误码参见 https://cloud.tencent.com/document/product/269/1671#.E5.85.B3.E7.B3.BB.E9.93.BE.E9.94.99.E8.AF.AF.E7.A0.81
+ */
+typedef NS_ENUM(NSInteger, TIMFriendStatus) {
+    /**
+     *  操作成功
+     */
+    TIM_FRIEND_STATUS_SUCC                              = 0,
+    
+    /**
+     *  请求参数错误,请根据错误描述检查请求是否正确
+     */
+    TIM_FRIEND_PARAM_INVALID                                = 30001,
+
+    /**
+     *  请求参数错误,SdkAppid 不匹配。
+     */
+    TIM_FRIEND_SDK_APPID_INVALID                            = 30002,
+
+    /**
+     *  请求的用户帐号不存在
+     */
+    TIM_FRIEND_ID_INVALID                                   = 30003,
+
+    /**
+     *  请求需要 App 管理员权限
+     */
+    TIM_FRIEND_NEED_ADMIN_PERMISSON                         = 30004,
+
+    /**
+     *  关系链字段中包含敏感词
+     */
+    TIM_FRIEND_DIRTY_WORD                                   = 30005,
+    
+    /**
+     *  服务器内部错误,请重试
+     */
+    TIM_FRIEND_SERVER_ERROR                                 = 30006,
+
+    /**
+     *  网络超时,请稍后重试
+     */
+    TIM_FRIEND_TIMEOUT                                      = 30007,
+
+    /**
+     *  并发写导致写冲突,建议使用批量方式
+     */
+    TIM_FRIEND_WRITE_ERROR                                  = 30008,
+
+    /**
+     *  后台禁止该用户发起加好友请求
+     */
+    TIM_ADD_FRIEND_FORBIDEN                                 = 30009,
+    
+    /**
+     *  自己的好友数已达系统上限
+     */
+    TIM_ADD_FRIEND_STATUS_SELF_FRIEND_FULL                  = 30010,
+    
+    /**
+     * 分组已达系统上限
+     */
+    TIM_UPDATE_FRIEND_GROUP_STATUS_MAX_GROUPS_EXCEED        = 30011,
+
+    /**
+     * 未决数已达系统上限。
+     */
+    TIM_PENDENCY_STATUS_FULL                                = 30012,
+    
+    /**
+     * 黑名单数已达系统上限
+     */
+    TIM_ADD_BLACKLIST_STATUS_FULL                           = 30013,
+    
+    /**
+     *  对方的好友数已达系统上限
+     */
+    TIM_ADD_FRIEND_STATUS_THEIR_FRIEND_FULL                 = 30014,
+    
+    /**
+     *  被加好友在自己的黑名单中
+     */
+    TIM_ADD_FRIEND_STATUS_IN_SELF_BLACK_LIST                = 30515,
+    
+    /**
+     *  被加好友设置为禁止加好友
+     */
+    TIM_ADD_FRIEND_STATUS_FRIEND_SIDE_FORBID_ADD            = 30516,
+    
+    /**
+     *  已被被添加好友设置为黑名单
+     */
+    TIM_ADD_FRIEND_STATUS_IN_OTHER_SIDE_BLACK_LIST          = 30525,
+    
+    /**
+     *  等待好友审核同意
+     */
+    TIM_ADD_FRIEND_STATUS_PENDING                           = 30539,
+    
+    /**
+     *  添加好友请求被安全策略打击,请勿频繁发起添加好友请求
+     */
+    TIM_ADD_FRIEND_STATUS_SENSITIVE                         = 30540,
+    
+    /**
+     *  对方没有申请过好友
+     */
+    TIM_RESPONSE_FRIEND_STATUS_NO_REQ                       = 30614,
+    
+    /**
+     *  删除好友请求被安全策略打击,请勿频繁发起删除好友请求
+     */
+    TIM_DELETE_FRIEND_STATUS_SENSITIVE                      = 31707,
+};
+
+typedef NS_ENUM(NSInteger, TIMDelFriendType) {
+    /**
+     *  删除单向好友
+     */
+    TIM_FRIEND_DEL_SINGLE               = 1,
+    
+    /**
+     *  删除双向好友
+     */
+    TIM_FRIEND_DEL_BOTH                 = 2,
+};
+
+typedef NS_ENUM(NSInteger, TIMPendencyType) {
+    /**
+     *  别人发给我的
+     */
+    TIM_PENDENCY_COME_IN                    = 1,
+    
+    /**
+     *  我发给别人的
+     */
+    TIM_PENDENCY_SEND_OUT                   = 2,
+    
+    /**
+     * 别人发给我的 和 我发给别人的。仅拉取时有效
+     */
+    TIM_PENDENCY_BOTH                       = 3,
+};
+
+/**
+ * 推荐好友类型
+ */
+typedef NS_ENUM(NSInteger, TIMFutureFriendType) {
+    /**
+     *  收到的未决请求
+     */
+    TIM_FUTURE_FRIEND_PENDENCY_IN_TYPE              = 0x1,
+    
+    /**
+     *  发出去的未决请求
+     */
+    TIM_FUTURE_FRIEND_PENDENCY_OUT_TYPE             = 0x2,
+    
+    /**
+     *  推荐好友
+     */
+    TIM_FUTURE_FRIEND_RECOMMEND_TYPE                = 0x4,
+    
+    /**
+     *  已决好友
+     */
+    TIM_FUTURE_FRIEND_DECIDE_TYPE                   = 0x8,
+};
+
+/**
+ * 翻页选项
+ */
+typedef NS_ENUM(NSInteger, TIMPageDirectionType) {
+    /**
+     *  向上翻页
+     */
+    TIM_PAGE_DIRECTION_UP_TYPE            = 1,
+    
+    /**
+     *  向下翻页
+     */
+    TIM_PAGE_DIRECTION_DOWN_TYPE           = 2,
+};
+
+/**
+ *  好友检查类型
+ */
+typedef NS_ENUM(NSInteger,TIMFriendCheckType) {
+    /**
+     *  单向好友
+     */
+    TIM_FRIEND_CHECK_TYPE_UNIDIRECTION     = 0x1,
+    /**
+     *  互为好友
+     */
+    TIM_FRIEND_CHECK_TYPE_BIDIRECTION      = 0x2,
+};
+
+/**
+ *  好友关系类型
+ */
+typedef NS_ENUM(NSInteger,TIMFriendRelationType) {
+    /**
+     *  不是好友
+     */
+    TIM_FRIEND_RELATION_TYPE_NONE           = 0x0,
+    /**
+     *  对方在我的好友列表中
+     */
+    TIM_FRIEND_RELATION_TYPE_MY_UNI         = 0x1,
+    /**
+     *  我在对方的好友列表中
+     */
+    TIM_FRIEND_RELATION_TYPE_OTHER_UNI      = 0x2,
+    /**
+     *  互为好友
+     */
+    TIM_FRIEND_RELATION_TYPE_BOTHWAY        = 0x3,
+};
+
+typedef NS_ENUM(NSInteger, TIMFriendResponseType) {
+    /**
+     *  同意加好友(建立单向好友)
+     */
+    TIM_FRIEND_RESPONSE_AGREE                       = 0,
+    
+    /**
+     *  同意加好友并加对方为好友(建立双向好友)
+     */
+    TIM_FRIEND_RESPONSE_AGREE_AND_ADD               = 1,
+    
+    /**
+     *  拒绝对方好友请求
+     */
+    TIM_FRIEND_RESPONSE_REJECT                      = 2,
+};
+
+#pragma mark - block回调
+
+/**
+ * 获取好友列表回调
+ *
+ *  @param meta 好友元信息
+ *  @param friends 好友列表 TIMUserProfile* 数组,只包含需要的字段
+ */
+typedef void (^TIMGetFriendListByPageSucc)(TIMFriendMetaInfo * meta, NSArray * friends);
+
+/**
+ * 获取未决请求列表成功
+ *
+ *  @param pendencyResponse 未决请求元信息
+ */
+typedef void (^TIMGetFriendPendencyListSucc)(TIMFriendPendencyResponse *pendencyResponse);
+
+/**
+ *  群搜索回调
+ *
+ *  @param totalNum 搜索结果的总数
+ *  @param users    请求的用户列表片段
+ */
+typedef void (^TIMUserSearchSucc)(uint64_t totalNum, NSArray * users);
+
+/**
+ *  好友分组列表
+ *
+ *  @param groups 好友分组(TIMFriendGroup*)列表
+ */
+typedef void (^TIMFriendGroupArraySucc)(NSArray<TIMFriendGroup *> * groups);
+
+/**
+ *  好友关系检查回调
+ *
+ *  @param results TIMCheckFriendResult列表
+ */
+typedef void (^TIMFriendCheckSucc)(NSArray* results);
+
+#pragma mark - 基本类型
+
+/**
+ *  加好友请求
+ */
+@interface TIMFriendRequest : TIMCodingModel
+
+/**
+ *  用户identifier(必填)
+ */
+@property (nonatomic,strong) NSString* identifier;
+
+/**
+ *  备注(备注最大96字节)
+ */
+@property (nonatomic,strong) NSString* remark;
+
+/**
+ *  请求说明(最大120字节)
+ */
+@property (nonatomic,strong) NSString* addWording;
+
+/**
+ *  添加来源
+ *  来源需要添加“AddSource_Type_”前缀
+ */
+@property (nonatomic,strong) NSString* addSource;
+
+/**
+ *  分组
+ */
+@property (nonatomic,strong) NSString* group;
+
+@end
+
+/**
+ * 未决请求
+ */
+@interface TIMFriendPendencyItem : TIMCodingModel
+
+/**
+ * 用户标识
+ */
+@property(nonatomic,strong) NSString* identifier;
+/**
+ * 增加时间
+ */
+@property(nonatomic,assign) uint64_t addTime;
+/**
+ * 来源
+ */
+@property(nonatomic,strong) NSString* addSource;
+/**
+ * 加好友附言
+ */
+@property(nonatomic,strong) NSString* addWording;
+
+/**
+ * 加好友昵称
+ */
+@property(nonatomic,strong) NSString* nickname;
+
+/**
+ * 未决请求类型
+ */
+@property(nonatomic,assign) TIMPendencyType type;
+
+@end
+
+/**
+ * 未决推送
+ */
+@interface TIMFriendPendencyInfo : TIMCodingModel
+/**
+ * 用户标识
+ */
+@property(nonatomic,strong) NSString* identifier;
+/**
+ * 来源
+ */
+@property(nonatomic,strong) NSString* addSource;
+/**
+ * 加好友附言
+ */
+@property(nonatomic,strong) NSString* addWording;
+
+/**
+ * 加好友昵称
+ */
+@property(nonatomic,strong) NSString* nickname;
+@end
+
+/**
+ * 未决请求信息
+ */
+@interface TIMFriendPendencyRequest : TIMCodingModel
+
+/**
+ * 序列号,未决列表序列号
+ *    建议客户端保存seq和未决列表,请求时填入server返回的seq
+ *    如果seq是server最新的,则不返回数据
+ */
+@property(nonatomic,assign) uint64_t seq;
+
+/**
+ * 翻页时间戳,只用来翻页,server返回0时表示没有更多数据,第一次请求填0
+ *    特别注意的是,如果server返回的seq跟填入的seq不同,翻页过程中,需要使用客户端原始seq请求,直到数据请求完毕,才能更新本地seq
+ */
+@property(nonatomic,assign) uint64_t timestamp;
+
+/**
+ * 每页的数量,即本次请求最多返回都个数据
+ */
+@property(nonatomic,assign) uint64_t numPerPage;
+
+/**
+ * 未决请求拉取类型
+ */
+@property(nonatomic,assign) TIMPendencyType type;
+
+@end
+
+/**
+ * 未决返回信息
+ */
+@interface TIMFriendPendencyResponse : TIMCodingModel
+
+/**
+ * 本次请求的未决列表序列号
+ */
+@property(nonatomic,assign) uint64_t seq;
+
+/**
+ * 本次请求的翻页时间戳
+ */
+@property(nonatomic,assign) uint64_t timestamp;
+
+/**
+ * 未决请求未读数量
+ */
+@property(nonatomic,assign) uint64_t unreadCnt;
+
+/**
+ * 未决数据
+ */
+@property NSArray<TIMFriendPendencyItem *> * pendencies;
+
+@end
+
+
+
+/**
+ * 好友元信息
+ */
+@interface TIMFriendMetaInfo : TIMCodingModel
+
+/**
+ * 时间戳,需要保存,下次拉取时传入,增量更新使用
+ */
+@property(nonatomic,assign) uint64_t timestamp;
+/**
+ * 序列号,需要保存,下次拉取时传入,增量更新使用
+ */
+@property(nonatomic,assign) uint64_t infoSeq;
+/**
+ * 分页信息,无需保存,返回为0时结束,非0时传入再次拉取,第一次拉取时传0
+ */
+@property(nonatomic,assign) uint64_t nextSeq;
+/**
+ * 覆盖:为TRUE时需要重设timestamp, infoSeq, nextSeq为0,清除客户端存储,重新拉取资料
+ */
+@property(nonatomic,assign) BOOL recover;
+
+@end
+
+/**
+ *  好友分组信息
+ */
+@interface TIMFriendGroup : TIMCodingModel
+/**
+ *  好友分组名称
+ */
+@property(nonatomic,strong) NSString* name;
+
+/**
+ *  分组成员数量
+ */
+@property(nonatomic,assign) uint64_t userCnt;
+
+/**
+ *  分组成员identifier列表
+ */
+@property(nonatomic,strong) NSArray* friends;
+
+@end
+
+/**
+ *  好友关系检查
+ */
+@interface TIMFriendCheckInfo : NSObject
+/**
+ *  检查用户的id列表(NSString*)
+ */
+@property(nonatomic,strong) NSArray* users;
+
+/**
+ *  检查类型
+ */
+@property(nonatomic,assign) TIMFriendCheckType checkType;
+
+@end
+
+@interface TIMCheckFriendResult : NSObject
+/**
+ *  用户id
+ */
+@property NSString* identifier;
+
+/**
+ * 返回码
+ */
+@property NSInteger result_code;
+
+/**
+ * 返回信息
+ */
+@property NSString *result_info;
+
+/**
+ *  检查结果
+ */
+@property(nonatomic,assign) TIMFriendRelationType resultType;
+
+@end
+
+@interface TIMFriendResult : NSObject
+
+/**
+ *  用户Id
+ */
+@property NSString* identifier;
+
+/**
+ * 返回码
+ */
+@property NSInteger result_code;
+
+/**
+ * 返回信息
+ */
+@property NSString *result_info;
+
+@end
+
+/**
+ * 响应好友请求
+ */
+@interface TIMFriendResponse : NSObject
+
+/**
+ *  响应类型
+ */
+@property(nonatomic,assign) TIMFriendResponseType responseType;
+
+/**
+ *  用户identifier
+ */
+@property(nonatomic,strong) NSString* identifier;
+
+/**
+ *  备注好友(可选,如果要加对方为好友)。备注最大96字节
+ */
+@property(nonatomic,strong) NSString* remark;
+
+@end
+
+
+/**
+ *  好友分组信息扩展
+ */
+@interface TIMFriendGroupWithProfiles : TIMFriendGroup
+/**
+ *  好友资料(TIMUserProfile*)列表
+ */
+@property(nonatomic,strong) NSArray* profiles;
+@end
+
+// 用户资料KEY
+
+/**
+ * 昵称
+ * 值类型: NSString
+ */
+extern NSString *const TIMProfileTypeKey_Nick;
+/**
+ * 头像
+ * 值类型: NSString
+ */
+extern NSString *const TIMProfileTypeKey_FaceUrl;
+/**
+ * 好友申请
+ * 值类型: NSNumber [TIM_FRIEND_ALLOW_ANY,TIM_FRIEND_NEED_CONFIRM,TIM_FRIEND_DENY_ANY]
+ */
+extern NSString *const TIMProfileTypeKey_AllowType;
+/**
+ * 性别
+ * 值类型: NSNumber [TIM_GENDER_UNKNOWN,TIM_GENDER_MALE,TIM_GENDER_FEMALE]
+ */
+extern NSString *const TIMProfileTypeKey_Gender;
+/**
+ * 生日
+ * 值类型: NSNumber
+ */
+extern NSString *const TIMProfileTypeKey_Birthday;
+/**
+ * 位置
+ * 值类型: NSString
+ */
+extern NSString *const TIMProfileTypeKey_Location;
+/**
+ * 语言
+ * 值类型: NSNumber
+ */
+extern NSString *const TIMProfileTypeKey_Language;
+/**
+ * 等级
+ * 值类型: NSNumber
+ */
+extern NSString *const TIMProfileTypeKey_Level;
+/**
+ * 角色
+ * 值类型: NSNumber
+ */
+extern NSString *const TIMProfileTypeKey_Role;
+/**
+ * 签名
+ * 值类型: NSString
+ */
+extern NSString *const TIMProfileTypeKey_SelfSignature;
+/**
+ * 自定义字段前缀
+ * 值类型: [NSString,NSData|NSNumber]
+ * @note 当设置自定义字的值NSString对象时,后台会将其转为UTF8保存在数据库中。由于部分用户迁移资料时可能不是UTF8类型,所以在获取资料时,统一返回NSData类型。
+ */
+extern NSString *const TIMProfileTypeKey_Custom_Prefix;
+
+// 好友资料KEY
+
+/**
+ * 备注
+ * 值类型: NSString
+ */
+extern NSString *const TIMFriendTypeKey_Remark;
+/**
+ * 分组
+ * 值类型: [NSArray]
+ */
+extern NSString *const TIMFriendTypeKey_Group;
+/**
+ * 自定义字段前缀
+ * 值类型: [NSString,NSData|NSNumber]
+ */
+extern NSString *const TIMFriendTypeKey_Custom_Prefix;
+#endif /* TIMFriendshipDefine_h */
+
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMFriendshipManager.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMFriendshipManager.h
new file mode 100755
index 0000000..aebe29a
--- /dev/null
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMFriendshipManager.h
@@ -0,0 +1,295 @@
+//
+//  TIMFriendshipManager.h
+//  imsdk
+//
+//  Created by annidyfeng on 2019/3/7.
+//  Copyright © 2019年 Tencent. All rights reserved.
+//
+
+#ifndef TIMFriendshipManager_h
+#define TIMFriendshipManager_h
+
+#import "TIMComm.h"
+#import "TIMFriendshipDefine.h"
+
+@interface TIMFriendshipManager : NSObject
+/**
+ *  获取好友管理器实例
+ *
+ *  @return 管理器实例
+ */
++ (TIMFriendshipManager*)sharedInstance;
+
+/**
+ *  设置自己的资料
+ *
+ *  @param values 需要更新的属性,可一次更新多个字段. 参见 TIMFriendshipDefine.h 的 TIMProfileTypeKey_XXX
+ *  @param succ 成功回调
+ *  @param fail 失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)modifySelfProfile:(NSDictionary<NSString *, id> *)values succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  获取自己的资料
+ *
+ *  @param succ  成功回调,返回 TIMUserProfile
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)getSelfProfile:(TIMGetProfileSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  在缓存中查询自己的资料
+ *
+ *  @return 返回缓存的资料,未找到返回nil
+ */
+- (TIMUserProfile *)querySelfProfile;
+
+/**
+ *  获取指定用户资料
+ *
+ *  @param identifiers 用户id,非好友的用户也可以
+ *  @prarm forceUpdate 强制从后台拉取
+ *  @param succ 成功回调
+ *  @param fail 失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)getUsersProfile:(NSArray<NSString *> *)identifiers forceUpdate:(BOOL)forceUpdate succ:(TIMUserProfileArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  在缓存中查询用户的资料
+ *
+ *  @praram identifier 用户id,非好友的用户也可以
+ *
+ *  @return 返回缓存的资料,未找到返回nil
+ */
+- (TIMUserProfile *)queryUserProfile:(NSString *)identifier;
+
+/**
+ *  获取好友列表
+ *
+ *  @param succ 成功回调,返回好友(TIMFriend)列表
+ *  @param fail 失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+-(int)getFriendList:(TIMFriendArraySucc)succ fail:(TIMFail)fail;
+
+
+/**
+ *  在缓存中查询用户的关系链数据
+ *
+ *  @praram identifier 用户id
+ *
+ *  @return 返回缓存的关系链数据,未找到返回nil
+ *  @note 缓存数据来自于上一次调用getFriendList,请确保已调用了获取好友列表方法
+ */
+- (TIMFriend *)queryFriend:(NSString *)identifier;
+
+/**
+ *  获取缓存中的关系链列表
+ *
+ *  @return 返回缓存的关系链数据
+ *  @note 缓存数据来自于上一次调用getFriendList,请确保已调用了获取好友列表方法
+ */
+- (NSArray<TIMFriend *> *)queryFriendList;
+
+/**
+ *  检查指定用户的好友关系
+ *
+ *  @param checkInfo 好友检查信息
+ *  @param succ  成功回调,返回检查结果
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送成功
+ */
+- (int)checkFriends:(TIMFriendCheckInfo *)checkInfo succ:(TIMCheckFriendResultArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  添加好友
+ *
+ *  @param request 添加好友请求
+ *  @param succ  成功回调(TIMFriendResult)
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)addFriend:(TIMFriendRequest *)request succ:(TIMFriendResultSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  响应对方好友邀请
+ *
+ *  @param response  响应请求
+ *  @param succ      成功回调
+ *  @param fail      失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)doResponse:(TIMFriendResponse *)response succ:(TIMFriendResultSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  删除好友
+ *
+ *  @param identifiers 好友id
+ *  @param delType 删除类型(单向好友、双向好友)
+ *  @param succ  成功回调([TIMFriendResult])
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)deleteFriends:(NSArray *)identifiers delType:(TIMDelFriendType)delType succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  修改好友
+ *
+ *  @param identifier 好友id
+ *  @param values  需要更新的属性,可一次更新多个字段. 参见 TIMFriendshipDefine.h 的 TIMFriendTypeKey_XXX
+ *  @param succ 成功回调
+ *  @param fail 失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)modifyFriend:(NSString *)identifier values:(NSDictionary<NSString *, id> *)values succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  获取未决列表
+ *
+ *  @param pendencyRequest  请求信息,详细参考TIMFriendPendencyRequest
+ *  @param succ 成功回调
+ *  @param fail 失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)getPendencyList:(TIMFriendPendencyRequest *)pendencyRequest succ:(TIMGetFriendPendencyListSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  未决删除
+ *
+ *  @param type  未决好友类型
+ *  @param identifiers 要删除的未决列表
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)deletePendency:(TIMPendencyType)type users:(NSArray *)identifiers succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  未决已读上报
+ *
+ *  @param timestamp 已读时间戳,此时间戳以前的消息都将置为已读
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)pendencyReport:(uint64_t)timestamp succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  获取黑名单列表
+ *
+ *  @param succ 成功回调,返回NSString*列表
+ *  @param fail 失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)getBlackList:(TIMFriendArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  添加用户到黑名单
+ *
+ *  @param identifiers 用户列表
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)addBlackList:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  把用户从黑名单中删除
+ *
+ *  @param identifiers 用户列表
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)deleteBlackList:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  新建好友分组
+ *
+ *  @param groupNames  分组名称列表,必须是当前不存在的分组
+ *  @param identifiers 要添加到分组中的好友
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)createFriendGroup:(NSArray *)groupNames users:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  获取指定的好友分组信息
+ *
+ *  @param groupNames      要获取信息的好友分组名称列表,传入nil获得所有分组信息
+ *  @param succ  成功回调,返回 TIMFriendGroup* 列表
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)getFriendGroups:(NSArray *)groupNames succ:(TIMFriendGroupArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  删除好友分组
+ *
+ *  @param groupNames  要删除的好友分组名称列表
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)deleteFriendGroup:(NSArray *)groupNames succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  修改好友分组的名称
+ *
+ *  @param oldName   原来的分组名称
+ *  @param newName   新的分组名称
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)renameFriendGroup:(NSString*)oldName newName:(NSString*)newName succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  添加好友到一个好友分组
+ *
+ *  @param groupName   好友分组名称
+ *  @param identifiers  要添加到分组中的好友
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)addFriendsToFriendGroup:(NSString *)groupName users:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
+
+/**
+ *  从好友分组中删除好友
+ *
+ *  @param groupName   好友分组名称
+ *  @param identifiers  要移出分组的好友
+ *  @param succ  成功回调
+ *  @param fail  失败回调
+ *
+ *  @return 0 发送请求成功
+ */
+- (int)deleteFriendsFromFriendGroup:(NSString *)groupName users:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
+@end
+
+#endif /* TIMFriendshipManager_h */
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMGroupManager+Ext.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMGroupManager+Ext.h
index 06a31fc..739c12e 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMGroupManager+Ext.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMGroupManager+Ext.h
@@ -9,7 +9,7 @@
 #ifndef TIMGroupManager_Ext_h
 #define TIMGroupManager_Ext_h
 
-#import "ImSDK.h"
+#import "TIMGroupManager.h"
 #import "TIMComm+Group.h"
 
 @interface TIMGroupManager (Ext)
@@ -17,158 +17,194 @@
 /**
  *  创建私有群
  *
+ *  创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E5.BD.A2.E6.80.81.E4.BB.8B.E7.BB.8D)
+ *
  *  @param members   群成员,NSString* 数组
  *  @param groupName 群名
- *  @param succ      成功回调
+ *  @param succ      成功回调 groupId
  *  @param fail      失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)createPrivateGroup:(NSArray*)members groupName:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
 
 /**
  *  创建公开群
  *
+ *  创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E5.BD.A2.E6.80.81.E4.BB.8B.E7.BB.8D)
+ *get
  *  @param members   群成员,NSString* 数组
  *  @param groupName 群名
- *  @param succ      成功回调
+ *  @param succ      成功回调 groupId
  *  @param fail      失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)createPublicGroup:(NSArray*)members groupName:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
 
 /**
  *  创建聊天室
  *
+ *  创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E5.BD.A2.E6.80.81.E4.BB.8B.E7.BB.8D)
+ *
  *  @param members   群成员,NSString* 数组
  *  @param groupName 群名
- *  @param succ      成功回调
+ *  @param succ      成功回调 groupId
  *  @param fail      失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)createChatRoomGroup:(NSArray*)members groupName:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
 
 /**
  *  创建音视频聊天室(可支持超大群,详情可参考wiki文档)
  *
+ *  创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E5.BD.A2.E6.80.81.E4.BB.8B.E7.BB.8D)
+ *
  *  @param groupName 群名
- *  @param succ      成功回调
+ *  @param succ      成功回调 groupId
  *  @param fail      失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)createAVChatRoomGroup:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
 
 /**
- *  创建群组
+ *  创建自定义群组
  *
- *  @param groupInfo 群组信息
- *  @param succ      成功回调
+ *  在创建群组时,除了设置默认的成员以及群名外,还可以设置如群公告、群简介等字段。
+ *
+ *  @param groupInfo 群组信息,详情请参考 TIMComm+Group.h 里面的 TIMCreateGroupInfo 定义
+ *  @param succ      成功回调 groupId
  *  @param fail      失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)createGroup:(TIMCreateGroupInfo*)groupInfo succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
 
 /**
  *  邀请好友入群
  *
+ *  1. 只有私有群可以拉用户入群。
+ *  2. 直播大群:不能邀请用户入群。
+ *  3. 不允许群成员邀请他人入群,但创建群时可以直接拉人入群。
+ *
  *  @param group   群组Id
  *  @param members 要加入的成员列表(NSString* 类型数组)
- *  @param succ    成功回调
+ *  @param succ    成功回调 (TIMGroupMemberResult 列表)
  *  @param fail    失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)inviteGroupMember:(NSString*)group members:(NSArray*)members succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
 
 /**
  *  删除群成员
  *
+ *  1. 私有群:只有创建者可删除群组成员。
+ *  2. 公开群、聊天室:只有管理员和群主可以踢人。
+ *  3. 对于直播大群:不能踢人。
+ *
  *  @param group   群组Id
  *  @param reason  删除原因
  *  @param members 要删除的成员列表
- *  @param succ    成功回调
+ *  @param succ    成功回调 (TIMGroupMemberResult 列表)
  *  @param fail    失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)deleteGroupMemberWithReason:(NSString*)group reason:(NSString*)reason members:(NSArray*)members succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
 
-/**
- *  获取群公开信息
- *  @param groups 群组Id
- *  @param succ 成功回调
- *  @param fail 失败回调
- *
- *  @return 0 成功
- */
-- (int)getGroupPublicInfo:(NSArray*)groups succ:(TIMGroupListSucc)succ fail:(TIMFail)fail;
 
 /**
  *  获取群列表
  *
- *  @param succ 成功回调,NSArray列表为 TIMGroupInfo,结构体只包含 group\groupName\groupType\faceUrl\allShutup\selfInfo 信息
+ *  1. 可以获取自己所加入的群列表。
+ *  2. 只能获得加入的部分直播大群的列表。
+ *
+ *  @param succ 成功回调,NSArray 列表为 TIMGroupInfo,结构体只包含 group\groupName\groupType\faceUrl\allShutup\selfInfo 信息
  *  @param fail 失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)getGroupList:(TIMGroupListSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取群信息
+ *  获取服务器存储的群组信息
  *
- *  @param succ 成功回调,不包含 selfInfo信息
+ *  1. 无论是公开群还是私有群,群成员均可以拉到群组信息。
+ *  2. 如果是公开群,非群组成员可以拉到 group\groupName\owner\groupType\createTime\maxMemberNum\memberNum\introduction\faceURL\addOpt\onlineMemberNum\customInfo 这些字段信息。如果是私有群,非群组成员拉取不到群组信息。
+ *  3. 群成员和非群成员这个接口都拉取不到 selfInfo 信息。
+ *  4. 默认拉取基本资料,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限,然后在 initSDK 的时候把生成的 key 设置在 IMGroupInfoOption 里面的 groupCustom 字段。需要注意的是,只有对自定义字段的 value 做了赋值或则修改,才能拉取到自定义字段。
+ *
+ *  @param succ 成功回调,不包含 selfInfo 信息
  *  @param fail 失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)getGroupInfo:(NSArray*)groups succ:(TIMGroupListSucc)succ fail:(TIMFail)fail;
 
 /**
+ *  获取本地存储的群组信息
+ *
+ *  1. 无论是公开群还是私有群,群成员均可以拉到群组信息。
+ *  2. 如果是公开群,非群组成员可以拉到 group\groupName\owner\groupType\createTime\maxMemberNum\memberNum\introduction\faceURL\addOpt\onlineMemberNum\customInfo 这些字段信息。如果是私有群,非群组成员拉取不到群组信息。
+ *  3. 群成员和非群成员这个接口都拉取不到 selfInfo 信息。
+ *
+ *  @return 群组信息
+ */
+- (TIMGroupInfo *)queryGroupInfo:(NSString *)group;
+
+/**
  *  获取本人在群组内的成员信息
  *
+ *  默认拉取基本资料,如果想要拉取自定义字段,请参考 getGroupInfo
+ *
  *  @param group 群组Id
  *  @param succ  成功回调,返回信息
  *  @param fail  失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)getGroupSelfInfo:(NSString*)group succ:(TIMGroupSelfSucc)succ fail:(TIMFail)fail;
 
 /**
  *  获取接受消息选项
  *
- *  @param group            群组Id
- *  @param succ             成功回调
- *  @param fail             失败回调
+ *  @param group  群组Id
+ *  @param succ   成功回调, TIMGroupReceiveMessageOpt 0:接收消息;1:不接收消息,服务器不进行转发;2:接受消息,不进行 iOS APNs 推送
+ *  @param fail   失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)getReciveMessageOpt:(NSString*)group succ:(TIMGroupReciveMessageOptSucc)succ fail:(TIMFail)fail;
 
 /**
  *  获取群成员列表
  *
+ *  1. 获取群内成员列表,默认拉取内置字段,但不拉取自定义字段,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限,然后在 initSDK 的时候把生成的 key 设置在 IMGroupInfoOption 里面的 groupCustom 字段。需要注意的是,只有对自定义字段的 value 做了赋值或则修改,才能拉取到自定义字段。
+ *  2. 任何群组类型:都可以获取成员列表。
+ *  3. 直播大群:只能拉取部分成员(包括群主、管理员和部分成员)。
+ *
  *  @param group 群组Id
- *  @param succ  成功回调(TIMGroupMemberInfo列表)
+ *  @param succ  成功回调 (TIMGroupMemberInfo 列表)
  *  @param fail  失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)getGroupMembers:(NSString*)group succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
 
 /**
  *  获取群组指定成员的信息
  *
+ *  获取群组指定成员的信息,需要设置群成员 members,其他限制参考 getGroupMembers
+ *
  *  @param group   群组Id
  *  @param members 成员Id(NSString*)列表
- *  @param succ    成功回调(TIMGroupMemberInfo列表)
+ *  @param succ    成功回调 (TIMGroupMemberInfo 列表)
  *  @param fail    失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)getGroupMembersInfo:(NSString*)group members:(NSArray*)members succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
 
@@ -179,123 +215,151 @@
  *  @param filter     群成员角色过滤方式
  *  @param flags      拉取资料标志
  *  @param custom     要获取的自定义key(NSString*)列表
- *  @param nextSeq    分页拉取标志,第一次拉取填0,回调成功如果不为零,需要分页,传入再次拉取,直至为0
+ *  @param nextSeq    分页拉取标志,第一次拉取填0,回调成功如果 nextSeq 不为零,需要分页,传入再次拉取,直至为0
  *  @param succ       成功回调
  *  @param fail       失败回调
+ *  @return 0:成功;1:失败
  */
 - (int)getGroupMembers:(NSString*)group ByFilter:(TIMGroupMemberFilter)filter flags:(TIMGetGroupMemInfoFlag)flags custom:(NSArray*)custom nextSeq:(uint64_t)nextSeq succ:(TIMGroupMemberSuccV2)succ fail:(TIMFail)fail;
 
 /**
  *  修改群名
  *
+ *  1. 公开群、聊天室和直播大群:只有群主或者管理员可以修改群名。
+ *  2. 私有群:任何人可修改群名。
+ *
  *  @param group     群组Id
  *  @param groupName 新群名
  *  @param succ      成功回调
  *  @param fail      失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupName:(NSString*)group groupName:(NSString*)groupName succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改群简介
  *
+ *  1. 公开群、聊天室、直播大群:只有群主或者管理员可以修改群简介。
+ *  2. 私有群:任何人可修改群简介。
+ *
  *  @param group            群组Id
  *  @param introduction     群简介(最长120字节)
  *  @param succ             成功回调
  *  @param fail             失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupIntroduction:(NSString*)group introduction:(NSString*)introduction succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改群公告
  *
+ *  1. 公开群、聊天室、直播大群:只有群主或者管理员可以修改群公告。
+ *  2. 私有群:任何人可修改群公告。
+ *
  *  @param group            群组Id
  *  @param notification     群公告(最长150字节)
  *  @param succ             成功回调
  *  @param fail             失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupNotification:(NSString*)group notification:(NSString*)notification succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改群头像
  *
+ *  1. 公开群、聊天室、直播大群:只有群主或者管理员可以修改群头像。
+ *  2. 私有群:任何人可修改群头像。
+ *
  *  @param group            群组Id
  *  @param url              群头像地址(最长100字节)
  *  @param succ             成功回调
  *  @param fail             失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupFaceUrl:(NSString*)group url:(NSString*)url succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改加群选项
  *
+ *  1. 公开群、聊天室、直播大群:只有群主或者管理员可以修改加群选项。
+ *  2. 私有群:只能通过邀请加入群组,不能主动申请加入某个群组。
+ *
  *  @param group            群组Id
  *  @param opt              加群选项,详见 TIMGroupAddOpt
  *  @param succ             成功回调
  *  @param fail             失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupAddOpt:(NSString*)group opt:(TIMGroupAddOpt)opt succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改群自定义字段集合
  *
+ *  通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限。
+ *
  *  @param group      群组Id
- *  @param customInfo 自定义字段集合,key是NSString*类型,value是NSData*类型
+ *  @param customInfo 自定义字段集合,key 是 NSString* 类型,value 是 NSData* 类型
  *  @param succ       成功回调
  *  @param fail       失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
-- (int)modifyGroupCustomInfo:(NSString*)group customInfo:(NSDictionary*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
+- (int)modifyGroupCustomInfo:(NSString*)group customInfo:(NSDictionary<NSString *,NSData *>*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  转让群给新群主
  *
+ *  1. 只有群主才有权限进行群转让操作。
+ *  2. 直播大群不能进行群转让操作。
+ *
  *  @param group      群组Id
  *  @param identifier 新的群主Id
  *  @param succ       成功回调
  *  @param fail       失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupOwner:(NSString*)group user:(NSString*)identifier succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改接受消息选项
  *
+ *  默认情况下,公开群和私有群是接收并离线推送群消息,聊天室和直播大群是接收但不离线推送群消息。
+ *
  *  @param group            群组Id
  *  @param opt              接受消息选项,详见 TIMGroupReceiveMessageOpt
  *  @param succ             成功回调
  *  @param fail             失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyReciveMessageOpt:(NSString*)group opt:(TIMGroupReceiveMessageOpt)opt succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改群成员角色
  *
+ *  1. 群主、管理员:可以进行对群成员的身份进行修改。
+ *  2. 直播大群:不支持修改用户群内身份。
+ *
  *  @param group            群组Id
  *  @param identifier       被修改角色的用户identifier
  *  @param role             角色(注意:不能修改为群主),详见 TIMGroupMemberRole
  *  @param succ             成功回调
  *  @param fail             失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupMemberInfoSetRole:(NSString*)group user:(NSString*)identifier role:(TIMGroupMemberRole)role succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
- *  禁言用户(只有管理员或群主能够调用)
+ *  禁言用户
+ *
+ *  只有管理员或群主能够调用
  *
  *  @param group            群组Id
  *  @param identifier       被禁言的用户identifier
@@ -303,12 +367,14 @@
  *  @param succ             成功回调
  *  @param fail             失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupMemberInfoSetSilence:(NSString*)group user:(NSString*)identifier stime:(uint32_t)stime succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
- *  修改群名片(只有本人、管理员或群主能够调用)
+ *  修改群名片
+ *
+ *  只有本人、管理员或群主能够调用
  *
  *  @param group            群组Id
  *  @param identifier       被操作用户identifier
@@ -316,22 +382,24 @@
  *  @param succ             成功回调
  *  @param fail             失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupMemberInfoSetNameCard:(NSString*)group user:(NSString*)identifier nameCard:(NSString*)nameCard succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改群成员自定义字段集合
  *
- *  @param group      群组Id
- *  @param identifier 被操作用户identifier
- *  @param customInfo 自定义字段集合,key是NSString*类型,value是NSData*类型
+ *  通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群成员维度自定义字段 配置相关的 key 和权限。
+ *
+ *  @param group      群组 Id
+ *  @param identifier 被操作用户 identifier
+ *  @param customInfo 自定义字段集合,key 是 NSString* 类型,value 是 NSData* 类型
  *  @param succ       成功回调
  *  @param fail       失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
-- (int)modifyGroupMemberInfoSetCustomInfo:(NSString*)group user:(NSString*)identifier customInfo:(NSDictionary*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
+- (int)modifyGroupMemberInfoSetCustomInfo:(NSString*)group user:(NSString*)identifier customInfo:(NSDictionary<NSString*,NSData*> *)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改群组是否可被搜索属性
@@ -341,7 +409,7 @@
  *  @param succ       成功回调
  *  @param fail       失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupSearchable:(NSString*)group searchable:(BOOL)searchable succ:(TIMSucc)succ fail:(TIMFail)fail;
 
@@ -353,55 +421,52 @@
  *  @param succ    成功回调
  *  @param fail    失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupMemberVisible:(NSString*)group visible:(BOOL)visible succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  修改群组全员禁言属性
  *
+ *  1. 群主、管理员:有权限进行全员禁言的操作。
+ *  2. 所有群组类型:都支持全员禁言的操作。
+ *
  *  @param group   群组Id
  *  @param shutup  是否禁言
  *  @param succ    成功回调
  *  @param fail    失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)modifyGroupAllShutup:(NSString*)group shutup:(BOOL)shutup succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  获取群组未决列表
  *
+ *  1. 群未决消息泛指所有需要审批的群相关的操作(例如:加群待审批,拉人入群待审批等等)。即便审核通过或者拒绝后,该条信息也可通过此接口拉回,拉回的信息中有已决标志
+ *  2. 审批人:有权限拉取相关信息,如果 UserA 申请加入群 GroupA,则群管理员可获取此未决相关信息,UserA 因为没有审批权限,不需要拉取未决信息。如果 AdminA 拉 UserA 进去 GroupA,则 UserA 可以拉取此未决相关信息,因为该未决信息待 UserA 审批。
+ *
  *  @param option 未决参数配置
  *  @param succ   成功回调,返回未决列表
  *  @param fail   失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)getPendencyFromServer:(TIMGroupPendencyOption*)option succ:(TIMGetGroupPendencyListSucc)succ fail:(TIMFail)fail;
 
 /**
  *  群未决已读上报
  *
+ *  对于未决信息,SDK 可对其和之前的所有未决信息上报已读。上报已读后,仍然可以拉取到这些未决信息,但可通过对已读时戳的判断判定未决信息是否已读。
+ *
  *  @param timestamp 上报已读时间戳
  *  @param succ      成功回调
  *  @param fail      失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)pendencyReport:(uint64_t)timestamp succ:(TIMSucc)succ fail:(TIMFail)fail;
 
-#pragma mark - 开启本地缓存后有效
-
-/**
- *  获取用户所在群组信息
- *
- *  @param groups 群组id(NSString*)列表,nil时返回群组列表
- *
- *  @return 群组信息(TIMGroupInfo*)列表,assistant未同步时返回nil
- */
-- (NSArray*)getGroupInfo:(NSArray*)groups;
-
 @end
 
 #endif /* TIMGroupManager_Ext_h */
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMGroupManager.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMGroupManager.h
index 373f603..a52e6c4 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMGroupManager.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMGroupManager.h
@@ -24,47 +24,63 @@
 /**
  *  创建群组
  *
+ *  1. 默认创建群组时,IM 通讯云服务器会生成一个唯一的 ID,该 ID 将以 @TGS# 开头,且保证在 App 中唯一,以便后续操作。
+ *  2. 如果用户需要自定义群组 ID,在创建时可指定 ID,自定义群组 ID 必须为可打印 ASCII 字符(0x20-0x7e),最长 48 个字节,且前缀不能为 @TGS#(避免与默认分配的群组 ID 混淆)
+ *
  *  @param type       群类型,Private,Public,ChatRoom,AVChatRoom
- *  @param groupId    自定义群组id,为空时系统自动分配
+ *  @param groupId    自定义群组 ID,为空时系统自动分配
  *  @param groupName  群组名称
  *  @param succ       成功回调
  *  @param fail       失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)createGroup:(NSString*)type groupId:(NSString*)groupId groupName:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
 
 /**
  *  解散群组
  *
+ *  1. 私有群:任何人都无法解散群组
+ *  2. 公开群、聊天室、直播大群:群主可以解散群组。
+ *
  *  @param group 群组Id
  *  @param succ  成功回调
  *  @param fail  失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)deleteGroup:(NSString*)group succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  申请加群
  *
+ *  1. 私有群:不能由用户主动申请入群。
+ *  2. 公开群、聊天室:可以主动申请进入。
+ *  3. 直播大群:可以任意加入群组。
+ *  4. 如果群组设置为需要审核,申请入群后管理员和群主会收到申请入群系统消息 TIMGroupSystemElem,判断 TIMGroupSystemElem 的 Type 类型如果是 TIM_GROUP_SYSTEM_ADD_GROUP_REQUEST_TYPE ,调用消息的 accept 接口同意入群,申请人会收到同意入群的消息 TIMGroupSystemElem(Type:TIM_GROUP_SYSTEM_ADD_GROUP_ACCEPT_TYPE),调用 refuse 接口拒绝入群,申请人会收到拒绝入群的消息 TIMGroupSystemElem(Type:TIM_GROUP_SYSTEM_ADD_GROUP_REFUSE_TYPE)。
+ *  5. 如果群主设置为任何人可加入,则直接入群成功。
+ *
  *  @param group 申请加入的群组Id
  *  @param msg   申请消息
  *  @param succ  成功回调(申请成功等待审批)
  *  @param fail  失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)joinGroup:(NSString*)group msg:(NSString*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
  *  主动退出群组
  *
+ *  1. 私有群:全员可退出群组。
+ *  2. 公开群、聊天室、直播大群:群主不能退出。
+ *  3. 当用户主动退出群组时,该用户会收到退群消息 TIMGroupSystemElem(Type:TIM_GROUP_SYSTEM_QUIT_GROUP_TYPE),只有退群的用户自己可以收到。当用户调用 QuitGroup 时成功回调返回,表示已退出成功,此消息主要为了多终端同步,其他终端可以作为更新群列表的时机,本终端可以选择忽略。
+ *
  *  @param group 群组Id
  *  @param succ  成功回调
  *  @param fail  失败回调
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)quitGroup:(NSString*)group succ:(TIMSucc)succ fail:(TIMFail)fail;
 
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMManager+MsgExt.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMManager+MsgExt.h
index 6e1f790..1fea3c0 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMManager+MsgExt.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMManager+MsgExt.h
@@ -9,7 +9,7 @@
 #ifndef TIMManager_MsgExt_h
 #define TIMManager_MsgExt_h
 
-#import "ImSDK.h"
+#import "TIMManager.h"
 #import "TIMComm+MsgExt.h"
 
 @class TIMMessage;
@@ -38,20 +38,22 @@
 /**
  *  删除会话
  *
- *  @param type 会话类型,TIM_C2C 表示单聊 TIM_GROUP 表示群聊
- *  @param receiver    用户identifier 或者 群组Id
+ *  @param type 会话类型,TIM_C2C:表示单聊;TIM_GROUP:表示群聊
+ *  @param receiver 用户 identifier 或者群组 Id
  *
- *  @return TRUE:删除成功  FALSE:删除失败
+ *  @return TRUE:删除成功;FALSE:删除失败
  */
 - (BOOL)deleteConversation:(TIMConversationType)type receiver:(NSString*)receiver;
 
 /**
  *  删除会话和消息
  *
- *  @param type 会话类型,TIM_C2C 表示单聊 TIM_GROUP 表示群聊
- *  @param receiver    用户identifier 或者 群组Id
+ *  这里只是删除本地消息,通过 getMessage 会拉取到漫游消息,所以存在删除消息成功,但是拉取到消息的情况,取决于是否重新从漫游拉回到本地。如果不需要拉取漫游,可以通过 getLocalMessage 获取本地消息,或者只通过 getMessage 拉取指定条数(如未读条数数量)的消息。
  *
- *  @return TRUE:删除成功  FALSE:删除失败
+ *  @param type 会话类型,TIM_C2C:表示单聊;TIM_GROUP:表示群聊
+ *  @param receiver    用户identifier 或者 群组 Id
+ *
+ *  @return TRUE:删除成功;FALSE:删除失败
  */
 - (BOOL)deleteConversationAndMessages:(TIMConversationType)type receiver:(NSString*)receiver;
 
@@ -63,13 +65,15 @@
 - (int)conversationCount;
 
 /**
- *  初始化存储,仅查看历史消息时使用,如果要收发消息等操作,如login成功,不需要调用此函数
+ *  初始化存储
+ *
+ *  仅查看历史消息时使用,如果要收发消息等操作,如login成功,不需要调用此函数
  *
- *  @param param 登陆参数(userSig 不用填写)
+ *  @param param 登陆参数(identifier 必须填写,userSig 不用填写)
  *  @param succ  成功回调,收到回调时,可以获取会话列表和消息
  *  @param fail  失败回调
  *
- *  @return 0 请求成功
+ *  @return 0:请求成功;1:请求失败,identifier 为 nil 或则用户已登录
  */
 - (int)initStorage:(TIMLoginParam*)param succ:(TIMLoginSucc)succ fail:(TIMFail)fail;
 
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMManager.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMManager.h
index 76a40e6..3318e62 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMManager.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMManager.h
@@ -13,7 +13,7 @@
 #import "TIMCallback.h"
 
 @class TIMGroupManager;
-//@class TIMFriendshipManager;
+@class TIMFriendshipManager;
 
 /////////////////////////////////////////////////////////
 ///  Tencent 开放 SDK API
@@ -23,256 +23,337 @@
  *  通讯管理
  */
 @interface TIMManager : NSObject
+	
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (一)初始化相关接口函数
+//
+/////////////////////////////////////////////////////////////////////////////////
 
-
+/// @name 初始化相关接口
+/// @{
 /**
- *  获取管理器实例
+ *  1.1 获取管理器实例 TIMManager
  *
  *  @return 管理器实例
  */
 + (TIMManager*)sharedInstance;
 
 /**
- *  初始化SDK
+ *  1.2 初始化 SDK,设置全局配置信息
  *
- *  @param config      配置信息,全局有效
+ *  初始化 SDK 需要设置 TIMSdkConfig 信息,TIMSdkConfig 主要包含 sdkAppId 设置、Log 相关逻辑设置、数据库存储路径设置、网络监听设置等,其中 sdkAppId 的获取请参考官网文档 [跑通Demo(iOS与Mac)](https://cloud.tencent.com/document/product/269/32674)。
  *
- *  @return 0 成功
+ *  @param config 配置信息,全局有效,详情请参考 TIMComm.h 中的 TIMSdkConfig 定义
+ *
+ *  @return 0:成功;1:失败,config 为 nil
  */
 - (int)initSdk:(TIMSdkConfig*)config;
 
 /**
- *  获取全局配置
+ *  1.3 获取全局配置信息
+ *
+ *  获取初始化 SDK 时候设置的 TIMSdkConfig,方便客户在上层做相关业务逻辑。
  *
- *  @return 全局配置
+ *  @return 全局配置,详情请参考 TIMComm.h 中的 TIMSdkConfig 定义
  */
 - (TIMSdkConfig*)getGlobalConfig;
 
 /**
- *  初始化当前manager,在initSdk:后调用,login:前调用
+ *  1.4 设置用户配置信息
+ *
+ *  1. setUserConfig 要在 initSdk 之后,login 之前,主要用来开启/关闭自动已读上报和已读回执,设置默认拉取的群组资料,群成员资料字段,监听用户登录状态、会话刷新、消息已读回执、文件上传进度、群组事件通知。
+ *  2. 自动已读上报默认是开启的,当客户端收到一条未读消息后,Server 默认会删除这条未读消息,切换终端以后无法看到之前终端已经拉回的未读消息,如果需要多终端情况下仍然会有未读,请设置 TIMUserConfig 中的 disableAutoReport 为 YES,一旦禁用自动上报,开发者需要显式调用 setReadMessage,详情请参考官方文档 [未读消息计数](https://cloud.tencent.com/document/product/269/9151)。
+ *  3. C2C 已读回执默认是关闭的,如果需要开启,请设置 TIMUserConfig 中的 enableReadReceipt 为 YES,收到消息的用户需要显式调用 setReadMessage,发消息的用户才能通过 TIMMessageReceiptListener 监听到消息的已读回执。
+ *  4. 当您获取群资料的时候,默认只能拉取内置字段,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限,然后把生成的 key 设置在 IMGroupInfoOption 里面的 groupCustom 字段。需要注意的是,只有对自定义字段 value 做了赋值或则修改,才能拉取到自定义字段。
+ *  5. 当您获取群成员资料的时候,默认只能拉取内置字段,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群成员维度自定义字段配置相关的 key 和权限,然后把生成的 key 设置在 TIMGroupMemberInfoOption 里面的 memberCustom 字段。需要注意的是,只有对自定义字段的 value 做了赋值或则修改,才能拉取到自定义字段。
  *
- *  @param config    配置信息,对当前TIMManager有效
+ *  @param config 配置信息,对当前 TIMManager 有效,详情请参考 TIMComm.h 中的 TIMUserConfig 定义
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败,config 为 nil
  */
 - (int)setUserConfig:(TIMUserConfig*)config;
 
 /**
- *  获取当前manager绑定用户的配置
+ *  1.5 获取用户配置信息
  *
- *  @return 当前manager绑定用户的配置
+ *  获取设置的用户配置信息 TIMSdkConfig,方便客户在上层做相关业务逻辑。
+ *
+ *  @return 当前 manager 绑定用户的配置,详情请参考 TIMComm.h 中的 TIMUserConfig 定义
  */
 - (TIMUserConfig*)getUserConfig;
 
 /**
- *  添加消息回调(重复添加无效)
+ *  1.6 添加消息监听(重复添加无效)
+ *
+ *  添加消息监听后,会在 TIMMessageListener 的 onNewMessage 收到回调消息,消息内容通过参数 TIMMessage 传递,通过 TIMMessage 可以获取消息和相关会话的详细信息,如消息文本,语音数据,图片等。详细可参阅 [消息解析](https://cloud.tencent.com/document/product/269/9150#.E6.B6.88.E6.81.AF.E8.A7.A3.E6.9E.90) 部分。
  *
- *  @param listener 回调
+ *  @param listener 回调,详情请参考 TIMCallback.h 中的 TIMMessageListener 定义
  *
- *  @return 成功
+ *  @return 0:成功;1:失败,listener 为 nil
  */
 - (int)addMessageListener:(id<TIMMessageListener>)listener;
 
 /**
- *  移除消息回调
+ *  1.7 移除消息监听
  *
- *  @param listener 回调
+ *  @param listener 回调,详情请参考 TIMCallback.h 中的 TIMMessageListener 定义
  *
- *  @return 成功
+ *  @return 0:成功;1:失败,listener 为 nil
  */
 - (int)removeMessageListener:(id<TIMMessageListener>)listener;
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (二)登录相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 登录相关接口
+/// @{
 /**
- *  登陆
+ *  2.1 登录
  *
- *  @param param 登陆参数
- *  @param succ  成功回调
- *  @param fail  失败回调
+ *  1. 登录需要设置用户名 identifier 和用户签名 userSig,userSig 的生成请参考官网文档 [UserSig 后台 API](https://cloud.tencent.com/document/product/269/32688)。
+ *  2. 如果 userSig 过期,登录会返回 ERR_USER_SIG_EXPIRED:6206 错误码,收到错误码后请生成新的 userSig 重新登录。
+ *  3. 用户在线情况下被踢,会在 TIMUserConfig 里面配置的 TIMUserStatusListener 监听器获取 onForceOffline 回调,收到回调后可以选择重新登录。
+ *  4. 用户离线状态下被踢,由于此时用户不在线,无法感知此事件,为了显式提醒用户,用户重新登录时,会返回 ERR_IMSDK_KICKED_BY_OTHERS:6208 错误码,表明之前被踢,如果需要把对方踢下线,再次调用 login 强制上线,更多详情请参考 [用户状态变更](https://cloud.tencent.com/document/product/269/9148#5.-.E7.94.A8.E6.88.B7.E7.8A.B6.E6.80.81.E5.8F.98.E6.9B.B4)。
  *
- *  @return 0 请求成功
+ *  @param param 登陆参数,详情请参考 TIMComm.h 中的 TIMLoginParam 定义
+ *  @param succ  成功回调,详情请参考 TIMComm.h 中的 TIMLoginSucc 定义
+ *  @param fail  失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
+ *
+ *  @return 0:成功;1:失败,请检查 param 参数是否正常
  */
 - (int)login: (TIMLoginParam*)param succ:(TIMLoginSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取当前登陆的用户
+ *  2.2 自动登录
  *
- *  @return 如果登陆返回用户的identifier,如果未登录返回nil
- */
-- (NSString*)getLoginUser;
-
-/**
- *  获取当前登录状态
+ *  1. 首次登陆之后,SDK 会把登陆信息存在在本地,下次登陆即可调用自动登录
+ *  2. 如果用户之前没有登录过,或则 APP 被卸载过,自动登录会报 ERR_NO_PREVIOUS_LOGIN:6026 错误,这个时候请调用 login 接口重新登录。
+ *
+ *  @param param 登陆参数( userSig 不用填),详情请参考 TIMComm.h 中的 TIMLoginParam 定义
+ *  @param succ  成功回调,详情请参考 TIMComm.h 中的 TIMLoginSucc 定义
+ *  @param fail  失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
  *
- *  @return 登录状态
+ *  @return 0:成功;1:失败,请检查 param 参数是否正常
  */
-- (TIMLoginStatus)getLoginStatus;
+- (int)autoLogin:(TIMLoginParam*)param succ:(TIMLoginSucc)succ fail:(TIMFail)fail;
 
 /**
- *  登出
+ *  2.3 登出
+ *
+ *  退出登录,如果切换账号,需要 logout 回调成功或者失败后才能再次 login,否则 login 可能会失败。
  *
  *  @param succ 成功回调,登出成功
  *  @param fail 失败回调,返回错误吗和错误信息
  *
- *  @return 0 发送登出包成功,等待回调
+ *  @return 0:发送登出包成功,等待回调;1:失败
  */
 - (int)logout:(TIMLoginSucc)succ fail:(TIMFail)fail;
 
-#pragma mark - 消息会话操作
-
 /**
- *  获取会话
+ *  2.4 获取当前登陆的用户
  *
- *  @param type 会话类型,TIM_C2C 表示单聊 TIM_GROUP 表示群聊
- *              TIM_SYSTEM 表示系统会话
- *  @param receiver C2C 为对方用户 identifier,GROUP 为群组Id,SYSTEM为@""
- *
- *  @return 会话对象
+ *  @return 如果登陆返回用户的 identifier,如果未登录返回 nil
  */
-- (TIMConversation*)getConversation:(TIMConversationType)type receiver:(NSString*)receiver;
-
-#pragma mark - APNs推送
+- (NSString*)getLoginUser;
 
 /**
- *  设置Token,需要登录后调用
- *
- *  @param token token信息
- *  @param succ 成功回调
- *  @param fail 失败回调
+ *  2.5 获取当前登录状态
  *
- *  @return 0 成功
+ *  @return 登录状态,详情请参考 TIMComm.h 中的 TIMLoginStatus 定义
  */
-- (int)setToken:(TIMTokenParam*)token succ:(TIMSucc)succ fail:(TIMFail)fail;
+- (TIMLoginStatus)getLoginStatus;
 
-/**
- *  设置APNS配置
- *
- *  @param config APNS配置
- *  @param succ   成功回调
- *  @param fail   失败回调
- *
- *  @return 0 成功
- */
-- (int)setAPNS:(TIMAPNSConfig*)config succ:(TIMSucc)succ fail:(TIMFail)fail;
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (三)获取会话管理器
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 获取会话管理器
+/// @{
 /**
- *  获取APNS配置
+ *  获取会话管理器
  *
- *  @param succ 成功回调,返回配置信息
- *  @param fail 失败回调
+ *  TIMConversation 负责会话相关操作,包含发送消息、获取会话消息缓存、获取未读计数等。
  *
- *  @return 0 成功
+ *  @param type 会话类型,TIM_C2C:单聊;TIM_GROUP:群聊;TIM_SYSTEM:系统会话
+ *  @param receiver 会话接收者,C2C:为对方用户;identifier;GROUP:群组 Id;SYSTEM:@""
+ *
+ *  @return 会话对象,详情请参考 TIMConversation.h 里面的 TIMConversation 定义
  */
-- (int)getAPNSConfig:(TIMAPNSConfigSucc)succ fail:(TIMFail)fail;
+- (TIMConversation*)getConversation:(TIMConversationType)type receiver:(NSString*)receiver;
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (四)获取群管理器
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 获取群管理器
+/// @{
 /**
- *  app 切后台时调用
+ *  获取群管理器
  *
- *  @param param 上报参数
- *  @param succ  成功时回调
- *  @param fail  失败时回调
+ *  TIMGroupManager 负责创建群、增删成员、以及修改群资料等
  *
- *  @return 0 表示成功
+ *  @return 群管理器,详情请参考 TIMGroupManager.h 中的 TIMGroupManager 定义
  */
-- (int)doBackground:(TIMBackgroundParam*)param succ:(TIMSucc)succ fail:(TIMFail)fail;
+- (TIMGroupManager*)groupManager;
 
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (五)获取好友管理器
+//
+/////////////////////////////////////////////////////////////////////////////////
+///@name 获取好友管理器
+/// @{
 /**
- *  切前台
+ *  获取好友管理器
  *
- *  @param succ  成功时回调
- *  @param fail  失败时回调
+ *  TIMFriendshipManager 负责加好友,删除好友,查询好友列表等
  *
- *  @return 0 表示成功
+ *  @return 好友管理器,详情请参考 TIMFriendshipManager.h 中的 TIMFriendshipManager 定义
  */
-- (int)doForeground:(TIMSucc)succ fail:(TIMFail)fail;
-
-#pragma mark - 调试使用
+- (TIMFriendshipManager*)friendshipManager;
 
-/**
- * 获取网络状态
- */
-- (TIMNetworkStatus)networkStatus;
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (六)设置 APNs 推送
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 设置 APNs 推送
+/// @{
 /**
- *  设置环境(在InitSdk之前调用,注意:除非是IM工作人员指定要求设置,否则不需要调用此接口)
+ *  6.1. 设置客户端 Token 和证书 busiId
+ *
+ *  1. token 是向苹果后台请求 DeviceToken,具体实现请参考 appdelegate.h 里面的 registNotification。
+ *  2. busiId 是向 IM 控制台上传 iOS 证书(p.12)生成的,具体步骤请参考 [离线推送](https://cloud.tencent.com/document/product/269/9154)。
+ *
+ *  @param token 详情请参考 TIMComm.h 中的 TIMTokenParam 定义
+ *  @param succ 成功回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
+ *  @param fail 失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
  *
- *  @param env  0 正式环境(默认)
- *              1 测试环境
+ *  @return 0:成功;1:失败,token 参数异常
  */
-- (void)setEnv:(int)env;
+- (int)setToken:(TIMTokenParam*)token succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取环境类型
+ *  6.2. 设置推送声音
+ *
+ *  不同用户可能想使用不同的推送声音,TIMAPNSConfig 提供了设置用户声音的字段,可实现单聊声音、群组声音的设置,也可在用户级别设置是否开启推送。
+ *
+ *  @param config APNS 配置,详情请参考 TIMComm.h 中的 TIMAPNSConfig 定义
+ *  @param succ   成功回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
+ *  @param fail   失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
  *
- *  @return env 0 正式环境(默认)
- *              1 测试环境
- *              2 beta 环境
+ *  @return 0:成功;1:失败,config 参数异常
  */
-- (int)getEnv;
+- (int)setAPNS:(TIMAPNSConfig*)config succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取版本号
+ *  6.3. 获取推送声音设置
+ *
+ *  @param succ 成功回调,返回配置信息,详情请参考 TIMComm.h 中的 TIMAPNSConfigSucc 定义
+ *  @param fail 失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
  *
- *  @return 返回版本号,字符串表示,例如v1.1.1
+ *  @return 0:成功;1:失败
  */
-- (NSString*)GetVersion;
+- (int)getAPNSConfig:(TIMAPNSConfigSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取联网SDK的版本号
+ *  6.4. APP 进后台
+ *
+ *  APP 进后台的时候需要主动调用 doBackground ,这个时候后台知道 APP 的状态,之后的消息会下发推送通知。
  *
- *  @return 返回版本号
+ *  @param param 上报参数,详情请参考 TIMComm.h 中的 TIMBackgroundParam 定义
+ *  @param succ  成功时回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
+ *  @param fail  失败时回调,详情请参考 TIMComm.h 中的 TIMFail 定义
+ *
+ *  @return 0:成功;1:失败
  */
-- (NSString*)GetQALVersion;
+- (int)doBackground:(TIMBackgroundParam*)param succ:(TIMSucc)succ fail:(TIMFail)fail;
+
 
 /**
- *  打印日志,通过ImSDK提供的日志功能打印日志
+ *  6.5. APP 进后台
  *
- *  @param level 日志级别
- *  @param tag   模块tag
- *  @param msg   要输出的日志内容
+ *  APP 进前台的时候需要主动调用 doForeground。
+ *
+ *  @param succ  成功时回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
+ *  @param fail  失败时回调,详情请参考 TIMComm.h 中的 TIMFail 定义
+ *
+ *  @return 0:成功;1:失败
  */
-- (void)log:(TIMLogLevel)level tag:(NSString*)tag msg:(NSString*)msg;
+- (int)doForeground:(TIMSucc)succ fail:(TIMFail)fail;
 
-#pragma mark - 登录多账号
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (七)多账号登录接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+///@name 多账号登录接口
+/// @{
 /**
- *  创建新的管理器类型(多用户登陆时使用,否则可直接调用sharedInstance)
+ *  创建新的管理器类型(多用户登陆时使用,否则可直接调用 sharedInstance)
  *
  *  @return 管理器实例
  */
 + (TIMManager*)newManager;
 
 /**
- *  获取管理器类型(多用户登陆时使用,否则可直接调用sharedInstance)
+ *  获取管理器类型(多用户登陆时使用,否则可直接调用 sharedInstance)
  *
- *  @param identifier 用户identifier
+ *  @param identifier 用户 identifier
  *
- *  @return 对应管理器类型,如果没有创建过,返回nil
+ *  @return 对应管理器类型,如果没有创建过,返回 nil
  */
 + (TIMManager*)getManager:(NSString*)identifier;
 
 /**
- *  销毁管理器(多用户登陆时使用,否则可直接调用sharedInstance)
+ *  销毁管理器(多用户登陆时使用,否则可直接调用 sharedInstance)
  *
  *  @param manager 需要销毁的管理器
  */
 + (void)deleteManager:(TIMManager*)manager;
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (八)调试相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 调试相关接口
+/// @{
 /**
- *  获取好友管理器
+ *  获取版本号
  *
- *  @return 好友管理器
+ *  @return 返回版本号,字符串表示,例如 v1.1.1
  */
-//- (TIMFriendshipManager*)friendshipManager;
+- (NSString*)GetVersion;
 
 /**
- *  获取群管理器
+ *  打印日志,通过 ImSDK 提供的日志功能打印日志
  *
- *  @return 群管理器
+ *  @param level 日志级别,详情请参考 TIMComm.h 中的 TIMLogLevel 定义
+ *  @param tag   模块 tag
+ *  @param msg   要输出的日志内容
  */
-- (TIMGroupManager*)groupManager;
-
-#pragma mark - 内部使用的方法
+- (void)log:(TIMLogLevel)level tag:(NSString*)tag msg:(NSString*)msg;
 
 /**
  * 获取日志文件路径
@@ -280,15 +361,25 @@
 - (NSString*)getLogPath;
 
 /**
- * 是否开启sdk日志打印
+ * 是否开启 sdk 日志打印
+ *
+ * @return YES:允许 log 打印;NO:不允许 log 打印
  */
 - (BOOL)getIsLogPrintEnabled;
 
 /**
  *  获取日志级别
  *
- *  @return 返回日志级别
+ *  @return 返回日志级别,详情请参考 TIMComm.h 中的 TIMLogLevel 定义
  */
 -(TIMLogLevel) getLogLevel;
+
+/**
+ *  重置ImSDK配置信息,内部自动化测试使用
+ */
+- (void)unInit;
+
+///@}
+
 @end
 #endif
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMMessage+MsgExt.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMMessage+MsgExt.h
index cbb167b..417fbad 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMMessage+MsgExt.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMMessage+MsgExt.h
@@ -9,14 +9,18 @@
 #ifndef TIMMessage_h
 #define TIMMessage_h
 
-#import "ImSDK.h"
+#import "TIMMessage.h"
 #import "TIMComm+MsgExt.h"
 
 #pragma mark - Elem类型
 
-/**
- *  关系链变更消息
- */
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (一)关系链变更消息
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 关系链变更消息
+/// @{
 @interface TIMSNSSystemElem : TIMElem
 
 /**
@@ -30,25 +34,31 @@
 @property(nonatomic,strong) NSArray * users;
 
 /**
- * 未决已读上报时间戳 type=TIM_SNS_SYSTEM_PENDENCY_REPORT 有效
+ * 未决已读上报时间戳 type = TIM_SNS_SYSTEM_PENDENCY_REPORT 有效
  */
 @property(nonatomic,assign) uint64_t pendencyReportTimestamp;
 
 /**
- * 推荐已读上报时间戳 type=TIM_SNS_SYSTEM_RECOMMEND_REPORT 有效
+ * 推荐已读上报时间戳 type = TIM_SNS_SYSTEM_RECOMMEND_REPORT 有效
  */
 @property(nonatomic,assign) uint64_t recommendReportTimestamp;
 
 /**
- * 已决已读上报时间戳 type=TIM_SNS_SYSTEM_DECIDE_REPORT 有效
+ * 已决已读上报时间戳 type = TIM_SNS_SYSTEM_DECIDE_REPORT 有效
  */
 @property(nonatomic,assign) uint64_t decideReportTimestamp;
 
 @end
 
-/**
- *  资料变更系统消息
- */
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (二)资料变更消息
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 资料变更消息
+/// @{
 @interface TIMProfileSystemElem : TIMElem
 
 /**
@@ -62,72 +72,78 @@
 @property(nonatomic,strong) NSString * fromUser;
 
 /**
- *  资料变更的昵称(如果昵称没有变更,该值为nil)
+ *  资料变更的昵称(暂未实现)
  */
 @property(nonatomic,strong) NSString * nickName;
 
 @end
 
-#pragma mark - 消息扩展
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (三)消息扩展接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 消息扩展接口
+/// @{
 @interface TIMMessage (MsgExt)
 
 /**
- *  是否已读
+ *  自己是否已读
  *
- *  @return TRUE 已读  FALSE 未读
+ *  @return TRUE:已读;FALSE:未读
  */
 - (BOOL)isReaded;
 
 /**
- *  对方是否已读(仅C2C消息有效)
+ *  对方是否已读(仅 C2C 消息有效)
  *
- *  @return TRUE 已读  FALSE 未读
+ *  @return TRUE:已读;FALSE:未读
  */
 - (BOOL)isPeerReaded;
 
 /**
  *  删除消息
  *
- *  @return TRUE 成功
+ *  目前暂不支持 Server 消息删除,只能在本地删除。删除后使用 getMessage 拉取本地消息,不会返回被删除的消息。
+ *
+ *  @return TRUE:成功;FALSE:失败
  */
 - (BOOL)remove;
 
 /**
- *  消息有断层,OnNewMessage回调收到消息,如果有断层,需要重新GetMessage补全(有C2C漫游的情况下使用)
+ *  设置自定义整数,默认为 0
  *
- *  @return TRUE 有断层
- *          FALSE  无断层
- */
-- (BOOL)hasGap;
-
-/**
- *  设置自定义整数,默认为0
+ *  1.此自定义字段仅存储于本地,不会同步到 Server,用户卸载应用或则更换终端后无法获取。
+ *  2.可以根据这个字段设置语音消息是否已经播放,如 customInt 的值 0 表示未播放,1 表示播放,当用户单击播放后可设置 customInt 的值为 1。
  *
  *  @param param 设置参数
  *
- *  @return TRUE 设置成功
+ *  @return TRUE:设置成功;FALSE:设置失败
  */
 - (BOOL)setCustomInt:(int32_t)param;
 
 /**
  *  设置自定义数据,默认为""
  *
+ *  此自定义字段仅存储于本地,不会同步到 Server,用户卸载应用或则更换终端后无法获取。
+ *
  *  @param data 设置参数
  *
- *  @return TRUE 设置成功
+ *  @return TRUE:设置成功;FALSE:设置失败
  */
 - (BOOL)setCustomData:(NSData*)data;
 
 /**
- *  获取CustomInt
+ *  获取 CustomInt
  *
  *  @return CustomInt
  */
 - (int32_t)customInt;
 
 /**
- *  获取CustomData
+ *  获取 CustomData
  *
  *  @return CustomData
  */
@@ -136,12 +152,14 @@
 /**
  *  获取消息定位符
  *
- *  @return locator
+ *  如果是自己创建的 TIMMessage,需要等到消息发送成功后才能获取到 TIMMessageLocator 里面的具体信息
+ *
+ *  @return locator,详情请参考 TIMComm.h 里面的 TIMMessageLocator 定义
  */
 - (TIMMessageLocator*)locator;
 
 /**
- *  是否为locator对应的消息
+ *  是否为 locator 对应的消息
  *
  *  @param locator 消息定位符
  *
@@ -150,35 +168,47 @@
 - (BOOL)respondsToLocator:(TIMMessageLocator*)locator;
 
 /**
- *  设置消息时间戳,导入到本地时有效
+ *  设置消息时间戳
+ *
+ *  需要先将消息到导入到本地,调用 convertToImportedMsg 方法
  *
  *  @param time 时间戳
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)setTime:(time_t)time;
 
 /**
- *  设置消息发送方(需要先将消息到导入到本地,调用 convertToImportedMsg 方法)
-
+ *  设置消息发送方
+ *
+ *  需要先将消息到导入到本地,调用 convertToImportedMsg 方法
  *
  *  @param sender 发送方Id
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)setSender:(NSString*)sender;
 
 /**
  *  将消息导入到本地
  *
- *  @return 0 成功
+ *  只有调用这个接口,才能去修改消息的时间戳和发送方
+ *
+ *  @return 0:成功;1:失败
  */
 - (int)convertToImportedMsg;
 
-@end
+/// @}
 
-#pragma mark - 消息草稿
+@end
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (四)草稿箱
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 草稿箱
+/// @{
 @interface TIMMessageDraft : NSObject
 
 /**
@@ -186,7 +216,7 @@
  *
  *  @param userData 自定义数据
  *
- *  @return 0 成功
+ *  @return 0:成功;1:失败
  */
 - (int)setUserData:(NSData*)userData;
 
@@ -202,18 +232,17 @@
  *
  *  @param elem elem结构
  *
- *  @return 0       表示成功
- *          1       禁止添加Elem(文件或语音多于两个Elem)
- *          2       未知Elem
+ *  @return 0:表示成功;1:禁止添加Elem(文件或语音多于两个Elem);2:未知Elem
+ *
  */
 - (int)addElem:(TIMElem*)elem;
 
 /**
- *  获取对应索引的Elem
+ *  获取对应索引的 Elem
  *
  *  @param index 对应索引
  *
- *  @return 返回对应Elem
+ *  @return 返回对应 Elem
  */
 - (TIMElem*)getElem:(int)index;
 
@@ -227,7 +256,7 @@
 /**
  *  草稿生成对应的消息
  *
- *  @return 消息
+ *  @return 消息,详情请参考 TIMMessage.h 里面的 TIMMessage 定义
  */
 - (TIMMessage*)transformToMessage;
 
@@ -238,6 +267,8 @@
  */
 - (NSDate*)timestamp;
 
+/// @}
+
 @end
 
 #endif /* TIMMessage_h */
diff --git a/HHVDoctorSDK/ImSDK.framework/Headers/TIMMessage.h b/HHVDoctorSDK/ImSDK.framework/Headers/TIMMessage.h
index 61c482a..5d9ef20 100755
--- a/HHVDoctorSDK/ImSDK.framework/Headers/TIMMessage.h
+++ b/HHVDoctorSDK/ImSDK.framework/Headers/TIMMessage.h
@@ -18,15 +18,29 @@
 @class TIMUserProfile;
 @class TIMGroupMemberInfo;
 @class TIMConversation;
+@class TIMSnapshot;
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (一)消息基类
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 消息基类
 /**
- *  消息Elem基类
+ *  消息 Elem 基类
  */
 @interface TIMElem : NSObject
 @end
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (二)文本消息
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 文本消息
 /**
- *  文本消息Elem
+ *  文本消息 Elem
  */
 @interface TIMTextElem : TIMElem
 /**
@@ -34,12 +48,20 @@
  */
 @property(nonatomic,strong) NSString * text;
 @end
+/// @}
 
-#pragma mark - 普通消息类型
-
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (三)图片消息
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 图片消息
+/**
+ *  图片
+ */
 @interface TIMImage : NSObject
 /**
- *  图片ID,内部标识,可用于外部缓存key
+ *  图片 ID,内部标识,可用于外部缓存key
  */
 @property(nonatomic,strong) NSString * uuid;
 /**
@@ -66,16 +88,28 @@
 /**
  *  获取图片
  *
+ *  下载的数据需要由开发者缓存,IM SDK 每次调用 getImage 都会从服务端重新下载数据。建议通过图片的 uuid 作为 key 进行图片文件的存储。
+ *
  *  @param path 图片保存路径
  *  @param succ 成功回调,返回图片数据
  *  @param fail 失败回调,返回错误码和错误描述
  */
 - (void)getImage:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  获取图片(有进度回调)
+ *
+ *  下载的数据需要由开发者缓存,IM SDK 每次调用 getImage 都会从服务端重新下载数据。建议通过图片的 uuid 作为 key 进行图片文件的存储。
+ *
+ *  @param path 图片保存路径
+ *  @param progress 图片下载进度
+ *  @param succ 成功回调,返回图片数据
+ *  @param fail 失败回调,返回错误码和错误描述
+ */
 - (void)getImage:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 @end
 
-
 /**
  *  图片消息Elem
  */
@@ -87,17 +121,17 @@
 @property(nonatomic,strong) NSString * path;
 
 /**
- *  所有类型图片,只读
+ *  所有类型图片,只读,发送的时候不用关注,接收的时候这个字段会保存图片的所有规格,目前最多包含三种规格:原图、大图、缩略图,每种规格保存在一个 TIMImage 对象中
  */
 @property(nonatomic,strong) NSArray * imageList;
 
 /**
- * 上传时任务Id,可用来查询上传进度
+ * 上传时任务 ID,可用来查询上传进度(已废弃,请在 TIMUploadProgressListener 监听上传进度)
  */
-@property(nonatomic,assign) uint32_t taskId;
+@property(nonatomic,assign) uint32_t taskId DEPRECATED_ATTRIBUTE;
 
 /**
- *  图片压缩等级,详见 TIM_IMAGE_COMPRESS_TYPE(仅对jpg格式有效)
+ *  图片压缩等级,详见 TIM_IMAGE_COMPRESS_TYPE(仅对 jpg 格式有效)
  */
 @property(nonatomic,assign) TIM_IMAGE_COMPRESS_TYPE level;
 
@@ -108,124 +142,224 @@
 
 @end
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (四)语音消息
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 语音消息
 /**
- *  文件消息Elem
+ *  语音消息Elem
+ *
+ *  1. 一条消息只能有一个语音 Elem,添加多条语音 Elem 时,AddElem 函数返回错误 1,添加不生效。
+ *  2. 语音和文件 Elem 不一定会按照添加时的顺序获取,建议逐个判断 Elem 类型展示,而且语音和文件 Elem 也不保证按照发送的 Elem 顺序排序。
+ *
  */
-@interface TIMFileElem : TIMElem
+@interface TIMSoundElem : TIMElem
 /**
- *  上传时任务Id,可用来查询上传进度
+ *  上传时任务 ID,可用来查询上传进度(已废弃,请在 TIMUploadProgressListener 监听上传进度)
  */
-@property(nonatomic,assign) uint32_t taskId;
+@property(nonatomic,assign) uint32_t taskId DEPRECATED_ATTRIBUTE;
 /**
- *  上传时,文件的路径(设置path时,优先上传文件)
+ *  上传时,语音文件的路径,接收时使用 getSound 获得数据
  */
 @property(nonatomic,strong) NSString * path;
 /**
- *  文件内部ID
+ *  语音消息内部 ID
  */
 @property(nonatomic,strong) NSString * uuid;
 /**
- *  文件大小
+ *  语音数据大小
  */
-@property(nonatomic,assign) int fileSize;
+@property(nonatomic,assign) int dataSize;
 /**
- *  文件显示名,发消息时设置
+ *  语音长度(秒),发送消息时设置
  */
-@property(nonatomic,strong) NSString * filename;
+@property(nonatomic,assign) int second;
 
 /**
- *  获取文件数据到指定路径的文件中
+ *  获取语音数据到指定路径的文件中
  *
- *  @param path 文件保存路径
- *  @param succ 成功回调,返回数据
+ *  getSound 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
+ *
+ *  @param path 语音保存路径
+ *  @param succ 成功回调
  *  @param fail 失败回调,返回错误码和错误描述
  */
-- (void)getFile:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
-- (void)getFile:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
+- (void)getSound:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  获取语音数据到指定路径的文件中(有进度回调)
+ *
+ *  getSound 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
+ *
+ *  @param path 语音保存路径
+ *  @param progress 语音下载进度
+ *  @param succ 成功回调
+ *  @param fail 失败回调,返回错误码和错误描述
+ */
+- (void)getSound:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 @end
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (五)视频消息
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 视频消息
 /**
- *  语音消息Elem
+ *  视频
  */
-@interface TIMSoundElem : TIMElem
+@interface TIMVideo : NSObject
 /**
- *  上传时任务Id,可用来查询上传进度
+ *  视频消息内部 ID,不用设置
  */
-@property(nonatomic,assign) uint32_t taskId;
+@property(nonatomic,strong) NSString * uuid;
 /**
- *  上传时,语音文件的路径,接收时使用getSound获得数据
+ *  视频文件类型,发送消息时设置
  */
-@property(nonatomic,strong) NSString * path;
+@property(nonatomic,strong) NSString * type;
 /**
- *  语音消息内部ID
+ *  视频大小,不用设置
  */
-@property(nonatomic,strong) NSString * uuid;
+@property(nonatomic,assign) int size;
 /**
- *  语音数据大小
+ *  视频时长,发送消息时设置
  */
-@property(nonatomic,assign) int dataSize;
+@property(nonatomic,assign) int duration;
+
 /**
- *  语音长度(秒),发送消息时设置
+ *  获取视频
+ *
+ *  getVideo 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
+ *
+ *  @param path 视频保存路径
+ *  @param succ 成功回调
+ *  @param fail 失败回调,返回错误码和错误描述
  */
-@property(nonatomic,assign) int second;
+- (void)getVideo:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
 
 /**
- *  获取语音数据到指定路径的文件中
+ *  获取视频(有进度回调)
  *
- *  @param path 语音保存路径
+ *  getVideo 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
+ *
+ *  @param path 视频保存路径
+ *  @param progress 视频下载进度
  *  @param succ 成功回调
  *  @param fail 失败回调,返回错误码和错误描述
  */
-- (void)getSound:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
-- (void)getSound:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
-
+- (void)getVideo:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
 @end
 
 /**
- *  地理位置Elem
+ *  视频消息 Elem
  */
-@interface TIMLocationElem : TIMElem
+@interface TIMVideoElem : TIMElem
+
 /**
- *  地理位置描述信息,发送消息时设置
+ *  上传时任务 ID,可用来查询上传进度(已废弃,请在 TIMUploadProgressListener 监听上传进度)
  */
-@property(nonatomic,strong) NSString * desc;
+@property(nonatomic,assign) uint32_t taskId DEPRECATED_ATTRIBUTE;
+
 /**
- *  纬度,发送消息时设置
+ *  视频文件路径,发送消息时设置
  */
-@property(nonatomic,assign) double latitude;
+@property(nonatomic,strong) NSString * videoPath;
+
 /**
- *  经度,发送消息时设置
+ *  视频信息,发送消息时设置
  */
-@property(nonatomic,assign) double longitude;
-@end
+@property(nonatomic,strong) TIMVideo * video;
 
+/**
+ *  截图文件路径,发送消息时设置
+ */
+@property(nonatomic,strong) NSString * snapshotPath;
 
 /**
- *  自定义消息类型
+ *  视频截图,发送消息时设置
  */
-@interface TIMCustomElem : TIMElem
+@property(nonatomic,strong) TIMSnapshot * snapshot;
+
+@end
+
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (六)文件消息
+//
+/////////////////////////////////////////////////////////////////////////////////
+/// @name 文件消息
 /**
- *  自定义消息二进制数据
+ *  文件消息Elem
  */
-@property(nonatomic,strong) NSData * data;
+@interface TIMFileElem : TIMElem
 /**
- *  自定义消息描述信息,做离线Push时文本展示(已废弃,请使用TIMMessage中offlinePushInfo进行配置)
+ *  上传时任务 ID,可用来查询上传进度(已废弃,请在 TIMUploadProgressListener 监听上传进度)
  */
-@property(nonatomic,strong) NSString * desc DEPRECATED_ATTRIBUTE;
+@property(nonatomic,assign) uint32_t taskId DEPRECATED_ATTRIBUTE;
 /**
- *  离线Push时扩展字段信息(已废弃,请使用TIMMessage中offlinePushInfo进行配置)
+ *  上传时,文件的路径(设置 path 时,优先上传文件)
  */
-@property(nonatomic,strong) NSString * ext DEPRECATED_ATTRIBUTE;
+@property(nonatomic,strong) NSString * path;
 /**
- *  离线Push时声音字段信息(已废弃,请使用TIMMessage中offlinePushInfo进行配置)
+ *  文件内部 ID
  */
-@property(nonatomic,strong) NSString * sound DEPRECATED_ATTRIBUTE;
+@property(nonatomic,strong) NSString * uuid;
+/**
+ *  文件大小
+ */
+@property(nonatomic,assign) int fileSize;
+/**
+ *  文件显示名,发消息时设置
+ */
+@property(nonatomic,strong) NSString * filename;
+
+/**
+ *  获取文件数据到指定路径的文件中
+ *
+ *  getFile 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
+ *
+ *  @param path 文件保存路径
+ *  @param succ 成功回调,返回数据
+ *  @param fail 失败回调,返回错误码和错误描述
+ */
+- (void)getFile:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+/**
+ *  获取文件数据到指定路径的文件中(有进度回调)
+ *
+ *  getFile 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
+ *
+ *  @param path 文件保存路径
+ *  @param progress 文件下载进度
+ *  @param succ 成功回调,返回数据
+ *  @param fail 失败回调,返回错误码和错误描述
+ */
+- (void)getFile:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
+
 @end
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (七)表情消息
+//
+/////////////////////////////////////////////////////////////////////////////////
 /**
  *  表情消息类型
+ *
+ *  1. 表情消息由 TIMFaceElem 定义,SDK 并不提供表情包,如果开发者有表情包,可使用 index 存储表情在表情包中的索引,由用户自定义,或者直接使用 data 存储表情二进制信息以及字符串 key,都由用户自定义,SDK 内部只做透传。
+ *  2. index 和 data 只需要传入一个即可,ImSDK 只是透传这两个数据。
+ *
  */
 @interface TIMFaceElem : TIMElem
 
@@ -240,39 +374,40 @@
 
 @end
 
-@interface TIMVideo : NSObject
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (八)地理位置消息
+//
+/////////////////////////////////////////////////////////////////////////////////
 /**
- *  视频ID,不用设置
+ *  地理位置Elem
  */
-@property(nonatomic,strong) NSString * uuid;
+@interface TIMLocationElem : TIMElem
 /**
- *  视频文件类型,发送消息时设置
+ *  地理位置描述信息,发送消息时设置
  */
-@property(nonatomic,strong) NSString * type;
+@property(nonatomic,strong) NSString * desc;
 /**
- *  视频大小,不用设置
+ *  纬度,发送消息时设置
  */
-@property(nonatomic,assign) int size;
+@property(nonatomic,assign) double latitude;
 /**
- *  视频时长,发送消息时设置
+ *  经度,发送消息时设置
  */
-@property(nonatomic,assign) int duration;
+@property(nonatomic,assign) double longitude;
+@end
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (九)截图消息
+//
+/////////////////////////////////////////////////////////////////////////////////
 /**
- *  获取视频
- *
- *  @param path 视频保存路径
- *  @param succ 成功回调
- *  @param fail 失败回调,返回错误码和错误描述
+ *  截图消息 Elem
  */
-- (void)getVideo:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
-- (void)getVideo:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
-@end
-
-
 @interface TIMSnapshot : NSObject
 /**
- *  图片ID,不用设置
+ *  图片 ID,不用设置
  */
 @property(nonatomic,strong) NSString * uuid;
 /**
@@ -295,48 +430,64 @@
 /**
  *  获取图片
  *
+ *  getImage 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
+ *
  *  @param path 图片保存路径
  *  @param succ 成功回调,返回图片数据
  *  @param fail 失败回调,返回错误码和错误描述
  */
 - (void)getImage:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
-- (void)getImage:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
-
-@end
 
 /**
- *  微视频消息
+ *  获取图片(有进度回调)
+ *
+ *  getImage 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
+ *
+ *  @param path 图片保存路径
+ *  @param progress 图片下载进度
+ *  @param succ 成功回调,返回图片数据
+ *  @param fail 失败回调,返回错误码和错误描述
  */
-@interface TIMVideoElem : TIMElem
+- (void)getImage:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
+
+@end
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (十)自定义消息
+//
+/////////////////////////////////////////////////////////////////////////////////
 /**
- *  上传时任务Id,可用来查询上传进度
+ *  自定义消息类型
+ *
+ *  自定义消息是指当内置的消息类型无法满足特殊需求,开发者可以自定义消息格式,内容全部由开发者定义,IM SDK 只负责透传。自定义消息由 TIMCustomElem 定义,其中 data 存储消息的二进制数据,其数据格式由开发者定义,desc 存储描述文本。一条消息内可以有多个自定义 Elem,并且可以跟其他 Elem 混合排列,离线 Push 时叠加每个 Elem 的 desc 描述信息进行下发。
+ *
  */
-@property(nonatomic,assign) uint32_t taskId;
+@interface TIMCustomElem : TIMElem
 
 /**
- *  视频文件路径,发送消息时设置
+ *  自定义消息二进制数据
  */
-@property(nonatomic,strong) NSString * videoPath;
-
+@property(nonatomic,strong) NSData * data;
 /**
- *  视频信息,发送消息时设置
+ *  自定义消息描述信息,做离线Push时文本展示(已废弃,请使用 TIMMessage 中 offlinePushInfo 进行配置)
  */
-@property(nonatomic,strong) TIMVideo * video;
-
+@property(nonatomic,strong) NSString * desc DEPRECATED_ATTRIBUTE;
 /**
- *  截图文件路径,发送消息时设置
+ *  离线Push时扩展字段信息(已废弃,请使用 TIMMessage 中 offlinePushInfo 进行配置)
  */
-@property(nonatomic,strong) NSString * snapshotPath;
-
+@property(nonatomic,strong) NSString * ext DEPRECATED_ATTRIBUTE;
 /**
- *  视频截图,发送消息时设置
+ *  离线Push时声音字段信息(已废弃,请使用 TIMMessage 中 offlinePushInfo 进行配置)
  */
-@property(nonatomic,strong) TIMSnapshot * snapshot;
-
+@property(nonatomic,strong) NSString * sound DEPRECATED_ATTRIBUTE;
 @end
 
-#pragma mark - 群系统消息和tip消息
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (十一)群 Tips 消息
+//
+/////////////////////////////////////////////////////////////////////////////////
 
 /**
  *  群tips,成员变更信息
@@ -355,7 +506,7 @@
 @end
 
 /**
- *  群tips,群变更信息
+ *  群 tips,群变更信息
  */
 @interface TIMGroupTipsElemGroupInfo : NSObject
 
@@ -371,12 +522,12 @@
 @end
 
 /**
- *  群Tips
+ *  群 Tips
  */
 @interface TIMGroupTipsElem : TIMElem
 
 /**
- *  群组Id
+ *  群组 ID
  */
 @property(nonatomic,strong) NSString * group;
 
@@ -442,7 +593,11 @@
 
 @end
 
-
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (十二)群系统消息
+//
+/////////////////////////////////////////////////////////////////////////////////
 /**
  *  群系统消息
  */
@@ -454,7 +609,7 @@
 @property(nonatomic,assign) TIM_GROUP_SYSTEM_TYPE type;
 
 /**
- * 群组Id
+ * 群组 ID
  */
 @property(nonatomic,strong) NSString * group;
 
@@ -468,7 +623,6 @@
  */
 @property(nonatomic,strong) NSString * msg;
 
-
 /**
  *  消息标识,客户端无需关心
  */
@@ -480,7 +634,7 @@
 @property(nonatomic,strong) NSData * authKey;
 
 /**
- *  用户自定义透传消息体(type=TIM_GROUP_SYSTEM_CUSTOM_INFO时有效)
+ *  用户自定义透传消息体(type = TIM_GROUP_SYSTEM_CUSTOM_INFO 时有效)
  */
 @property(nonatomic,strong) NSData * userData;
 
@@ -496,16 +650,20 @@
 
 /**
  *  操作方平台信息
- *  取值: iOS Android Windows Mac Web RESTAPI Unknown
+ *  取值: iOS、Android、Windows、Mac、Web、RESTAPI、Unknown
  */
 @property(nonatomic,strong) NSString * platform;
 
 @end
 
-#pragma mark - 消息体TIMMessage
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (十三)设置消息推送
+//
+/////////////////////////////////////////////////////////////////////////////////
 /**
- 填入sound字段表示接收时不会播放声音
+ 填入 sound 字段表示接收时不会播放声音
  */
 extern NSString * const kIOSOfflinePushNoSound;
 
@@ -515,7 +673,7 @@ extern NSString * const kIOSOfflinePushNoSound;
  */
 @property(nonatomic,strong) NSString * desc;
 /**
- *  离线Push时扩展字段信息
+ *  离线 Push 时扩展字段信息
  */
 @property(nonatomic,strong) NSString * ext;
 /**
@@ -533,33 +691,36 @@ extern NSString * const kIOSOfflinePushNoSound;
 @end
 
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (十四)消息封装
+//
+/////////////////////////////////////////////////////////////////////////////////
 /**
  *  消息
  */
 @interface TIMMessage : NSObject
 
 /**
- *  增加Elem
+ *  增加 Elem
  *
- *  @param elem elem结构
+ *  @param elem elem 结构
  *
- *  @return 0       表示成功
- *          1       禁止添加Elem(文件或语音多于两个Elem)
- *          2       未知Elem
+ *  @return 0:表示成功;1:禁止添加 Elem(文件或语音多于两个 Elem);2:未知 Elem
  */
 - (int)addElem:(TIMElem*)elem;
 
 /**
- *  获取对应索引的Elem
+ *  获取对应索引的 Elem
  *
  *  @param index 对应索引
  *
- *  @return 返回对应Elem
+ *  @return 返回对应 Elem
  */
 - (TIMElem*)getElem:(int)index;
 
 /**
- *  获取Elem数量
+ *  获取 Elem 数量
  *
  *  @return elem数量
  */
@@ -577,7 +738,7 @@ extern NSString * const kIOSOfflinePushNoSound;
 /**
  *  获得本消息离线推送配置信息
  *
- *  @return 配置信息,没设置返回nil
+ *  @return 配置信息,没设置返回 nil
  */
 - (TIMOfflinePushInfo*)getOfflinePushInfo;
 
@@ -585,14 +746,14 @@ extern NSString * const kIOSOfflinePushNoSound;
  *  设置业务命令字
  *
  *  @param buzCmds 业务命令字列表
- *                 @"im_open_busi_cmd.msg_robot" 表示发送给IM机器人
- *                 @"im_open_busi_cmd.msg_nodb" 表示不存离线
- *                 @"im_open_busi_cmd.msg_noramble" 表示不存漫游
- *                 @"im_open_busi_cmd.msg_nopush" 表示不实时下发给用户
+ *                 @"im_open_busi_cmd.msg_robot":表示发送给IM机器人;
+ *                 @"im_open_busi_cmd.msg_nodb":表示不存离线;
+ *                 @"im_open_busi_cmd.msg_noramble":表示不存漫游;
+ *                 @"im_open_busi_cmd.msg_nopush":表示不实时下发给用户
  *
- *  @return 0 成功
+ *  @return 0:成功;1:buzCmds 为 nil
  */
--(int) setBusinessCmd:(NSArray*)buzCmds;
+-(int)setBusinessCmd:(NSArray*)buzCmds;
 
 /**
  *  获取会话
@@ -611,7 +772,7 @@ extern NSString * const kIOSOfflinePushNoSound;
 /**
  *  是否发送方
  *
- *  @return TRUE 表示是发送消息    FALSE 表示是接收消息
+ *  @return TRUE:表示是发送消息;FALSE:表示是接收消息
  */
 - (BOOL)isSelf;
 
@@ -623,12 +784,12 @@ extern NSString * const kIOSOfflinePushNoSound;
 - (NSString*)sender;
 
 /**
- *  消息Id
+ *  消息 ID,当消息生成时,就已经固定,这种方式可能跟其他用户产生的消息冲突,需要再加一个时间约束,可以认为 10 分钟以内的消息可以使用 msgId 区分,需要在同一个会话内判断。
  */
 - (NSString*)msgId;
 
 /**
- *  获取消息uniqueId
+ *  消息 uniqueId,当消息发送成功以后才能固定下来(uniqueId),这种方式能保证全局唯一,需要在同一个会话内判断。
  *
  *  @return uniqueId
  */
@@ -637,22 +798,25 @@ extern NSString * const kIOSOfflinePushNoSound;
 /**
  *  当前消息的时间戳
  *
- *  @return 时间戳
+ *  @return 时间戳,该时间是 Server 时间,而非本地时间。在创建消息时,此时间为根据 Server 时间校准过的时间,发送成功后会改为准确的 Server 时间。
  */
 - (NSDate*)timestamp;
 
-
 /**
- *  获取发送者资料(发送者为自己时可能为空)
+ *  获取发送者资料
  *
- *  @return 发送者资料,nil 表示没有获取资料,目前只有字段:identifier、nickname、faceURL、customInfo
+ *  如果本地有发送者资料,这里会直接通过 return 值 TIMUserProfile 返回发送者资料,如果本地没有发送者资料,这里会直接 return nil,SDK 内部会向服务器拉取发送者资料,并在 profileCallBack 回调里面返回发送者资料。
+ *
+ *  @param  profileCallBack 发送者资料回调
+ *
+ *  @return 发送者资料,nil 表示本地没有获取到资料
  */
-- (TIMUserProfile*)getSenderProfile;
+- (TIMUserProfile*)getSenderProfile:(ProfileCallBack)profileCallBack;
 
 /**
  *  获取发送者群内资料(发送者为自己时可能为空)
  *
- *  @return 发送者群内资料,nil 表示没有获取资料或者不是群消息,目前只有字段:member、nameCard、role、customInfo
+ *  @return 发送者群内资料,nil 表示没有获取资料或者不是群消息,目前仅能获取字段:member,nameCard,其他的字段获取建议通过 TIMGroupManager+Ext.h -> getGroupMembers 获取
  */
 - (TIMGroupMemberInfo*)getSenderGroupMemberProfile;
 
@@ -666,20 +830,15 @@ extern NSString * const kIOSOfflinePushNoSound;
 - (BOOL)setPriority:(TIMMessagePriority)priority;
 
 /**
- *  获取消息的优先级
+ *  获取消息的优先级(仅对群组消息有效)
+ *
+ *  对于直播场景,会有点赞和发红包功能,点赞相对优先级较低,红包消息优先级较高,具体消息内容可以使用 TIMCustomElem 进行定义,发送消息时,可设置消息优先级。
  *
  *  @return 优先级
  */
 - (TIMMessagePriority)getPriority;
 
 /**
- *  获取消息所属会话的接收消息选项(仅对群组消息有效)
- *
- *  @return 接收消息选项
- */
-- (TIMGroupReceiveMessageOpt)getRecvOpt;
-
-/**
  *  拷贝消息中的属性(ELem、priority、online、offlinePushInfo)
  *
  *  @param srcMsg 源消息
diff --git a/HHVDoctorSDK/ImSDK.framework/ImSDK b/HHVDoctorSDK/ImSDK.framework/ImSDK
index 13cab3a..266eca4 100755
Binary files a/HHVDoctorSDK/ImSDK.framework/ImSDK and b/HHVDoctorSDK/ImSDK.framework/ImSDK differ
diff --git a/HHVDoctorSDK/ImSDK.framework/Info.plist b/HHVDoctorSDK/ImSDK.framework/Info.plist
index 03aa2fe..50c130b 100755
Binary files a/HHVDoctorSDK/ImSDK.framework/Info.plist and b/HHVDoctorSDK/ImSDK.framework/Info.plist differ
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXAudioCustomProcessDelegate.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXAudioCustomProcessDelegate.h
index ca810c7..9155c38 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXAudioCustomProcessDelegate.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXAudioCustomProcessDelegate.h
@@ -14,21 +14,21 @@
 
 /**
  * 原始声音的回调
- * @prarm data pcm数据
- * @prarm timeStamp 时间戳
- * @prarm sampleRate 采样率
- * @prarm channels 声道数
- * @prarm withBgm 回调的数据是否包含bgm,当不开启回声消除时,回调的raw pcm会包含bgm
+ * @param data pcm数据
+ * @param timeStamp 时间戳
+ * @param sampleRate 采样率
+ * @param channels 声道数
+ * @param withBgm 回调的数据是否包含bgm,当不开启回声消除时,回调的raw pcm会包含bgm
  */
 @optional
 - (void)onRecordRawPcmData:(NSData *)data timeStamp:(unsigned long long)timeStamp sampleRate:(int)sampleRate channels:(int)channels withBgm:(BOOL)withBgm;
 
 /**
  * 经过特效处理的声音回调
- * @prarm data pcm数据
- * @prarm timeStamp 时间戳
- * @prarm sampleRate 采样率
- * @prarm channels 声道数
+ * @param data pcm数据
+ * @param timeStamp 时间戳
+ * @param sampleRate 采样率
+ * @param channels 声道数
  */
 @optional
 - (void)onRecordPcmData:(NSData *)data timeStamp:(unsigned long long)timeStamp sampleRate:(int)sampleRate channels:(int)channels;
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXBitrateItem.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXBitrateItem.h
index 0fa1e80..0ae929c 100755
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXBitrateItem.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXBitrateItem.h
@@ -11,9 +11,9 @@
 
 /// HLS多码率信息
 @interface TXBitrateItem : NSObject
-@property (nonatomic, assign) NSInteger index;  /// m3u8文件中的序号
-@property (nonatomic, assign) NSInteger width;  /// 此流的视频宽度
-@property (nonatomic, assign) NSInteger height; /// 此流的视频高度
-@property (nonatomic, assign) NSInteger bitrate; /// 此流的视频码率
+@property (nonatomic, assign) NSInteger index;   ///< m3u8 文件中的序号
+@property (nonatomic, assign) NSInteger width;   ///< 此流的视频宽度
+@property (nonatomic, assign) NSInteger height;  ///< 此流的视频高度
+@property (nonatomic, assign) NSInteger bitrate; ///< 此流的视频码率
 @end
 #endif /* TXBitrateItem_h */
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiteAVCode.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiteAVCode.h
new file mode 100644
index 0000000..0aa68ca
--- /dev/null
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiteAVCode.h
@@ -0,0 +1,309 @@
+#ifndef __TXLITEAVCODE_H__
+#define __TXLITEAVCODE_H__
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                     (一)错误码(严重)
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+typedef enum TXLiteAVError
+{
+    ERR_NULL                                        = 0,        ///< 无错误
+
+    ERR_CAMERA_START_FAIL                           = -1301,    ///< 打开摄像头失败,例如在 Windows 或 Mac 设备,摄像头的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序
+    ERR_CAMERA_NOT_AUTHORIZED                       = -1314,    ///< 摄像头设备未授权,通常在移动设备出现,可能是权限被用户拒绝了
+    ERR_CAMERA_SET_PARAM_FAIL                       = -1315,    ///< 摄像头参数设置出错(参数不支持或其它)
+    ERR_CAMERA_OCCUPY                               = -1316,    ///< 摄像头正在被占用中,可尝试打开其他摄像头
+    ERR_MIC_START_FAIL                              = -1302,    ///< 打开麦克风失败,例如在 Windows 或 Mac 设备,麦克风的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序
+    ERR_MIC_NOT_AUTHORIZED                          = -1317,    ///< 麦克风设备未授权,通常在移动设备出现,可能是权限被用户拒绝了
+    ERR_MIC_SET_PARAM_FAIL                          = -1318,    ///< 麦克风设置参数失败
+    ERR_MIC_OCCUPY                                  = -1319,    ///< 麦克风正在被占用中,例如移动设备正在通话时,打开麦克风会失败
+    ERR_MIC_STOP_FAIL                               = -1320,    ///< 停止麦克风失败
+    ERR_SPEAKER_START_FAIL                          = -1321,    ///< 打开扬声器失败,例如在 Windows 或 Mac 设备,扬声器的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序
+    ERR_SPEAKER_SET_PARAM_FAIL                      = -1322,    ///< 扬声器设置参数失败
+    ERR_SPEAKER_STOP_FAIL                           = -1323,    ///< 停止扬声器失败
+
+    ERR_VIDEO_ENCODE_FAIL                           = -1303,    ///< 视频帧编码失败,例如 iOS 设备切换到其他应用时,硬编码器可能被系统释放,再切换回来时,硬编码器重启前,可能会抛出
+    ERR_AUDIO_ENCODE_FAIL                           = -1304,    ///< 音频帧编码失败,例如传入自定义音频数据,SDK 无法处理
+    ERR_UNSUPPORTED_RESOLUTION                      = -1305,    ///< 不支持的视频分辨率
+    ERR_UNSUPPORTED_SAMPLERATE                      = -1306,    ///< 不支持的音频采样率
+    ERR_RTMP_PUSH_NET_DISCONNECT                    = -1307,    ///< 直播,推流出现网络断开,且经过多次重试无法恢复
+    ERR_SCREEN_CAPTURE_START_FAIL                   = -1308,    ///< 开始录屏失败,如果在移动设备出现,可能是权限被用户拒绝了,如果在 Windows 或 Mac 系统的设备出现,请检查录屏接口的参数是否符合要求
+    ERR_SCREEN_CAPTURE_UNSURPORT                    = -1309,    ///< 录屏失败,在 Android 平台,需要5.0以上的系统
+    ERR_RTMP_PUSH_INVALID_ADDRESS                   = -1313,    ///< 直播,推流地址非法,例如不是 RTMP 协议的地址
+    ERR_RTMP_PUSH_NET_ALLADDRESS_FAIL               = -1324,    ///< 直播,连接推流服务器失败(若支持智能选路,IP 全部失败)
+    ERR_RTMP_PUSH_NO_NETWORK                        = -1325,    ///< 直播,网络不可用,请确认 WiFi、移动数据或者有线网络是否正常
+    ERR_RTMP_PUSH_SERVER_REFUSE                     = -1326,    ///< 直播,服务器拒绝连接请求,可能是该推流地址已经被占用,或者 TXSecret 校验失败,或者是过期了,或者是欠费了
+    ERR_PIXEL_FORMAT_UNSUPPORTED                    = -1327,    ///< 设置的 pixel format 不支持
+    ERR_BUFFER_TYPE_UNSUPPORTED                     = -1328,    ///< 设置的 buffer type 不支持
+    
+    ERR_PLAY_LIVE_STREAM_NET_DISCONNECT             = -2301,    ///< 直播,网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放
+    ERR_GET_RTMP_ACC_URL_FAIL                       = -2302,    ///< 直播,获取加速拉流的地址失败
+    ERR_FILE_NOT_FOUND                              = -2303,    ///< 播放的文件不存在
+    ERR_HEVC_DECODE_FAIL                            = -2304,    ///< H265 解码失败
+    ERR_VOD_DECRYPT_FAIL                            = -2305,    ///< 点播,音视频流解密失败
+    ERR_GET_VODFILE_MEDIAINFO_FAIL                  = -2306,    ///< 点播,获取点播文件信息失败
+    ERR_PLAY_LIVE_STREAM_SWITCH_FAIL                = -2307,    ///< 直播,切流失败(切流可以播放不同画面大小的视频)
+    ERR_PLAY_LIVE_STREAM_SERVER_REFUSE              = -2308,    ///< 直播,服务器拒绝连接请求
+    ERR_RTMP_ACC_FETCH_STREAM_FAIL                  = -2309,    ///< 直播,RTMPACC 低延时拉流失败,且经过多次重试无法恢复
+
+    ERR_ROOM_ENTER_FAIL                             = -3301,    ///< 进入房间失败 [例如 token 过期等原因,server 错误码梳理中,待细化]
+    ERR_ROOM_HEARTBEAT_FAIL                         = -3302,    ///< 心跳失败,客户端定时向服务器发送数据包,告诉服务器自己活着,这个错误通常是发包超时
+    ERR_ROOM_REQUEST_IP_FAIL                        = -3303,    ///< 拉取接口机服务器地址失败
+    ERR_ROOM_CONNECT_FAIL                           = -3304,    ///< 连接接口机服务器失败
+    ERR_ROOM_REQUEST_AVSEAT_FAIL                    = -3305,    ///< 请求视频位失败
+    ERR_ROOM_REQUEST_TOKEN_HTTPS_TIMEOUT            = -3306,    ///< 请求 token https 超时
+    ERR_ROOM_REQUEST_IP_TIMEOUT                     = -3307,    ///< 请求 IP 和 sig 超时
+    ERR_ROOM_REQUEST_ENTER_ROOM_TIMEOUT             = -3308,    ///< 请求进房超时
+    ERR_ROOM_REQUEST_VIDEO_FLAG_TIMEOUT             = -3309,    ///< 请求视频位超时
+    ERR_ROOM_REQUEST_VIDEO_DATA_ROOM_TIMEOUT        = -3310,    ///< 请求视频数据超时
+    ERR_ROOM_REQUEST_CHANGE_ABILITY_TIMEOUT         = -3311,    ///< 请求修改视频能力项超时
+    ERR_ROOM_REQUEST_STATUS_REPORT_TIMEOUT          = -3312,    ///< 请求状态上报超时
+    ERR_ROOM_REQUEST_CLOSE_VIDEO_TIMEOUT            = -3313,    ///< 请求关闭视频超时
+    ERR_ROOM_REQUEST_SET_RECEIVE_TIMEOUT            = -3314,    ///< 请求接收视频项超时
+    ERR_ROOM_REQUEST_TOKEN_INVALID_PARAMETER        = -3315,    ///< 请求 token 无效参数
+    ERR_ENTER_ROOM_PARAM_NULL                       = -3316,    ///< 进房参数为空
+    ERR_SDK_APPID_INVALID                           = -3317,    ///< 进房参数 sdkAppId 错误
+    ERR_ROOM_ID_INVALID                             = -3318,    ///< 进房参数 roomId 错误
+    ERR_USER_ID_INVALID                             = -3319,    ///< 进房参数 userID 不正确
+    ERR_USER_SIG_INVALID                            = -3320,    ///< 进房参数 userSig 不正确
+
+    ERR_PUBLISH_CDN_STREAM_REQUEST_TIME_OUT         = -3321,    ///< 旁路转推请求超时
+    ERR_CLOUD_MIX_TRANSCODING_REQUEST_TIME_OUT      = -3322,    ///< 云端混流请求超时
+    ERR_PUBLISH_CDN_STREAM_RESPON_ERROR             = -3323,    ///< 旁路转推回包异常
+    ERR_CLOUD_MIX_TRANSCODING_RESPON_ERROR          = -3324,    ///< 云端混流回包异常
+    ERR_ROOM_REQUEST_QUIT_ROOM_TIMEOUT              = -3325,    ///< 请求退房超时
+    ERR_ROOM_REQUEST_CONN_ROOM_TIMEOUT              = -3326,    ///< 请求连麦超时
+    ERR_ROOM_REQUEST_DISCONN_ROOM_TIMEOUT           = -3327,    ///< 请求退出连麦超时
+    ERR_ROOM_REQUEST_CONN_ROOM_INVALID_PARAM        = -3328,    ///< 无效参数
+    ERR_ROOM_REQUEST_AES_TOKEN_RETURN_ERROR         = -3329,    ///< 请求 AES TOKEN 时,server 返回的内容是空的
+    ERR_CONNECT_OTHER_ROOM_AS_AUDIENCE              = -3330,    ///< 当前是观众角色,不能请求或断开跨房连麦
+    ERR_ACCIP_LIST_EMPTY                            = -3331,    ///< 请求接口机 IP 返回的列表为空的
+
+    // Info 服务器(查询接口机 IP), 服务器错误码,数值范围[-100000, -110000],但命名、含义在确认中
+
+    ERR_SERVER_INFO_UNPACKING_ERROR                 = -100000,  ///< 请求解包错误
+    ERR_SERVER_INFO_TOKEN_ERROR                     = -100001,  ///< TOKEN 错误
+    ERR_SERVER_INFO_ALLOCATE_ACCESS_FAILED          = -100002,  ///< 分配接口机错误
+    ERR_SERVER_INFO_GENERATE_SIGN_FAILED            = -100003,  ///< 生成签名错误
+    ERR_SERVER_INFO_TOKEN_TIMEOUT                   = -100004,  ///< token 超时
+    ERR_SERVER_INFO_INVALID_COMMAND                 = -100005,  ///< 无效的命令字
+    ERR_SERVER_INFO_PRIVILEGE_FLAG_ERROR            = -100006,  ///< 权限位校验失败
+    ERR_SERVER_INFO_GENERATE_KEN_ERROR              = -100007,  ///< https 请求时,生成加密 key 错误
+    ERR_SERVER_INFO_GENERATE_TOKEN_ERROR            = -100008,  ///< https 请求时,生成 token 错误
+    ERR_SERVER_INFO_DATABASE                        = -100009,  ///< 数据库查询失败(房间相关存储信息)
+    ERR_SERVER_INFO_BAD_ROOMID                      = -100010,  ///< 房间号错误
+    ERR_SERVER_INFO_BAD_SCENE_OR_ROLE               = -100011,  ///< 场景或角色错误
+    ERR_SERVER_INFO_ROOMID_EXCHANGE_FAILED          = -100012,  ///< 房间号转换出错
+    ERR_SERVER_INFO_SERVICE_SUSPENDED               = -100013,  ///< 欠费导致服务暂停
+    
+    ERR_SERVER_INFO_STRGROUP_HAS_INVALID_CHARS      = -100014,  ///< 房间号非法
+//    ERR_SERVER_INFO_LACK_SDKAPPID                   = -100015,  ///< 暂时没用
+
+    // Access 接口机
+
+    ERR_SERVER_ACC_TOKEN_TIMEOUT                    = -101000,  ///< token 超时
+    ERR_SERVER_ACC_SIGN_ERROR                       = -101001,  ///< 签名错误
+    ERR_SERVER_ACC_SIGN_TIMEOUT                     = -101002,  ///< 签名超时
+    ERR_SERVER_ACC_ROOM_NOT_EXIST                   = -101003,  ///< 房间不存在
+    ERR_SERVER_ACC_ROOMID                           = -101004,  ///< 后台房间标识roomid错误
+    ERR_SERVER_ACC_LOCATIONID                       = -101005,  ///< 后台用户位置标识locationid错误
+    
+    // center 服务器(信令和流控处理等任务)
+
+    ERR_SERVER_CENTER_SYSTEM_ERROR                  = -102000,  ///< 后台错误
+    ERR_SERVER_CENTER_INVALID_ROOMID                = -102001,  ///< 无效的房间 Id
+    ERR_SERVER_CENTER_CREATE_ROOM_FAILED            = -102002,  ///< 创建房间失败
+    ERR_SERVER_CENTER_SIGN_ERROR                    = -102003,  ///< 签名错误
+    ERR_SERVER_CENTER_SIGN_TIMEOUT                  = -102004,  ///< 签名过期
+    ERR_SERVER_CENTER_ROOM_NOT_EXIST                = -102005,  ///< 房间不存在
+    ERR_SERVER_CENTER_ADD_USER_FAILED               = -102006,  ///< 房间添加用户失败
+    ERR_SERVER_CENTER_FIND_USER_FAILED              = -102007,  ///< 查找用户失败
+    ERR_SERVER_CENTER_SWITCH_TERMINATION_FREQUENTLY = -102008,  ///< 频繁切换终端
+    ERR_SERVER_CENTER_LOCATION_NOT_EXIST            = -102009,  ///< locationid 错误
+    ERR_SERVER_CENTER_NO_PRIVILEDGE_CREATE_ROOM     = -102010,  ///< 没有权限创建房间
+    ERR_SERVER_CENTER_NO_PRIVILEDGE_ENTER_ROOM      = -102011,  ///< 没有权限进入房间
+    ERR_SERVER_CENTER_INVALID_PARAMETER_SUB_VIDEO   = -102012,  ///< 辅路抢视频位、申请辅路请求类型参数错误
+    ERR_SERVER_CENTER_NO_PRIVILEDGE_PUSH_VIDEO      = -102013,  ///< 没有权限上视频
+    ERR_SERVER_CENTER_ROUTE_TABLE_ERROR             = -102014,  ///< 没有空闲路由表
+    ERR_SERVER_CENTER_NO_PRIVILEDGE_PUSH_SUB_VIDEO  = -102015,  ///< 没有权限上行辅路
+    ERR_SERVER_CENTER_ANOTHER_USER_PUSH_SUB_VIDEO   = -102016,  ///< 其他用户正在上行辅路
+    ERR_SERVER_CENTER_NOT_PUSH_SUB_VIDEO            = -102017,  ///< 当前用户没有上行辅路
+    ERR_SERVER_CENTER_USER_WAS_DELETED              = -102018,  ///< 用户被删除状态
+    ERR_SERVER_CENTER_NO_PRIVILEDGE_REQUEST_VIDEO   = -102019,  ///< 没有权限请求视频
+
+    ERR_SERVER_CENTER_INVALID_PARAMETER             = -102023,  ///< 参数错误
+    ERR_SERVER_CENTER_I_FRAME_UNKNOW_TYPE           = -102024,  ///< 请求 I 帧未知 opType
+    ERR_SERVER_CENTER_I_FRAME_INVALID_PACKET        = -102025,  ///< 请求 I 帧包格式错误
+    ERR_SERVER_CENTER_I_FRAME_DEST_USER_NOT_EXIST   = -102026,  ///< 请求 I 帧目标用户不存在
+    ERR_SERVER_CENTER_I_FRAME_ROOM_TOO_BIG          = -102027,  ///< 请求 I 帧房间用户太多
+    ERR_SERVER_CENTER_I_FRAME_RPS_INVALID_PARAMETER = -102028,  ///< 请求 I 帧参数错误
+    ERR_SERVER_CENTER_INVALID_ROOM_ID               = -102029,  ///< 房间号非法
+    ERR_SERVER_CENTER_ROOM_ID_TOO_LONG              = -102030,  ///< 房间号超过限制
+	//跨房间连麦
+    ERR_SERVER_CENTER_CONN_ROOM_NOT_SUPPORT         = -102031,  ///< 不支持跨房间连麦
+    ERR_SERVER_CENTER_CONN_ROOM_REACH_MAX_NUM       = -102032,  ///< 达到跨房间连麦上限
+    ERR_SERVER_CENTER_CONN_ROOM_REACH_MAX_RETRY_TIMES   = -102033,  ///< 跨房间连麦重试次数耗尽
+    ERR_SERVER_CENTER_CONN_ROOM_REQ_TIMEOUT         = -102034,  ///< 跨房间连麦请求超时
+    ERR_SERVER_CENTER_CONN_ROOM_REQ                 = -102035,  ///< 跨房间连麦请求格式错误
+    ERR_SERVER_CENTER_CONN_ROOM_NO_SIG              = -102036,  ///< 跨房间连麦无签名
+    ERR_SERVER_CENTER_CONN_ROOM_DECRYPT_SIG         = -102037,  ///< 跨房间连麦签名解密失败
+    ERR_SERVER_CENTER_CONN_ROOM_NO_KEY              = -102038,  ///< 未找到跨房间连麦签名解密密钥
+    ERR_SERVER_CENTER_CONN_ROOM_PARSE_SIG           = -102039,  ///< 跨房间连麦签名解析错误
+    ERR_SERVER_CENTER_CONN_ROOM_INVALID_SIG_TIME    = -102040,  ///< 跨房间连麦签名时间戳错误
+    ERR_SERVER_CENTER_CONN_ROOM_SIG_GROUPID         = -102041,  ///< 跨房间连麦签名不匹配
+    ERR_SERVER_CENTER_CONN_ROOM_NOT_CONNED          = -102042,  ///< 本房间无连麦
+    ERR_SERVER_CENTER_CONN_ROOM_USER_NOT_CONNED     = -102043,  ///< 本用户未发起连麦
+    ERR_SERVER_CENTER_CONN_ROOM_FAILED              = -102044,  ///< 跨房间连麦失败
+    ERR_SERVER_CENTER_CONN_ROOM_CANCEL_FAILED       = -102045,  ///< 取消跨房间连麦失败
+    ERR_SERVER_CENTER_CONN_ROOM_CONNED_ROOM_NOT_EXIST   = -102046,  ///< 被连麦房间不存在
+    ERR_SERVER_CENTER_CONN_ROOM_CONNED_REACH_MAX_ROOM   = -102047,  ///< 被连麦房间达到连麦上限
+    ERR_SERVER_CENTER_CONN_ROOM_CONNED_USER_NOT_EXIST   = -102048,  ///< 被连麦用户不存在
+    ERR_SERVER_CENTER_CONN_ROOM_CONNED_USER_DELETED     = -102049,  ///< 被连麦用户已被删除
+    ERR_SERVER_CENTER_CONN_ROOM_CONNED_USER_FULL        = -102050,  ///< 被连麦用户达到资源上限
+    ERR_SERVER_CENTER_CONN_ROOM_INVALID_SEQ             = -102051,  ///< 连麦请求序号错乱
+    ERR_SERVER_CENTER_ROOM_FULL                         = -102052,  ///< 房间满员
+    ERR_SERVER_CENTER_DECODE_JSON_FAIL                  = -102053,  ///< json串解析失败
+    ERR_SERVER_CENTER_UNKNOWN_SUB_CMD                   = -102054,  ///< 未定义命令字
+    ERR_SERVER_CENTER_INVALID_ROLE                      = -102055,  ///< 未定义角色
+    ERR_SERVER_CENTER_REACH_PROXY_MAX                   = -102056,  ///< 代理机超出限制
+    
+    //add by sunlitwang begin
+    ERR_SERVER_CENTER_RECORDID_STORE                = -102057,  ///< 无法保存用户自定义recordId
+    ERR_SERVER_CENTER_PB_SERIALIZE                  = -102058,  ///< Protobuf序列化错误
+    // https://cloud.tencent.com/document/product/269/1671#.E5.B8.90.E5.8F.B7.E7.B3.BB.E7.BB.9F , 帐号系统, 主要是70000 - 79999之间.
+    // 在请求 token 过程中,出现账号错误,SSO 返回的错误码,原为正数,现将其转换为负数。
+
+    ERR_SERVER_SSO_SIG_EXPIRED                      = -70001,   ///< sig 过期,请尝试重新生成。如果是刚生成,就过期,请检查有效期填写的是否过小,或者填的 0
+    ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_1        = -70003,   ///< sig 校验失败,请确认下 sig 内容是否被截断,如缓冲区长度不够导致的内容截断
+    ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_2        = -70004,   ///< sig 校验失败,请确认下 sig 内容是否被截断,如缓冲区长度不够导致的内容截断
+    ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_3        = -70005,   ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
+    ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_4        = -70006,   ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
+    ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_5        = -70007,   ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
+    ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_6        = -70008,   ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
+    ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_7        = -70009,   ///< 用业务公钥验证 sig 失败,请确认生成的 usersig 使用的私钥和 sdkAppId 是否对应
+    ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_8        = -70010,   ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
+    ERR_SERVER_SSO_SIG_VERIFICATION_ID_NOT_MATCH    = -70013,   ///< sig 中 identifier 与请求时的 identifier 不匹配,请检查登录时填写的 identifier 与 sig 中的是否一致
+    ERR_SERVER_SSO_APPID_NOT_MATCH                  = -70014,   ///< sig 中 sdkAppId 与请求时的 sdkAppId 不匹配,请检查登录时填写的 sdkAppId 与 sig 中的是否一致
+    ERR_SERVER_SSO_VERIFICATION_EXPIRED             = -70017,   ///< 内部第三方票据验证超时,请重试,如多次重试不成功,请@TLS 帐号支持,QQ 3268519604
+    ERR_SERVER_SSO_VERIFICATION_FAILED              = -70018,   ///< 内部第三方票据验证超时,请重试,如多次重试不成功,请@TLS 帐号支持,QQ 3268519604
+
+    ERR_SERVER_SSO_APPID_NOT_FOUND                  = -70020,   ///< sdkAppId 未找到,请确认是否已经在腾讯云上配置
+    ERR_SERVER_SSO_ACCOUNT_IN_BLACKLIST             = -70051,   ///< 帐号已被拉入黑名单,请联系 TLS 帐号支持 QQ 3268519604
+    ERR_SERVER_SSO_SIG_INVALID                      = -70052,   ///< usersig 已经失效,请重新生成,再次尝试
+    ERR_SERVER_SSO_LIMITED_BY_SECURITY              = -70114,   ///< 安全原因被限制
+    ERR_SERVER_SSO_INVALID_LOGIN_STATUS             = -70221,   ///< 登录状态无效,请使用 usersig 重新鉴权
+    ERR_SERVER_SSO_APPID_ERROR                      = -70252,   ///< sdkAppId 填写错误
+    ERR_SERVER_SSO_TICKET_VERIFICATION_FAILED       = -70346,   ///< 票据校验失败,请检查各项参数是否正确
+    ERR_SERVER_SSO_TICKET_EXPIRED                   = -70347,   ///< 票据因过期原因校验失败
+    ERR_SERVER_SSO_ACCOUNT_EXCEED_PURCHASES         = -70398,   ///< 创建账号数量超过已购买预付费数量限制
+    ERR_SERVER_SSO_INTERNAL_ERROR                   = -70500,   ///< 服务器内部错误,请重试
+} TXLiteAVError;
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                     (二)错误码(警告)
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+typedef enum TXLiteAVWarning
+{
+    WARNING_NET_BUSY                                = 1101,     ///< 网络状况不佳:上行带宽太小,上传数据受阻
+    WARNING_RTMP_SERVER_RECONNECT                   = 1102,     ///<  直播,网络断连, 已启动自动重连(自动重连连续失败超过三次会放弃)
+    WARNING_HW_ENCODER_START_FAIL                   = 1103,     ///<  硬编码启动失败,采用软编码
+    WARNING_VIDEO_ENCODER_SW_TO_HW                  = 1107,     ///<  视频编码器从软编码自动切换到硬编码,一般是由于 CPU 使用率过高触发的
+    WARNING_INSUFFICIENT_CAPTURE_FPS                = 1108,     ///<  摄像头采集帧率不足,部分自带美颜算法的 Android 手机上会出现
+    WARNING_SW_ENCODER_START_FAIL                   = 1109,     ///<  软编码启动失败
+    WARNING_REDUCE_CAPTURE_RESOLUTION               = 1110,     ///<  摄像头采集分辨率被降低,以满足当前帧率和性能最优解。
+
+    WARNING_VIDEO_FRAME_DECODE_FAIL                 = 2101,     ///<  当前视频帧解码失败
+    WARNING_AUDIO_FRAME_DECODE_FAIL                 = 2102,     ///<  当前音频帧解码失败
+    WARNING_LIVE_STREAM_SERVER_RECONNECT            = 2103,     ///<  直播,网络断连, 已启动自动重连(自动重连连续失败超过三次会放弃)
+    WARNING_RECV_DATA_LAG                           = 2104,     ///<  网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀
+    WARNING_VIDEO_PLAY_LAG                          = 2105,     ///<  当前视频播放出现卡顿(用户直观感受)
+    WARNING_HW_DECODER_START_FAIL                   = 2106,     ///<  硬解启动失败,采用软解码
+    WARNING_VIDEO_DECODER_HW_TO_SW                  = 2108,     ///<  当前流硬解第一个 I 帧失败,SDK 自动切软解
+    WARNING_SW_DECODER_START_FAIL                   = 2109,     ///<  软解码器启动失败
+
+    WARNING_RTMP_DNS_FAIL                           = 3001,     ///<  直播,DNS 解析失败
+    WARNING_RTMP_SEVER_CONN_FAIL                    = 3002,     ///<  直播,服务器连接失败
+    WARNING_RTMP_SHAKE_FAIL                         = 3003,     ///<  直播,与 RTMP 服务器握手失败
+    WARNING_RTMP_SERVER_BREAK_CONNECT               = 3004,     ///<  直播,服务器主动断开
+    WARNING_RTMP_READ_WRITE_FAIL                    = 3005,     ///<  直播,RTMP 读/写失败,将会断开连接
+    WARNING_RTMP_WRITE_FAIL                         = 3006,     ///<  直播,RTMP 写失败(SDK 内部错误码,不会对外抛出)
+    WARNING_RTMP_READ_FAIL                          = 3007,     ///<  直播,RTMP 读失败(SDK 内部错误码,不会对外抛出)
+    WARNING_RTMP_NO_DATA                            = 3008,     ///<  直播,超过30s 没有数据发送,主动断开连接
+    WARNING_PLAY_LIVE_STREAM_INFO_CONNECT_FAIL      = 3009,     ///<  直播,connect 服务器调用失败(SDK 内部错误码,不会对外抛出)
+    WARNING_NO_STEAM_SOURCE_FAIL                    = 3010,     ///<  直播,连接失败,该流地址无视频(SDK 内部错误码,不会对外抛出)
+
+    WARNING_ROOM_DISCONNECT                         = 5101,     ///<  网络断开连接
+    WARNING_ROOM_RECONNECT                          = 5102,     ///<  网络断连,已启动自动重连
+    WARNING_ROOM_NET_BUSY                           = 5103,     ///<  网络状况不佳:上行带宽太小,上传数据受阻
+    
+    WARNING_IGNORE_UPSTREAM_FOR_AUDIENCE            = 6001,     ///<  当前是观众角色,忽略上行音视频数据
+} TXLiteAVWarning;
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                     (三)事件列表
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+typedef enum TXLiteAVEvent
+{
+    EVT_RTMP_PUSH_CONNECT_SUCC                      = 1001,     ///<  直播,已经连接 RTMP 推流服务器
+    EVT_RTMP_PUSH_BEGIN                             = 1002,     ///<  直播,已经与 RTMP 服务器握手完毕,开始推流
+    EVT_CAMERA_START_SUCC                           = 1003,     ///<  打开摄像头成功
+    EVT_SCREEN_CAPTURE_SUCC                         = 1004,     ///<  录屏启动成功
+    EVT_UP_CHANGE_RESOLUTION                        = 1005,     ///<  上行动态调整分辨率
+    EVT_UP_CHANGE_BITRATE                           = 1006,     ///<  码率动态调整
+    EVT_FIRST_FRAME_AVAILABLE                       = 1007,     ///<  首帧画面采集完成
+    EVT_START_VIDEO_ENCODER                         = 1008,     ///<  编码器启动成功
+    EVT_SNAPSHOT_COMPLETE                           = 1022,     ///<  一帧截图完成
+    EVT_CAMERA_REMOVED                              = 1023,     ///<  摄像头设备已被移出(Windows 和 Mac 版 SDK 使用)
+    EVT_CAMERA_AVAILABLE                            = 1024,     ///<  摄像头设备重新可用(Windows 和 Mac 版 SDK 使用)
+    EVT_CAMERA_CLOSE                                = 1025,     ///<  关闭摄像头完成(Windows 和 Mac 版 SDK 使用)
+    EVT_RTMP_PUSH_PUBLISH_START                     = 1026,     ///<  直播,与 RTMP 服务器连接后,收到 NetStream.Publish.Start 消息,表明流发布成功(SDK 内部事件,不会对外抛出)
+    EVT_HW_ENCODER_START_SUCC                       = 1027,     ///<  硬编码器启动成功
+    EVT_SW_ENCODER_START_SUCC                       = 1028,     ///<  软编码器启动成功
+
+    EVT_PLAY_LIVE_STREAM_CONNECT_SUCC               = 2001,     ///<  直播,已经连接 RTMP 拉流服务器
+    EVT_PLAY_LIVE_STREAM_BEGIN                      = 2002,     ///<  直播,已经与 RTMP 服务器握手完毕,开始拉流
+    EVT_RENDER_FIRST_I_FRAME                        = 2003,     ///<  渲染首个视频数据包(IDR)
+    EVT_VIDEO_PLAY_BEGIN                            = 2004,     ///<  视频播放开始
+    EVT_VIDEO_PLAY_PROGRESS                         = 2005,     ///<  视频播放进度
+    EVT_VIDEO_PLAY_END                              = 2006,     ///<  视频播放结束
+    EVT_VIDEO_PLAY_LOADING                          = 2007,     ///<  视频播放 loading
+    EVT_START_VIDEO_DECODER                         = 2008,     ///<  解码器启动
+    EVT_DOWN_CHANGE_RESOLUTION                      = 2009,     ///<  下行视频分辨率改变
+    EVT_GET_VODFILE_MEDIAINFO_SUCC                  = 2010,     ///<  点播,获取点播文件信息成功
+    EVT_VIDEO_CHANGE_ROTATION                       = 2011,     ///<  视频旋转角度发生改变
+    EVT_PLAY_GET_MESSAGE                            = 2012,     ///<  消息事件
+    EVT_VOD_PLAY_PREPARED                           = 2013,     ///<  点播,视频加载完毕
+    EVT_VOD_PLAY_LOADING_END                        = 2014,     ///<  点播,loading 结束
+    EVT_PLAY_LIVE_STREAM_SWITCH_SUCC                = 2015,     ///<  直播,切流成功(切流可以播放不同画面大小的视频)
+    EVT_VOD_PLAY_TCP_CONNECT_SUCC                   = 2016,     ///<  点播,TCP 连接成功(SDK 内部事件,不会对外抛出)
+    EVT_VOD_PLAY_FIRST_VIDEO_PACKET                 = 2017,     ///<  点播,收到首帧数据(SDK 内部事件,不会对外抛出)
+    EVT_VOD_PLAY_DNS_RESOLVED                       = 2018,     ///<  点播,DNS 解析完成(SDK 内部事件,不会对外抛出)
+    EVT_VOD_PLAY_SEEK_COMPLETE                      = 2019,     ///<  点播,视频播放 Seek 完成(SDK 内部事件,不会对外抛出)
+    EVT_VIDEO_DECODER_CACHE_TOO_MANY_FRAMES         = 2020,     ///<  视频解码器缓存帧数过多,超过40帧(SDK 内部事件,不会对外抛出)
+    EVT_HW_DECODER_START_SUCC                       = 2021,     ///<  硬解码器启动成功(SDK 内部事件,不会对外抛出)
+    EVT_SW_DECODER_START_SUCC                       = 2022,     ///<  软解码器启动成功(SDK 内部事件,不会对外抛出)
+    EVT_AUDIO_JITTER_STATE_FIRST_LOADING            = 2023,     ///<  音频首次加载(SDK 内部事件,不会对外抛出)
+    EVT_AUDIO_JITTER_STATE_LOADING                  = 2024,     ///<  音频正在加载(SDK 内部事件,不会对外抛出)
+    EVT_AUDIO_JITTER_STATE_PLAYING                  = 2025,     ///<  音频正在播放(SDK 内部事件,不会对外抛出)
+    EVT_AUDIO_JITTER_STATE_FIRST_PLAY               = 2026,     ///<  音频首次播放(SDK 内部事件,不会对外抛出)
+    EVT_MIC_START_SUCC                              = 2027,     ///<  麦克风启动成功
+    EVT_PLAY_GET_METADATA                           = 2028,     ///<  视频流MetaData事件
+
+    EVT_ROOM_ENTER                                  = 1018,     ///<  进入房间成功
+    EVT_ROOM_EXIT                                   = 1019,     ///<  退出房间
+    EVT_ROOM_USERLIST                               = 1020,     ///<  下发房间成员列表(不包括自己)
+    EVT_ROOM_NEED_REENTER                           = 1021,     ///<  WiFi 切换到4G 会触发断线重连,此时需要重新进入房间(拉取最优的服务器地址)
+    EVT_ROOM_REQUEST_IP_SUCC                        = 8001,     ///<  拉取接口机服务器地址成功
+    EVT_ROOM_CONNECT_SUCC                           = 8002,     ///<  连接接口机服务器成功
+    EVT_ROOM_REQUEST_AVSEAT_SUCC                    = 8003,     ///<  请求视频位成功
+} TXLiteAVEvent;
+
+#endif /* __TXLITEAVCODE_H__ */
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiteAVSDK.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiteAVSDK.h
index 8baba03..ed12e0b 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiteAVSDK.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiteAVSDK.h
@@ -6,12 +6,13 @@
 //  Copyright © 2017年 Tencent. All rights reserved.
 //
 
-#import <UIKit/UIKit.h>
+
 
 #import <TXLiteAVSDK_Smart/TXAudioCustomProcessDelegate.h>
 #import <TXLiteAVSDK_Smart/TXAudioRawDataDelegate.h>
 #import <TXLiteAVSDK_Smart/TXBitrateItem.h>
 #import <TXLiteAVSDK_Smart/TXImageSprite.h>
+#import <TXLiteAVSDK_Smart/TXLiteAVCode.h>
 #import <TXLiteAVSDK_Smart/TXLiveAudioSessionDelegate.h>
 #import <TXLiteAVSDK_Smart/TXLiveBase.h>
 #import <TXLiteAVSDK_Smart/TXLivePlayConfig.h>
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveAudioSessionDelegate.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveAudioSessionDelegate.h
index 29ee5c3..b3209d2 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveAudioSessionDelegate.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveAudioSessionDelegate.h
@@ -4,6 +4,7 @@
 #import <AVFoundation/AVFoundation.h>
 
 @protocol TXLiveAudioSessionDelegate <NSObject>
+#if TARGET_OS_IPHONE
 
 @optional
 - (BOOL)setActive:(BOOL)active error:(NSError **)outError;
@@ -19,7 +20,6 @@
 
 @optional
 - (BOOL)setCategory:(NSString *)category mode:(NSString *)mode options:(AVAudioSessionCategoryOptions)options error:(NSError **)outError;
-
 @optional
 - (BOOL)setPreferredIOBufferDuration:(NSTimeInterval)duration error:(NSError **)outError;
 
@@ -28,6 +28,6 @@
 
 @optional
 - (BOOL)overrideOutputAudioPort:(AVAudioSessionPortOverride)portOverride error:(NSError **)outError;
-
+#endif
 @end
 #endif /* TXLiveAudioSessionDelegate_h */
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveBase.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveBase.h
index 7e5b744..df5415f 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveBase.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveBase.h
@@ -40,14 +40,14 @@ typedef NS_ENUM(NSInteger, TX_Enum_Type_LogLevel) {
 + (instancetype) sharedInstance;
 
 /**  设置log输出级别
- *  @prarm level 参见 LOGLEVEL
+ *  @param level 参见 LOGLEVEL
  *
  */
 + (void) setLogLevel:(TX_Enum_Type_LogLevel)level;
 
 /**
  * 启用或禁用控制台日志打印
- * @param enabled指定是否启用
+ * @param enabled 指定是否启用
  */
 + (void) setConsoleEnabled:(BOOL)enabled;
 
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayConfig.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayConfig.h
index c8bcffa..c778c68 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayConfig.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayConfig.h
@@ -1,64 +1,90 @@
+/*
+ * Module:   TXLivePlayConfig @ TXLiteAVSDK
+ *
+ * Function: 腾讯云直播播放器的参数配置模块
+ *
+ * Version: <:Version:>
+ */
+
 #import <Foundation/Foundation.h>
 
+/**
+ * 腾讯云直播播放器的参数配置模块
+ *
+ * 主要负责 TXLivePlayer 对应的参数设置,其中绝大多数设置项在播放开始之后再设置是无效的。
+ */
 @interface TXLivePlayConfig : NSObject
 
-/// 播放器缓存时间 : 单位秒,取值需要大于0, 默认值为5
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      常用设置项
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+///【字段含义】播放器缓存时间,单位秒,取值需要大于0,默认值:5
 @property(nonatomic, assign) float cacheTime;
 
-/**
- * 是否自动调整播放器缓存时间 : YES:启用自动调整,自动调整的最大值和最小值可以分别通过修改maxCacheTime和minCacheTime来设置;
- *                        NO:关闭自动调整,采用默认的指定缓存时间(1s),可以通过修改cacheTime来调整缓存时间.
- *                          默认值为YES
- */
+///【字段含义】是否自动调整播放器缓存时间,默认值:YES
+/// YES:启用自动调整,自动调整的最大值和最小值可以分别通过修改 maxCacheTime 和 minCacheTime 来设置
+/// NO:关闭自动调整,采用默认的指定缓存时间(1s),可以通过修改 cacheTime 来调整缓存时间
 @property(nonatomic, assign) BOOL bAutoAdjustCacheTime;
 
-/// 播放器缓存自动调整的最大时间 : 单位秒,取值需要大于0, 默认值为5
+///【字段含义】播放器缓存自动调整的最大时间,单位秒,取值需要大于0,默认值:5
 @property(nonatomic, assign) float maxAutoAdjustCacheTime;
 
-/// 播放器缓存自动调整的最小时间 : 单位秒,取值需要大于0, 默认值为1
+///【字段含义】播放器缓存自动调整的最小时间,单位秒,取值需要大于0,默认值为1
 @property(nonatomic, assign) float minAutoAdjustCacheTime;
 
-/// 播放器视频卡顿报警阈值,只有渲染间隔超过这个阈值的卡顿才会有PLAY_WARNING_VIDEO_PLAY_LAG通知
+///【字段含义】播放器视频卡顿报警阈值,单位毫秒
+///【推荐取值】800
+///【特别说明】只有渲染间隔超过这个阈值的卡顿才会有 PLAY_WARNING_VIDEO_PLAY_LAG 通知
 @property(nonatomic, assign) int videoBlockThreshold;
 
-/// 播放器连接重试次数 : 最小值为 1, 最大值为 10, 默认值为 3
+///【字段含义】播放器遭遇网络连接断开时 SDK 默认重试的次数,取值范围1 - 10,默认值:3。
 @property(nonatomic, assign) int connectRetryCount;
 
-/// 播放器连接重试间隔 : 单位秒,最小值为 3, 最大值为 30, 默认值为 3
+///【字段含义】网络重连的时间间隔,单位秒,取值范围3 - 30,默认值:3。
 @property(nonatomic, assign) int connectRetryInterval;
 
-/// 是否开启回声消除, 默认值为NO
+///【字段含义】是否开启回声消除, 默认值为 NO
 @property(nonatomic, assign) BOOL enableAEC;
 
-/// 是否开启消息通道, 默认值为NO
+///【字段含义】是否开启消息通道, 默认值为 NO
 @property(nonatomic, assign) BOOL enableMessage;
 
-/**
- 视频渲染对象回调的视频格式. 仅支持 kCVPixelFormatType_420YpCbCr8Planar和kCVPixelFormatType_420YpCbCr8BiPlanarFullRange, 默认值为kCVPixelFormatType_420YpCbCr8Planar
-点播支持kCVPixelFormatType_32BGRA回调
-点播支持kCVPixelFormatType_32BGRA回调
-点播支持kCVPixelFormatType_32BGRA回调
- */
+///【字段含义】是否开启 MetaData 数据回调,默认值为 NO。
+/// YES:SDK 通过 EVT_PLAY_GET_METADATA 消息抛出视频流的 MetaData 数据;
+/// NO:SDK 不抛出视频流的 MetaData 数据。
+/// 标准直播流都会在最开始的阶段有一个 MetaData 数据头,该数据头支持定制。
+/// 您可以通过 TXLivePushConfig 中的 metaData 属性设置一些自定义数据,再通过 TXLivePlayListener 中的
+/// onPlayEvent(EVT_PLAY_GET_METADATA) 消息接收到这些数据。
+///【特别说明】每条音视频流中只能设置一个 MetaData 数据头,除非断网重连,否则 TXLivePlayer 的 EVT_PLAY_GET_METADATA 消息也只会收到一次。
+@property(nonatomic, assign) BOOL enableMetaData;
+
+///【字段含义】视频渲染对象回调的视频格式,默认值:kCVPixelFormatType_420YpCbCr8Planar
+///【特别说明】支持:kCVPixelFormatType_420YpCbCr8Planar 和 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
 @property(nonatomic, assign) OSType playerPixelFormatType;
 
-/**
- *  只对加速拉流生效,用于指定加速拉流是否开启就近选路 (当前版本不启用)
- */
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      待废弃设置项
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+///【字段含义】是否开启就近选路,待废弃,默认值:YES
 @property(nonatomic, assign) BOOL enableNearestIP;
 
-/**
- *  RTMP传输通道的类型,取值为枚举值:TX_Enum_Type_RTMPChannel, 默认值为RTMP_CHANNEL_TYPE_AUTO
- *  RTMP_CHANNEL_TYPE_AUTO          = 0,    //自动
- *  RTMP_CHANNEL_TYPE_STANDARD      = 1,    //标准的RTMP协议,网络层采用TCP协议
- *  RTMP_CHANNEL_TYPE_PRIVATE       = 2,    //标准的RTMP协议,网络层采用私有通道传输(在UDP上封装的一套可靠快速的传输通道),能够更好地抵抗网络抖动;对于播放来说,私有传输通道只有在拉取低时延加速流时才可以生效
- 
- */
+///【字段含义】RTMP 传输通道的类型,待废弃,默认值为:RTMP_CHANNEL_TYPE_AUTO
 @property (nonatomic, assign) int rtmpChannelType;
-/// 视频缓存目录,点播MP4、HLS有效
+
+#if TARGET_OS_IPHONE
+///【字段含义】视频缓存目录,点播 MP4、HLS 有效
 @property NSString *cacheFolderPath;
-/// 最多缓存文件个数
+///【字段含义】最多缓存文件个数,默认值:0
 @property int maxCacheItems;
-/// 自定义HTTP Headers
+///【字段含义】自定义 HTTP Headers
 @property NSDictionary *headers;
+#endif
 
 @end
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayListener.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayListener.h
index 937aa31..1e7e3e5 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayListener.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayListener.h
@@ -1,32 +1,28 @@
+/*
+ * Module:   TXLivePlayListener @ TXLiteAVSDK
+ *
+ * Function: 腾讯云直播播放的回调通知
+ *
+ * Version: <:Version:>
+ */
 
 #import <Foundation/Foundation.h>
 #import "TXLiveSDKTypeDef.h"
-
-/// 直播通知
-@protocol TXLivePlayListener <NSObject>
 
-/**
- * 直播事件通知
- *
- * @param EvtID 参见TXLiveSDKTypeDef.h
- * @param param 参见TXLiveSDKTypeDef.h
- */
--(void) onPlayEvent:(int)EvtID withParam:(NSDictionary*)param;
+/// 腾讯云直播播放的回调通知
+@protocol TXLivePlayListener <NSObject>
 
-/**
- * 网络状态通知
- *
- * @param param 参见TXLiveSDKTypeDef.h
+/**
+ * 直播事件通知
+ * @param EvtID 参见 TXLiveSDKEventDef.h
+ * @param param 参见 TXLiveSDKTypeDef.h
  */
--(void) onNetStatus:(NSDictionary*) param;
-
+- (void)onPlayEvent:(int)EvtID withParam:(NSDictionary *)param;
 
 /**
- * SDK内部使用:通知FLV、VOD底层播放器初始化成功,FLV、VOD可以发起网络连接了;
- * 底层播放器在SDK逻辑线程异步初始化,如果FLV、VOD先发起网络连接,会出现网络连接成功且收到音视频包后,底层播放器还没有初始化的问题
- *
+ * 网络状态通知
+ * @param param 参见 TXLiveSDKTypeDef.h
  */
-@optional
--(void) onRecvConnectNofity;
+- (void)onNetStatus:(NSDictionary *)param;
 
 @end
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayer.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayer.h
index dbd8824..cc634f4 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayer.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayer.h
@@ -1,13 +1,14 @@
-//
-//  TXLivePlayer.h
-//  LiteAV
-//
-//  Created by alderzhang on 2017/5/24.
-//  Copyright © 2017年 Tencent. All rights reserved.
-//
+/*
+ *
+ * Module:   TXLivePlayer @ TXLiteAVSDK
+ *
+ * Function: 腾讯云直播播放器
+ *
+ * Version: <:Version:>
+ */
 
 #import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
+#import "TXLiveSDKTypeDef.h"
 #import "TXLivePlayListener.h"
 #import "TXLivePlayConfig.h"
 #import "TXVideoCustomProcessDelegate.h"
@@ -15,187 +16,321 @@
 #import "TXLiveRecordListener.h"
 #import "TXAudioRawDataDelegate.h"
 
+/**
+ * 支持的直播和点播类型
+ *
+ * @note 新版本的点播 SDK,推荐参考 TXVodPlayer.h
+ */
 typedef NS_ENUM(NSInteger, TX_Enum_PlayType) {
-    /// RTMP直播
+    /// RTMP 直播
     PLAY_TYPE_LIVE_RTMP = 0,
-    /// FLV直播
-    PLAY_TYPE_LIVE_FLV,
-    /// FLV点播
-    PLAY_TYPE_VOD_FLV,
-    /// HLS点播
-    PLAY_TYPE_VOD_HLS,
+    /// FLV 直播
+    PLAY_TYPE_LIVE_FLV = 1,
+#if TARGET_OS_IPHONE
+    /// FLV 点播
+    PLAY_TYPE_VOD_FLV = 2,
+    /// HLS 点播
+    PLAY_TYPE_VOD_HLS = 3,
     /// MP4点播
-    PLAY_TYPE_VOD_MP4,
-    /// RTMP直播加速播放
-    PLAY_TYPE_LIVE_RTMP_ACC,
+    PLAY_TYPE_VOD_MP4 = 4,
+#endif
+    /// RTMP 直播加速播放
+    PLAY_TYPE_LIVE_RTMP_ACC = 5,
+#if TARGET_OS_IPHONE
     /// 本地视频文件
-    PLAY_TYPE_LOCAL_VIDEO,
+    PLAY_TYPE_LOCAL_VIDEO = 6,
+#endif
 };
 
-/// 直播播放器
+
+/**
+ * 视频播放器
+ *
+ * 主要负责将直播流的音视频画面进行解码和本地渲染,包含如下技术特点:
+ * - 针对腾讯云的拉流地址,可使用低延时拉流,实现直播连麦等相关场景。
+ * - 针对腾讯云的拉流地址,可使用直播时移功能,能够实现直播观看与时移观看的无缝切换。
+ * - 支持自定义的音视频数据处理,让您可以根据项目需要处理直播流中的音视频数据后,进行渲染以及播放。
+ */
 @interface TXLivePlayer : NSObject
-/// 播放器回调
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (一)SDK 基础函数
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name SDK 基础函数
+/// @{
+/**
+ * 1.1 设置播放回调,见 “TXLivePlayListener.h” 文件中的详细定义
+ */
 @property(nonatomic, weak) id <TXLivePlayListener> delegate;
-/// 视频处理回调
+
+/**
+ * 1.2 设置视频处理回调,见 “TXVideoCustomProcessDelegate.h” 文件中的详细定义
+ */
 @property(nonatomic, weak) id <TXVideoCustomProcessDelegate> videoProcessDelegate;
-/// 音频处理回调
+
+/**
+ * 1.3 设置音频处理回调,见 “TXAudioRawDataDelegate.h” 文件中的详细定义
+ */
 @property(nonatomic, weak) id <TXAudioRawDataDelegate> audioRawDataDelegate;
-/// 是否硬件加速
+
+/**
+ * 1.4 是否开启硬件加速,默认值:NO
+ */
 @property(nonatomic, assign) BOOL enableHWAcceleration;
-/// 直播配置参数
+
+/**
+ * 1.5 设置 TXLivePlayConfig 播放配置项,见 “TXLivePlayConfig.h” 文件中的详细定义
+ */
 @property(nonatomic, copy) TXLivePlayConfig *config;
 
-/// 短视频录制回调
-@property (nonatomic, weak)   id<TXLiveRecordListener>   recordDelegate;
-/// startPlay后是否立即播放,默认YES。点播有效
+
+#if TARGET_OS_IPHONE
+/**
+ * 1.6 设置短视频录制回调,见 “TXLiveRecordListener.h” 文件中的详细定义
+ */
+@property (nonatomic, weak) id<TXLiveRecordListener> recordDelegate;
+
+/**
+ * 1.7 startPlay 后是否立即播放,默认 YES,只有点播有效
+ */
 @property BOOL isAutoPlay;
+#endif
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (二)播放基础接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 播放基础接口
+/// @{
 /**
- * 创建Video渲染Widget,该控件承载着视频内容的展示。
- * @param frame Widget在父view中的rc
- * @param view  父view
- * @param idx   Widget在父view上的层级位置
- * @discussion 变更历史:1.5.2版本将参数frame废弃,设置此参数无效,控件大小与参数view的大小保持一致,如需修改控件的大小及位置,请调整父view的大小及位置. 参考文档:https://www.qcloud.com/doc/api/258/4736#step-3.3A-.E7.BB.91.E5.AE.9A.E6.B8.B2.E6.9F.93.E7.95.8C.E9.9D.A2
+ * 2.1 创建 Video 渲染 View,该控件承载着视频内容的展示。
+ *
+ * 变更历史:1.5.2版本将参数 frame 废弃,设置此参数无效,控件大小与参数 view 的大小保持一致,如需修改控件的大小及位置,请调整父 view 的大小及位置。 参考文档:[绑定渲染界面](https://www.qcloud.com/doc/api/258/4736#step-3.3A-.E7.BB.91.E5.AE.9A.E6.B8.B2.E6.9F.93.E7.95.8C.E9.9D.A2)
+ *
+ * @param frame Widget 在父 view 中的 frame
+ * @param view  父 view
+ * @param idx   Widget 在父 view 上 的层级位置
  */
-- (void)setupVideoWidget:(CGRect)frame containView:(UIView *)view insertIndex:(unsigned int)idx;
+- (void)setupVideoWidget:(CGRect)frame containView:(TXView *)view insertIndex:(unsigned int)idx;
 
-/* 修改VideoWidget frame
- * 变更历史:1.5.2版本将此方法废弃,调用此方法无效,如需修改控件的大小及位置,请调整父view的大小及位置
+/*
+ * 修改 VideoWidget frame
+ * 变更历史:1.5.2版本将此方法废弃,调用此方法无效,如需修改控件的大小及位置,请调整父 view 的大小及位置
  * 参考文档:https://www.qcloud.com/doc/api/258/4736#step-3.3A-.E7.BB.91.E5.AE.9A.E6.B8.B2.E6.9F.93.E7.95.8C.E9.9D.A2
  */
 //- (void)resetVideoWidgetFrame:(CGRect)frame;
 
 /**
- * 移除Video渲染Widget
+ * 2.2 移除 Video 渲染 Widget
  */
 - (void)removeVideoWidget;
 
-
 /**
- * 启动从指定URL播放RTMP音视频流
- * @param url 完整的URL(如果播放的是本地视频文件,这里传本地视频文件的完整路径)
- * @prarm playType 播放类型
- * @return 0 = OK
+ * 2.3 启动从指定 URL 播放 RTMP 音视频流
+ *
+ * @param url 完整的 URL(如果播放的是本地视频文件,这里传本地视频文件的完整路径)
+ * @param playType 播放类型
+ * @return 0表示成功,其它为失败
  */
 - (int)startPlay:(NSString *)url type:(TX_Enum_PlayType)playType;
 
 /**
- * 停止播放音视频流
- * @return 0 = OK
+ * 2.4 停止播放音视频流
+ *
+ * @return 0:成功;其它:失败
  */
 - (int)stopPlay;
 
 /**
- * 是否正在播放
+ * 2.5 是否正在播放
+ *
  * @return YES 拉流中,NO 没有拉流
  */
-- (bool)isPlaying;
+- (BOOL)isPlaying;
 
 /**
- * 暂停播放
- * @discussion 适用于点播,直播(此接口会暂停数据拉流,不会销毁播放器,暂停后,播放器会显示最后一帧数据图像)
+ * 2.6 暂停播放
+ *
+ * 适用于点播,直播(此接口会暂停数据拉流,不会销毁播放器,暂停后,播放器会显示最后一帧数据图像)
  */
 - (void)pause;
 
 /**
- * 继续播放,适用于点播,直播
+ * 2.6 继续播放,适用于点播,直播
  */
 - (void)resume;
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (三)视频相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 视频相关接口
+/// @{
 /**
- * 直播时移准备,拉取该直播流的起始播放时间。
- @ @param domain 时移域名
- * @param bizId 流bizId
- * @return 0 = OK,-1 = 无播放地址,-2 = appId未配置
- * @discussion 使用时移功能需在播放开始后调用此方法,否者时移失败。时移的使用请参考文档 https://cloud.tencent.com/document/product/266/9237
- * @warning 非腾讯云直播地址不能时移
+ * 3.1 设置画面的方向
+ *
+ * @param rotation 方向
+ * @see TX_Enum_Type_HomeOrientation
  */
-- (int)prepareLiveSeek:(NSString*)domain bizId:(NSInteger)bizId;
+- (void)setRenderRotation:(TX_Enum_Type_HomeOrientation)rotation;
 
 /**
- * 停止时移播放,返回直播
- * @return 0 = OK
+ * 3.2 设置画面的裁剪模式
+ *
+ * @param renderMode 裁剪
+ * @see TX_Enum_Type_RenderMode
  */
-- (int)resumeLive;
+- (void)setRenderMode:(TX_Enum_Type_RenderMode)renderMode;
 
+#if TARGET_OS_IPHONE
 /**
- * 播放跳转到音视频流某个时间
- * @param time 流时间,单位为秒
- * @return 0 = OK
+ * 3.3 截屏
+ *
+ * @param snapshotCompletionBlock 通过回调返回当前图像
  */
-- (int)seek:(float)time;
+- (void)snapshot:(void (^)(TXImage *))snapshotCompletionBlock;
+#endif
+
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (四)音频相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
 
+/// @name 音频相关接口
+/// @{
 /**
- * 设置画面的方向
- * @param rotation 方向
- * @see TX_Enum_Type_HomeOrientation
+ * 4.1 设置静音
  */
-- (void)setRenderRotation:(TX_Enum_Type_HomeOrientation)rotation;
+- (void)setMute:(BOOL)bEnable;
 
+#if TARGET_OS_IPHONE
 /**
- * 设置画面的裁剪模式
- * @param renderMode 裁剪
- * @see TX_Enum_Type_RenderMode
+ * 4.2 设置声音播放模式(切换扬声器,听筒)
+ * @param audioRoute 声音播放模式
  */
-- (void)setRenderMode:(TX_Enum_Type_RenderMode)renderMode;
++ (void)setAudioRoute:(TXAudioRouteType)audioRoute;
+#endif
+
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (五)直播时移相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
 
+/// @name 直播时移相关接口
+/// @{
 /**
- * 设置静音
+ * 5.1 直播时移准备,拉取该直播流的起始播放时间。
+ *
+ * 使用时移功能需在播放开始后调用此方法,否则时移失败。时移的使用请参考文档 [超级播放器](https://cloud.tencent.com/document/product/881/20208#.E6.97.B6.E7.A7.BB.E6.92.AD.E6.94.BE)
+ *
+ * @warning 非腾讯云直播地址不能时移
+ *
+ * @param domain 时移域名
+ * @param bizId 流 bizId
+ *
+ * @return 0:OK;-1:无播放地址;-2:appId 未配置
  */
-- (void)setMute:(BOOL)bEnable;
+- (int)prepareLiveSeek:(NSString*)domain bizId:(NSInteger)bizId;
 
-/*视频录制*/
 /**
- * 开始录制短视频
- * @param recordType 参见TXRecordType定义
- * @return  0 成功;-1 正在录制短视频;-2 videoRecorder初始化失败;
+ * 5.2 停止时移播放,返回直播
+ *
+ * @return 0:成功;其它:失败
  */
--(int) startRecord:(TXRecordType)recordType;
+- (int)resumeLive;
 
-/*
- * 结束录制短视频
- * @return 0 成功;-1 不存在录制任务; -2 videoRecorder未初始化;
+#if TARGET_OS_IPHONE
+/**
+ * 5.3 播放跳转到音视频流某个时间
+ * @param time 流时间,单位为秒
+ * @return 0:成功;其它:失败
  */
--(int) stopRecord;
+- (int)seek:(float)time;
+#endif
 
-/*
- * 截屏
- * @param snapshotCompletionBlock 通过回调返回当前图像
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (六)视频录制相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 视频录制相关接口
+/// @{
+#if TARGET_OS_IPHONE
+/**
+ * 6.1 开始录制短视频
+ *
+ * @param recordType 参见 TXRecordType 定义
+ * @return 0:成功;1:正在录制短视频;-2:videoRecorder 初始化失败。
  */
-- (void)snapshot:(void (^)(UIImage *))snapshotCompletionBlock;
+- (int)startRecord:(TXRecordType)recordType;
 
 /**
- * 设置播放速率
- * @param rate 正常速度为1.0;小于为慢速;大于为快速。最大建议不超过2.0
+ * 6.2 结束录制短视频
+ *
+ * @return 0:成功;1:不存在录制任务;-2:videoRecorder 未初始化。
  */
-- (void)setRate:(float)rate;
+- (int)stopRecord;
 
 /**
- * 设置状态浮层view在渲染view上的边距
- * @prarm margin 边距
+ * 6.3 设置播放速率
+ *
+ * @param rate 正常速度为1.0;小于为慢速;大于为快速。最大建议不超过2.0
  */
-- (void)setLogViewMargin:(UIEdgeInsets)margin;
+- (void)setRate:(float)rate;
+#endif
+
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (七)更多实用接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 更多实用接口
+/// @{
 /**
- * 是否显示播放状态统计及事件消息浮层view
- * @prarm isShow 是否显示
+ * 7.1 设置状态浮层 view 在渲染 view 上的边距
+ *
+ * @param margin 边距
  */
-- (void)showVideoDebugLog:(BOOL)isShow;
+- (void)setLogViewMargin:(TXEdgeInsets)margin;
 
 /**
- * 设置声音播放模式(切换扬声器,听筒)
- * @prarm audioRoute 声音播放模式
+ * 7.2 是否显示播放状态统计及事件消息浮层 view
+ *
+ * @param isShow 是否显示
  */
-+ (void)setAudioRoute:(TXAudioRouteType)audioRoute;
+- (void)showVideoDebugLog:(BOOL)isShow;
 
 /**
- * flv直播无缝切换
+ * 7.3 FLV 直播无缝切换
  *
- * 参  数:
- *      playUrl 播放地址
- * @return 0 = OK
- * @warning playUrl必须是当前播放直播流的不同清晰度,切换到无关流地址可能会失败
+ * @param playUrl 播放地址
+ * @return 0:成功;其它:失败
+ * @warning playUrl 必须是当前播放直播流的不同清晰度,切换到无关流地址可能会失败
  */
 - (int)switchStream:(NSString *)playUrl;
 @end
+
+/// @}
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePush.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePush.h
index 2a1bc28..c3efc38 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePush.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePush.h
@@ -1,406 +1,675 @@
-//
-//  TXLivePush.h
-//  LiteAV
-//
-//  Created by alderzhang on 2017/5/24.
-//  Copyright © 2017年 Tencent. All rights reserved.
-//
+/*
+ * Module:   TXLivePusher @ TXLiteAVSDK
+ * 
+ * Function: 腾讯云直播推流用 RTMP SDK
+ *
+ *
+ * Version: <:Version:>
+ */
 
 #import <Foundation/Foundation.h>
 #import <VideoToolbox/VideoToolbox.h>
-#import <UIKit/UIKit.h>
+#if TARGET_OS_IPHONE
 #import <ReplayKit/ReplayKit.h>
+#endif
 #import "TXLivePushConfig.h"
 #import "TXLivePushListener.h"
 #import "TXVideoCustomProcessDelegate.h"
 #import "TXAudioCustomProcessDelegate.h"
 #import "TXLiveRecordListener.h"
+#import "TXLiveSDKTypeDef.h"
+#import <AVFoundation/AVFoundation.h>
 
-///推流器
+/**
+ * 直播推流类
+ *
+ * 主要负责将本地的音视频画面进行编码和 RTMP 推送,包含如下技术特点:
+ *
+ * - 针对腾讯云的推流地址,会采用 QUIC 协议进行加速,配合改进后的 BBR2 带宽测算方案,可以最大限度的利用主播的上行带宽,降低直播卡顿率。
+ * - 内嵌套的 Qos 流量控制技术具备上行网络自适应能力,可以根据主播端网络的具体情况实时调节音视频数据量。
+ * - 内嵌多套美颜磨皮算法(自然&光滑)和多款色彩空间滤镜(支持自定义滤镜),可以根据需要自行选择。
+ * - 商业版包含了基于优图 AI 人脸识别技术的大眼、瘦脸、隆鼻以及动效挂架,只需要购买**优图 License**就可以零成本集成。
+ * - 支持自定义的音视频采集和渲染,让您可以根据项目需要选择自己的音视频数据源。
+ */
 @interface TXLivePush : NSObject
-///推流参数配置
-///@see TXLivePushConfig
-@property(nonatomic, copy) TXLivePushConfig *config;
-
-///推流回调
-///@see TXLivePushListener;
-@property(nonatomic, weak) id <TXLivePushListener> delegate;
-
-///视频自定义处理回调
-///@see TXVideoCustomProcessDelegate
-@property(nonatomic, weak) id <TXVideoCustomProcessDelegate> videoProcessDelegate;
-
-///音频自定义处理回调
-///@see TXAudioCustomProcessDelegate
-@property(nonatomic, weak) id <TXAudioCustomProcessDelegate> audioProcessDelegate;
-
-///推流端录制回调
-///@see TXLiveRecordListener
-@property (nonatomic, weak) id<TXLiveRecordListener>   recordDelegate;
 
-///当前推流URL
-@property(nonatomic, readonly) NSString *rtmpURL;
 
-///当前是否为前置摄像头
-@property(nonatomic, readonly) BOOL frontCamera;
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (一)SDK 基础函数
+//
+/////////////////////////////////////////////////////////////////////////////////
 
+/// @name SDK 基础函数
+/// @{
 /**
- 初始化推流器
- @param config 推流参数配置
+ * 1.1 创建 TXLivePusher 示例
+ *
+ * @param config TXLivePushConfig 推流配置项,见 “TXLivePushConfig.h” 文件中的详细定义
  */
 - (id)initWithConfig:(TXLivePushConfig *)config;
 
 /**
- 启动到指定URL地址推流
- @param rtmpURL 推流地址
- @return 0:启动成功   -1:出错
+ * 1.2 设置 TXLivePushConfig 推流配置项,见 “TXLivePushConfig.h” 文件中的详细定义
  */
-- (int)startPush:(NSString *)rtmpURL;
+@property(nonatomic,copy) TXLivePushConfig *config;
 
 /**
-停止推流
+ * 1.3 设置推流回调接口,见“TXLivePushListener.h” 文件中的详细定义
  */
-- (void)stopPush;
+@property(nonatomic,weak) id <TXLivePushListener> delegate;
+
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (二)推流基础接口
+//
+/////////////////////////////////////////////////////////////////////////////////
 
+/// @name 推流基础接口
+/// @{
 /**
- 后台推送默认数据,在切后台或打断场合需要调用
- 当从前台切到后台的时候,调用pausePush会推配置里设置的图片(TXLivePushConfig.pauseImg)
- 
- pauseImg  设置后台推流的默认图片,不设置为默认黑色背景
- pauseFps  设置后台推流帧率,最小值为5,最大值为20,默认10
- pauseTime 设置后台推流持续时长,单位秒,默认300秒
- 具体使用方式请参考demo里面的示例
- @note 暂停推流,后台视频发送TXLivePushConfig里面设置的图像,音频会继续录制声音发送, 如果不需要录制声音,需要再调下setMute接口
- */
-- (void)pausePush;
+ * 2.1 启动摄像头预览
+ *
+ * 启动预览后并不会立刻开始 RTMP 推流,需要调用 startPush() 才能真正开始推流。
+ *
+ * @param view 承载视频画面的控件
+ */ 
+- (int)startPreview:(TXView *)view;
 
-///恢复推流, 当从后台回到前台的时候,调用resumePush恢复推送camera采集的数据
-- (void)resumePush;
+/**
+ * 2.2 停止摄像头预览
+ */ 
+- (void)stopPreview;
 
+/**
+ * 2.3 启动 RTMP 推流
+ *
+ * 针对腾讯云的推流地址,会采用 QUIC 协议进行加速,配合改进后的 BBR2 带宽测算方案,可以最大限度的利用主播的上行带宽,降低直播卡顿率。
+ *
+ * @param rtmpURL 推流地址,参考文档:[获取推流地址](https://cloud.tencent.com/document/product/267/32720 )。
+ *
+ * @note -5 返回码代表 license 校验失败,TXLivePusher 需要 [license](https://cloud.tencent.com/document/product/454/34750) 校验通过才能工作。
+ * 
+ * @return 0: 启动成功;-1: 启动失败;-5:license 校验失败。
+ */ 
+- (int)startPush:(NSString *)rtmpURL;
 
 /**
- 是否正常推流
- @return YES: 推流中,NO: 没有推流
+ * 2.4 停止 RTMP 推流
  */
-- (bool)isPublishing;
+- (void)stopPush;
 
 /**
- *视频录制
- *开始录制短视频,开始推流后才能启动录制
- @note 1,录制过程中请勿动态切换分辨率和软硬编,可能导致生成的视频异常
-       2,目前仅支持 企业版 和 Professional SDK版本,其他版本调用无效
- @param videoPath 视频录制后存储路径
- @return
- 返回值 | 涵义
- ------|------
-  0    | 成功
- -1    | videoPath 为nil
- -2    | 上次录制未结束,请先stopRecord
- -3    | 推流未开始
-
+ * 2.5 暂停摄像头采集并进入垫片推流状态
+ *
+ * SDK 会暂时停止摄像头采集,并使用 TXLivePushConfig.pauseImg 中指定的图片作为替代图像进行推流,也就是所谓的“垫片”。
+ * 这项功能常用于 App 被切到后台运行的场景,尤其是在 iOS 系统中,当 App 切到后台以后,操作系统不会再允许该 App 继续使用摄像头。
+ * 此时就可以通过调用 pausePush() 进入垫片状态。
+ *
+ * 对于绝大多数推流服务器而言,如果超过一定时间不推视频数据,服务器会断开当前的推流链接。
+ *
+ * 在 TXLivePushConfig 您可以指定:
+ * - pauseImg  设置后台推流的默认图片,不设置为默认黑色背景。
+ * - pauseFps  设置后台推流帧率,最小值为5,最大值为20,默认10。
+ * - pauseTime 设置后台推流持续时长,单位秒,默认300秒。
+ *
+ * @note 请注意调用顺序:startPush => ( pausePush => resumePush ) => stopPush(),错误的调用顺序会导致 SDK 表现异常。
  */
--(int) startRecord:(NSString *)videoPath;
+- (void)pausePush;
 
 /**
- 结束录制短视频,停止推流后,如果视频还在录制中,SDK内部会自动结束录制
- @return 0: 成功 -1:不存在录制任务;
+ * 2.6 恢复摄像头采集并结束垫片推流状态
  */
--(int) stopRecord;
+- (void)resumePush;
 
 /**
- 开始推流画面的预览
- @param view 预览控件所在的父控件
- @return 0 (异步处理,返回总是0)
+ * 2.7 查询是否正在推流
+ *
+ * @return YES:推流中;NO:没有在推流。
  */
-- (int)startPreview:(UIView *)view;
+- (bool)isPublishing;
 
 /**
- 停止预览
+ * 2.8 获取当前推流的 RTMP 地址
  */
-- (void)stopPreview;
+@property(nonatomic,readonly) NSString *rtmpURL;
+
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (三)视频相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 视频相关接口
+/// @{
+	
+/**
+ * 3.1 设置视频编码质量
+ *
+ * 推荐设置:秀场直播 quality:HIGH_DEFINITION;adjustBitrate:NO;adjustResolution:NO。
+ * 参考文档:[设定清晰度](https://cloud.tencent.com/document/product/454/7879#step-4.3A-.E8.AE.BE.E5.AE.9A.E6.B8.85.E6.99.B0.E5.BA.A6)
+ *
+ * @param quality            画质类型(标清,高清,超高清)
+ * @param adjustBitrate      动态码率开关
+ * @param adjustResolution   动态切分辨率开关
+ *
+ * @note adjustResolution 早期被引入是为了让 TXLivePusher 能够满足视频通话这一封闭场景下的一些需求,现已不推荐使用。
+ *       如果您有视频通话的需求,可以使用我们专门为视频通话打造的 [TRTC](https://cloud.tencent.com/product/trtc) 服务。
+ *       由于目前很多 H5 播放器不支持分辨率动态变化,所以开启分辨率自适应以后,会导致 H5 播放端和录制文件的很多兼容问题。
+ */
+- (void)setVideoQuality:(TX_Enum_Type_VideoQuality)quality
+          adjustBitrate:(BOOL) adjustBitrate
+       adjustResolution:(BOOL) adjustResolution;
+	   
 /**
- 切换前后摄像头
+ * 3.2 切换前后摄像头(iOS)
  */
 - (int)switchCamera;
-
-/** 设置镜像
- @param isMirror YES:播放端看到的是镜像画面   NO:播放端看到的是非镜像画面
- @note 推流端前置摄像头默认看到的是镜像画面,后置摄像头默认看到的是非镜像画面
+#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+/**
+ * 3.2 选择摄像头(macOS)
  */
-- (void)setMirror:(BOOL)isMirror;
-
+- (void)selectCamera:(AVCaptureDevice *)camera;
+#endif
 
 /**
- 设置美颜 和 美白 效果级别
- @param beautyStyle TX_Enum_Type_BeautyStyle
- @param beautyLevel     : 美颜级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
- @param whitenessLevel  : 美白级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
- @param ruddinessLevel  : 红润级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
- @see TX_Enum_Type_BeautyStyle
-*/
-- (void)setBeautyStyle:(TX_Enum_Type_BeautyStyle)beautyStyle beautyLevel:(float)beautyLevel whitenessLevel:(float)whitenessLevel ruddinessLevel:(float)ruddinessLevel;
+ * 3.3 查询当前是否为前置摄像头
+ */
+@property(nonatomic,readonly) BOOL frontCamera;
 
 /**
- 设置大眼级别(企业版有效,其它版本设置此参数无效)
- @param eyeScaleLevel 大眼级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
+ * 3.4 设置视频镜像效果
+ *
+ * 由于前置摄像头采集的画面是取自手机的观察视角,如果将采集到的画面直接展示给观众,是完全没有问题的。
+ * 但如果将采集到的画面也直接显示给主播,则会跟主播照镜子时的体验完全相反,会让主播感觉到很奇怪。
+ * 因此,SDK 会默认开启本地摄像头预览画面的镜像效果,让主播直播时跟照镜子时保持一个体验效果。
+ * 
+ * setMirror 所影响的则是观众端看到的视频效果,如果想要保持观众端看到的效果跟主播端保持一致,需要开启镜像;
+ * 如果想要让观众端看到正常的未经处理过的画面(比如主播弹吉他的时候有类似需求),则可以关闭镜像。
+ *
+ * @note 仅当前使用前置摄像头时,setMirror 接口才会生效,在使用后置摄像头时此接口无效。
+ *
+ * @param isMirror YES:播放端看到的是镜像画面;NO:播放端看到的是非镜像画面。
  */
-- (void)setEyeScaleLevel:(float)eyeScaleLevel;
+- (void)setMirror:(BOOL)isMirror;
 
-/**设置瘦脸级别(企业版有效,其它版本设置此参数无效)
- @param faceScaleLevel 瘦脸级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
+/**
+ * 3.5 设置本地摄像头预览画面的旋转方向
+ *
+ * 该接口仅能够改变主播本地预览画面的方向,而不会改变观众端的画面效果。
+ * 如果希望改变观众端看到的视频画面的方向,比如原来是540x960,希望变成960x540,则可以通过设置 TXLivePushConfig 中的 homeOrientation 来实现。
+ *
+ * <pre>
+ * // 竖屏推流(HOME 键在下)
+ * _config.homeOrientation = HOME_ORIENTATION_DOWN;
+ * [_txLivePublisher setConfig:_config];
+ * [_txLivePublisher setRenderRotation:0];
+ * // 横屏推流(HOME 键在右)
+ * _config.homeOrientation = HOME_ORIENTATION_RIGHT;
+ * [_txLivePublisher setConfig:_config];
+ * [_txLivePublisher setRenderRotation:90];
+ * </pre>
+ * 
+ * @param rotation 取值为0 ,90,180,270(其他值无效),表示主播端摄像头预览视频的顺时针旋转角度。
  */
-- (void)setFaceScaleLevel:(float)faceScaleLevel;
+- (void)setRenderRotation:(int)rotation;
 
 /**
- 设置指定素材滤镜特效
- @param image 指定素材,即颜色查找表图片。
- @note 一定要用png格式!!!demo用到的滤镜查找表图片位于TXLiteAVDemo/Resource/Beauty/filter/FilterResource.bundle中
+ * 3.6 打开后置摄像头旁边的闪关灯
+ *
+ * 此操作对于前置摄像头是无效的,因为绝大多数手机都没有给前置摄像头配置闪光灯。
+ *
+ * @param bEnable YES:打开;NO:关闭。
+ * @return YES:打开成功;NO:打开失败。
  */
-- (void)setFilter:(UIImage *)image;
+- (BOOL)toggleTorch:(BOOL)bEnable;
 
 /**
- 设置滤镜效果程度
- @prarm specialValue 从0到1,越大滤镜效果越明显,默认取值0.5
+ * 3.7 调整摄像头的焦距
+ *
+ * @param distance 焦距大小,取值范围1 - 5,默认值建议设置为1即可。
+ * @note 当 distance 为1的时候为最远视角(正常镜头),当为5的时候为最近视角(放大镜头),最大值不要超过5,超过5后画面会模糊不清。
  */
-- (void)setSpecialRatio:(float)specialValue;
-
-
+- (void)setZoom:(CGFloat)distance;
+ 
 /**
- 设置V脸(企业版有效,其它版本设置此参数无效)
- @param faceVLevel V脸级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
+ * 3.8 设置手动对焦区域
+ *
+ * SDK 默认使用摄像头自动对焦功能,您也可以通过 TXLivePushConfig 中的 touchFocus 选项关闭自动对焦,改用手动对焦。
+ * 改用手动对焦之后,需要由主播自己点击摄像头预览画面上的某个区域,来手动指导摄像头对焦。
+ * 
+ * @note 早期 SDK 版本仅仅提供了手动和自动对焦的选择开关,并不支持设置对焦位置,3.0 版本以后,手动对焦的接口才开放出来。
  */
-- (void)setFaceVLevel:(float)faceVLevel;
+- (void)setFocusPosition:(CGPoint)touchPoint;
+
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (四)美颜相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 美颜相关接口
+/// @{
 
 /**
- 设置下巴拉伸或收缩(企业版有效,其它版本设置此参数无效)
- @param chinLevel 下巴拉伸或收缩级别取值范围 -9 ~ 9; 0 表示关闭 -9收缩 ~ 9拉伸。
+ * 4.1 设置美颜级别和美白级别
+ *
+ * @param beautyStyle 使用哪种磨皮算法,支持光滑和自然两种,光滑风格磨皮更加明显,适合秀场直播。见 “TXLiveSDKTypeDef.h” 中的 TX_Enum_Type_BeautyStyle 定义。
+ * @param beautyLevel 美颜级别,取值范围0 - 9; 0表示关闭,1 - 9值越大,效果越明显。
+ * @param whitenessLevel 美白级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
+ * @param ruddinessLevel 红润级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  */
-- (void)setChinLevel:(float)chinLevel;
+- (void)setBeautyStyle:(TX_Enum_Type_BeautyStyle)beautyStyle 
+           beautyLevel:(float)beautyLevel 
+		whitenessLevel:(float)whitenessLevel 
+		ruddinessLevel:(float)ruddinessLevel;
 
 /**
- 设置短脸(企业版有效,其它版本设置此参数无效)
- @param faceShortlevel 短脸级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
+ * 4.2 设置指定素材滤镜特效
+ *
+ * @note 滤镜图片一定要用 png 格式,demo 用到的滤镜查找表图片位于 TXLiteAVDemo/Resource/Beauty/filter/FilterResource.bundle 中
  */
-- (void)setFaceShortLevel:(float)faceShortlevel;
+- (void)setFilter:(TXImage *)image;
 
 /**
- 设置瘦鼻(企业版有效,其它版本设置此参数无效)
- @param noseSlimLevel 瘦鼻级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
+ * 4.3 设置滤镜浓度
+ *
+ * 在美女秀场等应用场景里,滤镜浓度的要求会比较高,以便更加突显主播的差异。
+ * 我们默认的滤镜浓度是0.5,如果您觉得滤镜效果不明显,可以使用下面的接口进行调节。
+ *
+ * @param specialValue 取值范围0 - 1的浮点型数字,取值越大滤镜效果越明显,默认取值0.5。
  */
-- (void)setNoseSlimLevel:(float)noseSlimLevel;
+- (void)setSpecialRatio:(float)specialValue;
 
+/// @}
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (五)商用企业版美颜和动效挂件
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 商用企业版美颜和动效挂件
+/// @{
 
 /**
- 打开闪关灯。
- @param bEnable YES: 打开 NO: 关闭
- @return YES: 打开成功 NO: 打开失败
+ * 5.1 设置大眼级别(商用企业版有效,其它版本设置此参数无效)
+ *
+ * @param eyeScaleLevel 大眼级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  */
-- (BOOL)toggleTorch:(BOOL)bEnable;
+- (void)setEyeScaleLevel:(float)eyeScaleLevel;
 
 /**
- 设置本地视频方向
- @param rotation  取值为 0 , 90, 180, 270(其他值无效) 表示推流端本地视频向右旋转的角度
- @note 横竖屏推流,activty旋转可能会改变本地视频流方向,可以设置此参数让本地视频回到正方向,具体请参考demo设置,如果demo里面的设置满足不了您的业务需求,请自行setRenderRotation到自己想要的方向(tips:推流端setRenderRotation不会改变观众端的视频方向)
+ * 5.2 设置瘦脸级别(商用企业版有效,其它版本设置此参数无效)
+ *
+ *  @param faceScaleLevel 瘦脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  */
-- (void)setRenderRotation:(int)rotation;
+- (void)setFaceScaleLevel:(float)faceScaleLevel;
 
+/**
+ * 5.3 设置 V 脸级别(商用企业版有效,其它版本设置此参数无效)
+ *
+ * @param faceVLevel V 脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
+ */
+- (void)setFaceVLevel:(float)faceVLevel;
 
 /**
- 设置静音
- @param bEnable YES: 静音 NO:关闭静音
+ * 5.4 设置下巴拉伸或收缩(商用企业版有效,其它版本设置此参数无效)
+ *
+ * @param chinLevel 下巴拉伸或收缩级别,取值范围 -9 - 9;0 表示关闭,小于0表示收缩,大于0表示拉伸。
  */
-- (void)setMute:(BOOL)bEnable;
+- (void)setChinLevel:(float)chinLevel;
 
 /**
- 发送客户自定义的音频PCM数据
- @param data 要发送的PCM数据
- @param len 数据长度
- @note 目前SDK只支持16位采样的PCM编码;如果是单声道,请保证传入的PCM长度为2048;如果是双声道,请保证传入的PCM长度为4096
+ * 5.5 设置短脸级别(商用企业版有效,其它版本设置此参数无效)
+ *
+ * @param faceShortlevel 短脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  */
-- (void)sendCustomPCMData:(unsigned char *)data len:(unsigned int)len;
+- (void)setFaceShortLevel:(float)faceShortlevel;
 
 /**
-  发送自定义的SampleBuffer,内部有简单的帧率控制,发太快会自动丢帧;超时则会重发最后一帧
-  @param sampleBuffer 要发送的视频sampleBuffer
-  @note autoSampleBufferSize优先级高于sampleBufferSize @see TXLivePushConfig
-  @property sampleBufferSize,设置输出分辨率,如果此分辨率不等于sampleBuffer中数据分辨率则会对视频数据做缩放
-  @property autoSampleBufferSize,输出分辨率等于输入分辨率,即sampleBuffer中数据的实际分辨率
+ * 5.6 设置瘦鼻级别(商用企业版有效,其它版本设置此参数无效)
+ *
+ * @param noseSlimLevel 瘦鼻级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  */
-- (void)sendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer;
+- (void)setNoseSlimLevel:(float)noseSlimLevel;
 
 /**
- Replaykit发送自定义音频包
- @prama sampleBuffer 声音sampleBuffer
- @prama sampleBufferType  RPSampleBufferTypeAudioApp or RPSampleBufferTypeAudioMic,
- @note 当两种声音都发送时,内部做混音;否则只发送一路声音
+ * 5.7 设置绿幕背景视频(商用企业版有效,其它版本设置此参数无效)
+ *
+ * 此处的绿幕功能并非智能抠背,它需要被拍摄者的背后有一块绿色的幕布来辅助产生特效
+ *
+ * @param file 视频文件路径。支持 MP4;nil 表示关闭特效。
  */
-- (void)sendAudioSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType;
+- (void)setGreenScreenFile:(NSURL *)file;
 
 /**
- Replaykit发送静音包,在InApp类型录制切后台场合时需要调用。系统屏幕录制不需要
- @param muted YES: 静音 NO:关闭静音
+ * 5.8 选择使用哪一款 AI 动效挂件(商用企业版有效,其它版本设置此参数无效)
+ *
+ * @param tmplName 动效名称
+ * @param tmplDir 动效所在目录
  */
-- (void)setSendAudioSampleBufferMuted:(BOOL)muted;
+- (void)selectMotionTmpl:(NSString *)tmplName inDir:(NSString *)tmplDir;
 
 /**
- 调用手动对焦功能
- @param touchPoint 为传入的对焦点位置
- @note 早期SDK版本手动对焦功能是由SDK内部触发,现在把手动对焦的接口开放出来,客户可以根据自己需求触发 ,如果客户调用这个接口,SDK内部触发对焦的逻辑将会停止,避免重复触发对焦逻辑
+ * 5.9 设置动效静音(商用企业版有效,其它版本设置此参数无效)
+ *
+ * 有些挂件本身会有声音特效,通过此 API 可以关闭这些特效播放时所带的声音效果。
+ *
+ * @param motionMute YES:静音;NO:不静音。
  */
-- (void)setFocusPosition:(CGPoint)touchPoint;
+- (void)setMotionMute:(BOOL)motionMute;
+
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (六)音频相关接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 音频相关接口
+/// @{
 
 /**
-调整焦距
-@param distance 焦距大小, 取值范围 1~5
-@note 当为1的时候为最远视角(正常镜头),当为5的时候为最近视角(放大镜头),这里最大值推荐为5,超过5后视频数据会变得模糊不清
-*/
-- (void)setZoom:(CGFloat)distance;
+ * 6.1 开启静音
+ * 
+ * 开启静音后,SDK 并不会继续采集麦克风的声音,但是会用非常低(5kbps 左右)的码率推送伪静音数据,
+ * 这样做的目的是为了兼容 H5 上的 video 标签,并让录制出来的 MP4 文件有更好的兼容性。
+ *
+ * @param bEnable 是否开启静音。
+ */
+- (void)setMute:(BOOL)bEnable;
 
 /**
- 播放背景音乐, 用于混音处理,背景音与Mic采集到的人声混合
- @param path 本地音乐文件路径
- @return YES:成功 NO:失败
+ * 6.2 播放背景音乐
+ *
+ * SDK 会将背景音乐和麦克风采集的声音进行混合并一起推送到云端。
+ *
+ * @param path 本地音乐文件路径
+ * @return YES:成功;NO:失败。
  */
 - (BOOL)playBGM:(NSString *)path;
 
 /**
- 播放背景音乐
- @param path 本地音乐文件路径
- @param beginNotify 音乐播放开始的回调通知
- @param progressNotify 音乐播放的进度通知,单位毫秒
- @param completeNotify 音乐播放结束的回调通知
- @return YES:成功 NO:失败
-
+ * 6.3 播放背景音乐(高级版本)
+ *
+ * @param path 本地音乐文件路径
+ * @param beginNotify 播放开始的回调
+ * @param progressNotify 播放进度回调
+ * @param completeNotify 播放完毕回调
+ * @return YES:成功;NO:失败。
  */
 - (BOOL)   playBGM:(NSString *)path
    withBeginNotify:(void (^)(NSInteger errCode))beginNotify
-withProgressNotify:(void (^)(NSInteger progressMS, NSInteger durationMS))progressNotify
+withProgressNotify:(void (^)(NSInteger progressMS,NSInteger durationMS))progressNotify
  andCompleteNotify:(void (^)(NSInteger errCode))completeNotify;
 
 /**
- 停止播放背景音乐
- @return YES:成功 NO:失败
+ * 6.4 停止播放背景音乐
  */
 - (BOOL)stopBGM;
 
 /**
- 暂停播放背景音乐
- @return YES:成功 NO:失败
+ * 6.5 暂停播放背景音乐
  */
 - (BOOL)pauseBGM;
 
 /**
- 继续播放背景音乐
- @return YES:成功 NO:失败
+ * 6.6 继续播放背景音乐
  */
 - (BOOL)resumeBGM;
 
 /**
- 获取音乐文件总时长,单位毫秒
- @param path 音乐文件路径,如果path为空,那么返回当前正在播放的music时长
+ * 6.7 获取背景音乐文件的总时长,单位是毫秒
+ * @param path 音乐文件路径,如果 path 为空,那么返回当前正在播放的背景音乐的时长。
  */
 - (int)getMusicDuration:(NSString *)path;
 
 /**
- 设置麦克风的音量大小,播放背景音乐混音时使用,用来控制麦克风音量大小
- @param volume 音量大小,1为正常音量,建议值为0~2,如果需要调大音量可以设置更大的值
- @return YES:成功 NO:失败
+ * 6.8 设置混音时背景音乐的音量大小,仅在播放背景音乐混音时使用。
+ * 
+ * @param volume 音量大小,1为正常音量,建议值为0 - 2之间的浮点数,如果需要增益可以设置更大的值。
+ * @return YES:成功;NO:失败。
+ */
+- (BOOL)setBGMVolume:(float)volume;
+ 
+/**
+ * 6.9 设置混音时麦克风音量大小,仅在播放背景音乐混音时使用。
+ * 
+ * @param volume 音量大小,1为正常音量,建议值为0 - 2之间的浮点数,如果需要增益可以设置更大的值。
+ * @return YES:成功;NO:失败。
  */
 - (BOOL)setMicVolume:(float)volume;
-
+ 
 /**
- 设置背景音乐的音量大小,播放背景音乐混音时使用,用来控制背景音音量大小
- @param volume 音量大小,1为正常音量,建议值为0~2,如果需要调大背景音量可以设置更大的值
- @return YES:成功 NO:失败
+ * 6.10 调整背景音乐的音调高低
+ *
+ * @param pitch 音调,默认值是0.0f,范围是-1 - 1之间的浮点数;
+ * @return YES:成功;NO:失败。
  */
-- (BOOL)setBGMVolume:(float)volume;
+- (BOOL)setBGMPitch:(float)pitch;
 
 /**
- 设置背景音的变声类型
- @param pitch 音调, 默认值是0.f;范围是 [-1,1];
- @return YES:成功 NO:失败
+ * 6.11 设置混响效果
+ *
+ * @param reverbType 混响类型,详见 “TXLiveSDKTypeDef.h” 中的 TXReverbType 定义。
+ * @return YES:成功;NO:失败。
  */
-- (BOOL)setBgmPitch:(float)pitch;
+- (BOOL)setReverbType:(TXReverbType)reverbType;
+ 
+/**
+ * 6.12 设置变声类型
+ *
+ * @param voiceChangerType 混响类型,详见 “TXLiveSDKTypeDef.h” 中的 voiceChangerType 定义。
+ * @return YES:成功;NO:失败。
+ */
+- (BOOL)setVoiceChangerType:(TXVoiceChangerType)voiceChangerType;
 
 /**
-设置视频质量
-@param quality            画质类型(标清,高清,超高清)
-@param adjustBitrate      动态码率开关
-@param adjustResolution   动态切分辨率开关
+ * 6.13 指定背景音乐的播放位置
+ *
+ * @note 请尽量避免频繁地调用该接口,因为该接口可能会再次读写 BGM 文件,耗时稍高。
+ *       例如:当配合进度条使用时,请在进度条拖动完毕的回调中调用,而避免在拖动过程中实时调用。
+ *
+ * @param position 背景音乐的播放位置,单位ms。
+ *
+ * @return 结果是否成功,YES:成功;NO:失败。
  */
-- (void)setVideoQuality:(TX_Enum_Type_VideoQuality)quality
-          adjustBitrate:(BOOL) adjustBitrate
-       adjustResolution:(BOOL) adjustResolution;
+- (BOOL)setBGMPosition:(NSInteger)position;
+
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                    (七)本地录制和截图
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 本地录制接口
+/// @{
 
 /**
- 设置混响效果
- @param reverbType :混响类型 ,详见 TXReverbType
- @return YES:成功 NO:失败
- @see TXReverbType
+ * 7.1 录制回调接口,详见 "TXLiveRecordTypeDef.h" 中的 TXLiveRecordListener 定义。
  */
-- (BOOL)setReverbType:(TXReverbType)reverbType;
+@property (nonatomic,weak) id<TXLiveRecordListener>  recordDelegate;
+
+/**
+ * 7.2 开始录制短视频
+ *
+ * @note 1. 只有启动推流后才能开始录制,非推流状态下启动录制无效。
+ *       2. 出于安装包体积的考虑,仅专业版和商用企业版两个版本的 LiteAVSDK 支持该功能,直播精简版仅定义了接口但并未实现。
+ *       3. 录制过程中请勿动态切换分辨率和软硬编,会有很大概率导致生成的视频异常。
+ *
+ * @param videoPath 视频录制后存储路径
+ * @return 0:成功;-1:videoPath 为空;-2:上次录制尚未结束,请先调用 stopRecord;-3:推流尚未开始。
+ */ 
+-(int) startRecord:(NSString *)videoPath;
 
 /**
- 设置变声类型
- @param voiceChangerType 变声类型, 详见 TXVoiceChangerType
- @return YES:成功 NO:失败
- @see TXVoiceChangerType
+ * 7.3 结束录制短视频,当停止推流后,如果视频还在录制中,SDK 内部会自动结束录制。
+ *  @return 0:成功; -1:不存在录制任务。
  */
-- (BOOL)setVoiceChangerType:(TXVoiceChangerType)voiceChangerType;
+-(int) stopRecord;
+ 
+/**
+ * 7.4 推流过程中本地截图
+ * 
+ * @param snapshotCompletionBlock 截图完成的回调函数
+ */
+- (void)snapshot:(void (^)(TXImage *))snapshotCompletionBlock;
+
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                     (八)自定义采集和处理
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+/// @name 自定义采集和处理
+/// @{
+/**
+ * 8.1 自定义视频采集,向 SDK 发送自己采集的视频数据。
+ * 
+ * 在自定义视频采集模式下,SDK 不再继续从摄像头采集图像,只保留编码和发送能力,您需要定时地发送自己采集的 SampleBuffer。
+ * 要开启自定义视频采集,需要完成如下两个步骤:
+ *
+ * 1. 开启自定义采集:给 TXLivePushConfig 中的 customModeType 属性增加 CUSTOM_MODE_VIDEO_CAPTURE 选项,代表开启自定义视频采集。
+ * 2. 设定视频分辨率:将 TXLivePushConfig 中的 sampleBufferSize 属性设置为您期望的分辨率。
+ *   如果期望编码分辨率跟采集分辨率一致,可以不设置 sampleBufferSize 属性,而是将 autoSampleBufferSize 设置为 YES。
+ *
+ * @note 1. 开启自定义视频采集后,即无需再调用 startPreview 来开启摄像头采集。
+ *       2. SDK 内部有简单的帧率控制,如果发送太快时 SDK 会自动丢弃多余的帧率;如果超时不发送,SDK 会不断地重复发送的最后一帧。
+ *
+ * @param sampleBuffer 向 SDK 发送的 SampleBuffer
+ */
+- (void)sendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer;
 
 /**
- 设置绿幕文件。仅企业版有效
- @param file 绿幕文件路径。支持mp4; nil 关闭绿幕
+ * 8.2 自定义音频采集,向 SDK 发送自己采集的音频 PCM 数据。
+ * 
+ * 在自定义音频采集模式下,SDK 不再继续从麦克风采集声音,只保留编码和发送能力,您需要定时地发送自己采集的声音数据(PCM 格式)
+ * 要开启自定义音频采集,需要完成如下两个步骤:
+ *
+ * 1. 开启自定义采集:给 TXLivePushConfig 中的 customModeType 属性增加 CUSTOM_MODE_AUDIO_CAPTURE 选项,代表开启自定义音频采集。
+ * 2. 设定音频采样率:将 TXLivePushConfig 中的 audioSampleRate 属性设置为您期望的音频采样率,audioChannels 设置为期望的声道数,默认值:1(单声道)。
+ *
+ * @note SDK 对每次传入的 PCM buffer 大小有严格要求,每一个采样点要求是16位宽。
+ *       如果是单声道,请保证传入的 PCM 长度为2048;如果是双声道,请保证传入的 PCM 长度为4096。
+ *
+ * @param data 要发送的 PCM buffer
+ * @param len 数据长度
  */
-- (void)setGreenScreenFile:(NSURL *)file;
+- (void)sendCustomPCMData:(unsigned char *)data len:(unsigned int)len;
 
 /**
- 选择动效。仅企业版有效
- @param tmplName 动效名称
- @param tmplDir 动效所在目录
+ * 8.3 自定义音频采集,向 SDK 发送自己采集的音频数据。
+ *
+ * 相比于 sendCustomPCMData,sendAudioSampleBuffer 主要用于 ReplayKit 录屏推流的场景。
+ * 要开启自定义音频采集,需要完成如下两个步骤:
+ *
+ * 1. 开启自定义采集:给 TXLivePushConfig 中的 customModeType 属性增加 CUSTOM_MODE_AUDIO_CAPTURE 选项,代表开启自定义音频采集。
+ * 2. 设定音频采样率:将 TXLivePushConfig 中的 audioSampleRate 属性设置为您期望的音频采样率,audioChannels 设置为期望的声道数,默认值:1(单声道)。
+ *
+ * 当使用 ReplayKit 做录屏推流时,iOS 的 ReplayKit 接口会回调两种类型的声音数据:
+ * - RPSampleBufferTypeAudioApp,也就是要录制的 App 的声音数据。
+ * - RPSampleBufferTypeAudioMic,也就是要录制的麦克风的声音数据。
+ *
+ * 当您通过 sendAudioSampleBuffer 向 SDK 调用各种类型的声音数据时,SDK 内部会进行混流,否则只会发送一路的声音数据。
+ *
+ * @param sampleBuffer 采集到的声音 sampleBuffer
+ * @param sampleBufferType RPSampleBufferTypeAudioApp:ReplayKit 采集到的 App 声音;RPSampleBufferTypeAudioMic:ReplayKit 采集到的麦克风声音。
+ */
+#if TARGET_OS_IPHONE
+- (void)sendAudioSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType;
+#endif
+
+/**
+ * 8.4 要求 SDK 发送静音数据
+ *
+ * 该函数配合 sendAudioSampleBuffer 使用,在 InApp 类型录制切后台场合时需要调用,系统屏幕录制不需要。
+ *
+ * @param muted YES;静音;NO;关闭静音。
  */
-- (void)selectMotionTmpl:(NSString *)tmplName inDir:(NSString *)tmplDir;
+- (void)setSendAudioSampleBufferMuted:(BOOL)muted;
 
 /**
- 设置动效静音 (企业版有效,其它版本设置此参数无效)
- @param motionMute YES 静音, NO 不静音
+ * 8.5 自定义视频处理回调
+ *
+ * 自定义视频采集和自定义视频处理不能同时开启,与自定义视频采集不同,自定义视频处理依然是由 SDK 采集摄像头的画面,
+ * 但 SDK 会通过 TXVideoCustomProcessDelegate(见“TXVideoCustomProcessDelegate.h”)回调将数据回调给您的 App 进行二次加工。
+ *
+ * 如果要开启自定义视频处理,需要给 TXLivePushConfig 中的 customModeType 属性增加 CUSTOM_MODE_VIDEO_PREPROCESS 选项。
+ *
+ * @note 出于性能和稳定性考虑,一般不建议开启此特性。
  */
-- (void)setMotionMute:(BOOL)motionMute;
+@property(nonatomic,weak) id <TXVideoCustomProcessDelegate> videoProcessDelegate;
+ 
+/**
+ * 8.5 自定义视频处理回调
+ *
+ * 自定义音频采集和自定义音频处理不能同时开启,与自定义音频采集不同,自定义音频处理依然是由 SDK 采集麦克风的声音,
+ * 但 SDK 会通过 TXAudioCustomProcessDelegate(见“TXAudioCustomProcessDelegate.h”)回调将数据回调给您的 App 进行二次加工。
+ *
+ * 如果要开启自定义音频处理,需要给 TXLivePushConfig 中的 customModeType 属性增加 CUSTOM_MODE_AUDIO_PREPROCESS 选项。
+ *
+ * @note 出于性能和稳定性考虑,一般不建议开启此特性。
+ */
+@property(nonatomic,weak) id <TXAudioCustomProcessDelegate> audioProcessDelegate;
 
+/// @}
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      (九)更多实用接口
+//
+/////////////////////////////////////////////////////////////////////////////////
+ 
+/// @name 更多实用接口
+/// @{ 
+ 
 /**
- 设置状态浮层view在渲染view上的边距
- @param margin logView在渲染view上的边距
+ * 9.1 发送 SEI 消息,播放端(TXLivePlayer)通过 onPlayEvent(EVT_PLAY_GET_MESSAGE)来接收该消息。
+ *
+ * 本接口是将数据直接塞入视频数据头中,因此不能太大(几个字节比较合适),一般常用于塞入自定义时间戳等信息。
+ * 
+ * @note - sendMessage 已经不推荐使用,会导致 H5 播放器产生兼容性问题,请使用 sendMessageEx。
+ *       - 若您使用过 sendMessage,不推荐立刻升级到 sendMessageEx。
+ *       - sendMessageEx 发送消息给旧版本的5.0 及以前的 SDK 版本时,消息会无法正确解析,但播放不受影响。
  */
-- (void)setLogViewMargin:(UIEdgeInsets)margin;
+- (BOOL)sendMessageEx:(NSData *) data;
+- (void)sendMessage:(NSData *) data;
 
 /**
- 是否显示播放状态统计及事件消息浮层view
- @param isShow YES:显示 NO:隐藏
+ * 9.2 打开包含视频状态信息的调试浮层,该浮层一般用于 SDK 调试期间,外发版本请不要打开。
  */
 - (void)showVideoDebugLog:(BOOL)isShow;
 
 /**
- 推流截图
- @params snapshotCompletionBlock 截图完成回调
+ * 9.3 设置调试浮层在视频 view 上的位置。
  */
-- (void)snapshot:(void (^)(UIImage *))snapshotCompletionBlock;
+- (void)setLogViewMargin:(TXEdgeInsets)margin;
 
 /**
- 发送消息,播放端通过 onPlayEvent(PLAY_EVT_GET_MESSAGE)接收
- @param data 要发送的消息数据
- @note 1. 若您使用过该接口,切换到sendMessageEx接口时会有兼容性问题: sendMessageEx发送消息给旧版本的SDK(5.0及5.0以下)时,消息会无法正确解析,但播放不受影响。
- @note 2. 若您未使用过该接口,请直接使用sendMessageEx
+ * 9.4 设置推流是否覆盖时钟
+ *
+ * 开始后可以在 TXLivePlayer 中的仪表盘显示画面延迟时间
+ * @note 需要双方的时间相同才能获取准确的延迟时间
  */
-- (void)sendMessage:(NSData *) data;
+- (void)setEnableClockOverlay:(BOOL)enabled;
 
 /**
- 发送消息,播放端通过 onPlayEvent(PLAY_EVT_GET_MESSAGE)接收
- @param data 要发送的消息数据
- @note 1. 消息大小不允许超过2K
- @note 2. 该接口发送消息,能够解决旧的sendMessage接口会导致在iOS上无法播放对应的HLS流的问题
+ * 9.5 获取当前推流画面是否有覆盖时钟
  */
-- (BOOL)sendMessageEx:(NSData *) data;
+- (BOOL)enableClockOverlay;
+
+/// @}
+
 @end
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePushConfig.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePushConfig.h
index 49e049d..a70ed42 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePushConfig.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePushConfig.h
@@ -1,151 +1,215 @@
+/*
+ * Module:   TXLivePushConfig @ TXLiteAVSDK
+ * 
+ * Function: 腾讯云直播推流用 RTMP SDK 的参数配置模块
+ *
+ * Version: <:Version:>
+ */
+
 #import <Foundation/NSObject.h>
+#if TARGET_OS_IPHONE
 #import <UIKit/UIKit.h>
+#endif
 #import "TXLiveSDKTypeDef.h"
 
-#define CUSTOM_MODE_AUDIO_CAPTURE                   0X001   //客户自定义音频采集
-#define CUSTOM_MODE_VIDEO_CAPTURE                   0X002   //客户自定义视频采集
-#define CUSTOM_MODE_AUDIO_PREPROCESS                0X004   //客户自定义音频预处理逻辑
-#define CUSTOM_MODE_VIDEO_PREPROCESS                0X008   //客户自定义视频预处理逻辑
-
+#define CUSTOM_MODE_AUDIO_CAPTURE                   0X001   ///> 客户自定义音频采集
+#define CUSTOM_MODE_VIDEO_CAPTURE                   0X002   ///> 客户自定义视频采集
+#define CUSTOM_MODE_AUDIO_PREPROCESS                0X004   ///> 客户自定义音频处理
+#define CUSTOM_MODE_VIDEO_PREPROCESS                0X008   ///> 客户自定义视频处理
 
-#define TXRTMPSDK_LINKMIC_STREAMTYPE_MAIN           1       //连麦模式下主播的流
-#define TXRTMPSDK_LINKMIC_STREAMTYPE_SUB            2       //连麦模式下连麦观众的流
+#define TXRTMPSDK_LINKMIC_STREAMTYPE_MAIN           1       ///> 连麦模式下主播的流
+#define TXRTMPSDK_LINKMIC_STREAMTYPE_SUB            2       ///> 连麦模式下连麦观众的流
 
+/**
+ * 腾讯云直播推流用 RTMP SDK 的参数配置模块
+ *
+ * 主要负责 TXLivePusher 对应的参数设置,**其中绝大多数设置项在推流开始之后再设置是无效的**。
+ */
 @interface TXLivePushConfig : NSObject
 
-/// 客户自定义模式
-@property(nonatomic, assign) int customModeType;
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      常用设置项
+//
+/////////////////////////////////////////////////////////////////////////////////
 
-/// 美颜强度 0 ~ 9, 默认值为0
-@property(nonatomic, assign) float beautyFilterDepth;
+///【字段含义】HOME 键所在方向,用来切换横竖屏推流,默认值:HOME_ORIENTATION_DOWN(竖屏推流)。
+///【特别说明】常用的还有 HOME_ORIENTATION_RIGHT 和 HOME_ORIENTATION_LEFT,也就是横屏推流。
+///            改变该字段的设置以后,本地摄像头的预览画面方向也会发生改变,请调用 TXLivePush 的 setRenderRotation 进行矫正。
+@property(nonatomic, assign) int homeOrientation;
 
-/// 美白强度:0 ~ 9, 默认值为0
-@property(nonatomic, assign) float whiteningFilterDepth;
+///【字段含义】是否允许点击曝光聚焦,默认值:NO。
+@property(nonatomic, assign) BOOL touchFocus;
 
-/// 开启硬件加速, iOS系统版本>8.0 默认开启
-@property(nonatomic, assign) BOOL enableHWAcceleration;
+///【字段含义】是否允许双指手势放大预览画面,默认值:NO。
+@property(nonatomic, assign) BOOL enableZoom;
 
-/**
- home键所在方向,用来切换横竖屏推流, 默认值为HOME_ORIENTATION_DOWN
- 
- 1. homeOrientation=HOME_ORIENTATION_RIGHT Home键在下竖屏推流
- 2. homeOrientation=HOME_ORIENTATION_RIGHT Home键在右横屏推流
- 3. homeOrientation=HOME_ORIENTATION_LEFT  Home键在左横屏推流
- @note 此参数的设置可能会改变推流端本地视频流方向,此参数设置后,请调用TXLivePush 里的setRenderRotation 来修正推流端本地视频流方向,具体请参考demo设置
- @see TX_Enum_Type_HomeOrientation
-*/
-@property(nonatomic, assign) int homeOrientation;
+///【字段含义】水印图片,设为 nil 等同于关闭水印。
+@property(nonatomic, retain) TXImage *watermark;
 
-/// 视频采集帧率, 默认值为15
-@property(nonatomic, assign) int videoFPS;
+///【字段含义】水印图片位置,水印大小为图片实际大小,待废弃,推荐使用 watermarkNormalization。
+@property(nonatomic, assign) CGPoint watermarkPos;
+
+///【字段含义】水印图片相对于推流分辨率的归一化坐标
+///【推荐取值】假设推流分辨率为:540x960,该字段设置为:(0.1,0.1,0.1,0.0),那么水印的实际像素坐标为:
+///           (540 × 0.1, 960 × 0.1, 水印宽度 × 0.1,水印高度会被自动计算)
+///【特别说明】watermarkNormalization 的优先级高于 watermarkPos。 
+@property(nonatomic, assign) CGRect watermarkNormalization;
 
-/// 视频分辨率, 默认值为VIDEO_RESOLUTION_TYPE_360_640
-/// @see TX_Enum_Type_VideoResolution
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      垫片推流(App 切后台)
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+///【字段含义】垫片推流的最大持续时间,单位秒,默认值:300s。
+///【特别说明】调用 TXLivePusher 的 pausePush() 接口,会暂停摄像头采集并进入垫片推流状态,如果该状态一直保持,
+///          可能会消耗主播过多的手机流量,本字段用于指定垫片推流的最大持续时间,超过后即断开与云服务器的连接。
+@property(nonatomic, assign) int pauseTime;
+
+///【字段含义】垫片推流时的视频帧率,取值范围3 - 8,默认值:5 FPS。
+@property(nonatomic, assign) int pauseFps;
+
+///【字段含义】垫片推流时使用的图片素材,最大尺寸不能超过1920 x 1920。
+@property(nonatomic, retain) TXImage *pauseImg;
+
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      音视频编码参数
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+///【字段含义】视频分辨率,默认值:VIDEO_RESOLUTION_TYPE_360_640。
+///【特别说明】推荐直接使用 TXLivePusher 的 setVideoQuality 接口调整画面质量。
 @property(nonatomic, assign) int videoResolution;
 
-/// 视频固定码率,默认值为700
-@property(nonatomic, assign) int videoBitratePIN;
+///【字段含义】视频帧率,默认值:15FPS。
+///【特别说明】推荐直接使用 TXLivePusher 的 setVideoQuality 接口调整画面质量。
+@property(nonatomic, assign) int videoFPS;
 
-/// 视频编码GOP,单位second 秒, 默认值为3
+///【字段含义】视频编码 GOP,也就是常说的关键帧间隔,单位:秒;默认值:3s。
+///【特别说明】推荐直接使用 TXLivePusher 的 setVideoQuality 接口调整画面质量。
 @property(nonatomic, assign) int videoEncodeGop;
 
-/// 音频采样率 , 取值设置为 枚举值 TX_Enum_Type_AudioSampleRate,也可直接设置为对应的采样率 ,比如 audioSampleRate = AUDIO_SAMPLE_RATE_48000 或  audioSampleRate = 48000, 默认值为AUDIO_SAMPLE_RATE_48000
-///@see TX_Enum_Type_AudioSampleRate
-@property(nonatomic, assign) int audioSampleRate;
-
-/// 音频声道数, 默认值为1
-@property(nonatomic, assign) int audioChannels;
+///【字段含义】视频编码的平均码率,默认值:700kbps。
+///【特别说明】推荐直接使用 TXLivePusher 的 setVideoQuality 接口调整画面质量。
+@property(nonatomic, assign) int videoBitratePIN;
 
-/// 码率自适应: SDK会根据网络情况自动调节视频码率, 调节范围在 (videoBitrateMin - videoBitrateMax), 默认值为NO
+///【字段含义】码率自适应开关,开启后,SDK 会根据网络情况自动调节视频码率,调节范围在 (videoBitrateMin - videoBitrateMax)。
+///【推荐取值】NO
 @property(nonatomic, assign) BOOL enableAutoBitrate;
 
-/// 码率自适应: SDK会根据网络情况自动调节视频码率,同时自动调整分辨率, 默认值为AUTO_ADJUST_BITRATE_STRATEGY_1
-///@see TX_Enum_Type_AutoAdjustStrategy
+///【字段含义】码率自适应算法
+///【推荐取值】AUTO_ADJUST_BITRATE_STRATEGY_1
 @property(nonatomic, assign) int autoAdjustStrategy;
 
-/// 视频最大码率,仅当enableAutoBitrate = YES时有效, 默认值为1000
+///【字段含义】码率自适应 - 最高码率,默认值:1000kpbs
 @property(nonatomic, assign) int videoBitrateMax;
 
-/// 视频最小码率,仅当enableAutoBitrate = YES时有效, 默认值为400
+///【字段含义】码率自适应 - 最低码率,默认值:400kpbs
+///【推荐取值】不要设置太低的数值,过低的码率会导致运动画面出现大面积马赛克。
 @property(nonatomic, assign) int videoBitrateMin;
 
-/// 噪音抑制, 默认值为YES
-@property(nonatomic, assign) BOOL enableNAS;
+///【字段含义】音频采样率,采样率越高音质越好,对于有音乐的场景请使用48000的采样率。
+///【推荐取值】AUDIO_SAMPLE_RATE_48000
+@property(nonatomic, assign) int audioSampleRate;
 
-/// 是否前置camera, 默认值为YES
-@property(nonatomic, assign) BOOL frontCamera;
+///【字段含义】音频声道数,默认值:1(单声道)。
+@property(nonatomic, assign) int audioChannels;
 
-/// 是否允许点击曝光聚焦, 默认为YES
-@property(nonatomic, assign) BOOL touchFocus;
+///【字段含义】是否开启耳返特效
+///【推荐取值】NO
+///【特别说明】开启耳返会消耗更多的 CPU,只有在主播带耳机唱歌的时候才有必要开启此功能。
+@property(nonatomic, assign) BOOL enableAudioPreview;
 
-/// 是否允许双指手势放大预览画面,默认为NO
-@property(nonatomic, assign) BOOL enableZoom;
+///【字段含义】是否为纯音频推流
+///【推荐取值】NO
+///【特别说明】如果希望实现纯音频推流的功能,需要在推流前就设置该参数,否则播放端会有兼容性问题。
+@property(nonatomic, assign) BOOL enablePureAudioPush;
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      网络相关参数
+//
+/////////////////////////////////////////////////////////////////////////////////
 
-///推流器连接重试次数 : 最小值为 1, 最大值为 10, 默认值为 3
+///【字段含义】推流遭遇网络连接断开时 SDK 默认重试的次数,取值范围1 - 10,默认值:3。
 @property(nonatomic, assign) int connectRetryCount;
 
-///推流器连接重试间隔 : 单位秒,最小值为 3, 最大值为 30, 默认值为 3
+///【字段含义】网络重连的时间间隔,单位秒,取值范围3 - 30,默认值:3。
 @property(nonatomic, assign) int connectRetryInterval;
 
-///设置水印图片. 设为nil等同于关闭水印
-@property(nonatomic, retain) UIImage *watermark;
-
-///设置水印图片位置,水印大小为图片实际大小
-@property(nonatomic, assign) CGPoint watermarkPos;
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      自定义采集和处理
+//
+/////////////////////////////////////////////////////////////////////////////////
 
-/**
- 水印相对于推流分辨率的归一化坐标,x,y,width,height 取值范围 0~1;height不用设置,sdk内部会根据水印宽高比自动计算height
- 
- eg: 推流分辨率为(540,960) watermarkNormalization设置为(0.1,0.1,0.1,0),水印的实际像素坐标为(540 * 0.1,960 * 0.1,540 * 0.1 ,540 *
-   0.1 * waterMark.size.height / waterMark.size.width)
- @note watermarkNormalization坐标与watermarkPos坐标只能设置一种,如果设置了watermarkNormalization则优先使用归一化坐标
- */
-@property(nonatomic, assign) CGRect watermarkNormalization;
+///【字段含义】自定义采集和自定义处理开关
+///【特别说明】该字段需要使用与运算符进行级联操作(自定义采集和自定义处理不能同时开启):
+///            开启自定义视频采集:_config.customModeType |= CUSTOM_MODE_VIDEO_CAPTURE;
+///            开启自定义音频采集:_config.customModeType |= CUSTOM_MODE_AUDIO_CAPTURE;
+@property(nonatomic, assign) int customModeType;
 
-/**
- 发送自定义CMSampleBuffer的输出分辨率 当设置此属性时,videoResolution自动失效
- @warn 此值设置需与源SampleBuffer的画面比例一致,否则会引起画面变形
- @warn 调用sendVideoSampleBuffer才会使用此值,或者设置autoSampleBufferSize=YES
- */
+///【字段含义】仅开启自定义采集时有效,用于设置编码分辨率。
+///【特别说明】此值设置需与调用 sendVideoSampleBuffer 时传入的 SampleBuffer 的宽高比一致,否则会引起画面变形。
+///            如果指定 autoSampleBufferSize 为 YES,则不需要设置该字段。
 @property(assign) CGSize sampleBufferSize;
 
-/// 设置YES时,调用sendVideoSampleBuffer输出分辨率等于输入分辨率, 默认值为NO
+///【字段含义】仅开启自定义采集时有效,YES 代表编码分辨率等于输入的 SampleBuffer 的分辨率,默认值:NO。
 @property BOOL autoSampleBufferSize;
 
-/// 开启音频硬件加速, 默认值为YES
-@property(nonatomic, assign) BOOL enableAudioAcceleration;
-
-/// 后台推流时长,单位秒,默认300秒
-@property(nonatomic, assign) int pauseTime;
 
-/// 后台推流帧率,最小值为3,最大值为8,默认5
-@property(nonatomic, assign) int pauseFps;
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      专业设置项(慎用)
+//
+/////////////////////////////////////////////////////////////////////////////////
 
-/// 后台推流图片,图片最大尺寸不能超过1920*1920
-@property(nonatomic, retain) UIImage *pauseImg;
+///【字段含义】是否开启噪声抑制(注意:早期版本引入了拼写错误,考虑到接口兼容一直没有修正,正确拼写应该是 ANS)
+///【推荐取值】NO:ANS 对于直播环境中由其它设备外放的音乐是不友好的,通过 playBGM 设置的背景音不受影响。
+///【特别说明】如果直播场景只有主播在说话,ANS 有助于让主播的声音更清楚,但如果主播在吹拉弹唱,ANS 会损伤乐器的声音。
+@property(nonatomic, assign) BOOL enableNAS;
 
-/// 是否开启回声消除, 默认值为YES
+///【字段含义】是否开启回声抑制
+///【推荐取值】NO:回声抑制会启用通话模式音量,导致音质变差,非连麦场景下请不要开启。
+///【特别说明】只有在连麦模式下才需要开启 AEC,如果是普通的直播,将主播的手机和观众的手机放在一起所产生的啸叫是正常现象。
 @property(nonatomic, assign) BOOL enableAEC;
 
-/// 是否开启耳返, 默认值为NO
-@property(nonatomic, assign) BOOL enableAudioPreview;
+///【字段含义】开启视频硬件加速, 默认值:YES。
+@property(nonatomic, assign) BOOL enableHWAcceleration;
 
+///【字段含义】开启音频硬件加速, 默认值:YES。
+@property(nonatomic, assign) BOOL enableAudioAcceleration;
 
-/// 是否纯音频推流, 默认值为NO
-@property(nonatomic, assign) BOOL enablePureAudioPush;
 
 
-/// 是否就近选路, 默认值为YES. 注: 内部有自动处理,可不需要关注此值
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                      待废弃设置项
+//
+/////////////////////////////////////////////////////////////////////////////////
+
+///【字段含义】是否前置摄像头,待废弃,建议直接使用 TXLivePusher 的 frontCamera 属性和 switchCamera 函数。
+@property(nonatomic, assign) BOOL frontCamera;
+
+///【字段含义】美颜强度,待废弃,建议直接使用 TXLivePusher 的 setBeautyStyle 函数。
+@property(nonatomic, assign) float beautyFilterDepth;
+
+///【字段含义】美白强度,待废弃,建议直接使用 TXLivePusher 的 setBeautyStyle 函数。
+@property(nonatomic, assign) float whiteningFilterDepth;
+
+///【字段含义】是否开启就近选路,待废弃,默认值:YES。
 @property(nonatomic, assign) BOOL enableNearestIP;
 
-/**
- RTMP传输通道的类型,取值为枚举值:TX_Enum_Type_RTMPChannel, 默认值为RTMP_CHANNEL_TYPE_AUTO
- @see TX_Enum_Type_RTMPChannel
- 
- RTMP_CHANNEL_TYPE_AUTO          = 0,    //自动
- RTMP_CHANNEL_TYPE_STANDARD      = 1,    //标准的RTMP协议,网络层采用TCP协议
- RTMP_CHANNEL_TYPE_PRIVATE       = 2,    //标准的RTMP协议,网络层采用私有通道传输(在UDP上封装的一套可靠快速的传输通道),能够更好地抵抗网络抖动
- */
-@property (nonatomic, assign) int                       rtmpChannelType;
+///【字段含义】RTMP 传输通道的类型,待废弃,默认值为:AUTO。
+@property (nonatomic, assign) int rtmpChannelType;
+
+///【字段含义】自定义 MetaData
+/// 以 key,value 方式填入 MetaData,value 只支持字符串类型,最多只支持12组数据
+///【特别说明】需要在推流前设置,设置的值放到 RTMP 流的 MetaData 段,播放端收到对应的 MetaData
+@property(nonatomic, copy) NSDictionary *metaData;
 
 @end
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePushListener.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePushListener.h
index 3fbce55..b39e253 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePushListener.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePushListener.h
@@ -1,18 +1,27 @@
+/*
+ * Module:   TXLivePushListener @ TXLiteAVSDK
+ *
+ * Function: 腾讯云直播推流的回调通知
+ *
+ * Version: <:Version:>
+ */
+
 #import <Foundation/Foundation.h>
 
-@protocol  TXLivePushListener <NSObject>
+/// 腾讯云直播推流的回调通知
+@protocol TXLivePushListener <NSObject>
 
 /**
- *
- *
+ * 事件通知
+ * @param EvtID 参见 TXLiveSDKEventDef.h
+ * @param param 参见 TXLiveSDKTypeDef.h
  */
--(void) onPushEvent:(int)EvtID withParam:(NSDictionary*)param;
+- (void)onPushEvent:(int)EvtID withParam:(NSDictionary *)param;
 
 /**
- *
- *
+ * 状态通知
+ * @param param 参见 TXLiveSDKTypeDef.h
  */
--(void) onNetStatus:(NSDictionary*) param;
-
+- (void)onNetStatus:(NSDictionary *)param;
 
 @end
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveRecordListener.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveRecordListener.h
index 8835007..fd86b08 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveRecordListener.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveRecordListener.h
@@ -1,27 +1,25 @@
 #import "TXLiveRecordTypeDef.h"
 
 
-/**********************************************
- **************  短视频录制回调定义  **************
- **********************************************/
+/**
+ * 短视频录制回调定义
+ */
 @protocol TXLiveRecordListener <NSObject>
+@optional
 
 /**
  * 短视频录制进度
  */
-@optional
 -(void) onRecordProgress:(NSInteger)milliSecond;
 
 /**
  * 短视频录制完成
  */
-@optional
 -(void) onRecordComplete:(TXRecordResult*)result;
 
 /**
  * 短视频录制事件通知
  */
-@optional
 -(void) onRecordEvent:(NSDictionary*)evt;
 
 @end
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveRecordTypeDef.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveRecordTypeDef.h
index ad7170f..7159c30 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveRecordTypeDef.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveRecordTypeDef.h
@@ -1,5 +1,5 @@
 #import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
+#import "TXLiveSDKTypeDef.h"
 
 /// PlayRecord 录制类型定义
 typedef NS_ENUM(NSInteger, TXRecordType)
@@ -31,6 +31,6 @@ typedef NS_ENUM(NSInteger, TXRecordResultCode)
 /// 视频文件path
 @property (nonatomic, strong) NSString*             videoPath;      
 /// 视频封面
-@property (nonatomic, strong) UIImage*              coverImage;     
+@property (nonatomic, strong) TXImage*              coverImage;     
 @end
 
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveSDKEventDef.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveSDKEventDef.h
index e5e6aa1..5e422b7 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveSDKEventDef.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveSDKEventDef.h
@@ -1,90 +1,96 @@
 #ifndef __TX_LIVE_SDK_EVENT_DEF_H__
 #define __TX_LIVE_SDK_EVENT_DEF_H__
 
+#include "TXLiteAVCode.h"
+
 enum EventID
 {
-    /**
-     * 推流事件列表
-     */
-/*step2*/    PUSH_EVT_CONNECT_SUCC            =  1001,   // 已经连接推流服务器
-/*step3*/    PUSH_EVT_PUSH_BEGIN              =  1002,   // 已经与服务器握手完毕,开始推流
-/*step1*/    PUSH_EVT_OPEN_CAMERA_SUCC        =  1003,   // 打开摄像头成功
-    		 PUSH_EVT_CHANGE_RESOLUTION		  =  1005,	 // 推流动态调整分辨率
-			 PUSH_EVT_CHANGE_BITRATE          =  1006,   // 推流动态调整码率
-			 PUSH_EVT_FIRST_FRAME_AVAILABLE   =  1007,   // 首帧画面采集完成
-			 PUSH_EVT_START_VIDEO_ENCODER     =  1008,   // 编码器启动
-             PUSH_EVT_ROOM_IN                 =  1018,   // 已经在webrtc房间里面,进房成功后通知
-             PUSH_EVT_ROOM_OUT                =  1019,   // 不在webrtc房间里面,进房失败或者中途退出房间时通知
-             PUSH_EVT_ROOM_USERLIST           =  1020,   // 下发webrtc房间成员列表(不包括自己)
-             PUSH_EVT_ROOM_NEED_REENTER       =  1021,   // WiFi切换到4G会触发断线重连,此时需要重新进入webrtc房间(拉取最优的服务器地址)
+    /**********************************************************************************
+     *                               推流事件列表
+     **********************************************************************************/
+    PUSH_EVT_CONNECT_SUCC                       = EVT_RTMP_PUSH_CONNECT_SUCC,           //> 直播: 已经连接RTMP推流服务器
+    PUSH_EVT_PUSH_BEGIN                         = EVT_RTMP_PUSH_BEGIN,                  //> 直播: 已经与RTMP服务器握手完毕,开始推流
+    PUSH_EVT_OPEN_CAMERA_SUCC                   = EVT_CAMERA_START_SUCC,                //> 打开摄像头成功
+    PUSH_EVT_CHANGE_RESOLUTION		            = EVT_UP_CHANGE_RESOLUTION,	            //> 推流动态调整分辨率
+    PUSH_EVT_CHANGE_BITRATE                     = EVT_UP_CHANGE_BITRATE,                //> 推流动态调整码率
+    PUSH_EVT_FIRST_FRAME_AVAILABLE              = EVT_FIRST_FRAME_AVAILABLE,            //> 首帧画面采集完成
+    PUSH_EVT_START_VIDEO_ENCODER                = EVT_START_VIDEO_ENCODER,              //> 编码器启动
+    PUSH_EVT_ROOM_IN                            = EVT_ROOM_ENTER,                       //> 已经在webrtc房间里面,进房成功后通知
+    PUSH_EVT_ROOM_OUT                           = EVT_ROOM_EXIT,                        //> 不在webrtc房间里面,进房失败或者中途退出房间时通知
+    PUSH_EVT_ROOM_USERLIST                      = EVT_ROOM_USERLIST,                    //> 下发webrtc房间成员列表(不包括自己)
+    PUSH_EVT_ROOM_NEED_REENTER                  = EVT_ROOM_NEED_REENTER,                //> WiFi切换到4G会触发断线重连,此时需要重新进入webrtc房间(拉取最优的服务器地址)
+    
+    PUSH_ERR_OPEN_CAMERA_FAIL                   = ERR_CAMERA_START_FAIL,                //> 打开摄像头失败
+    PUSH_ERR_OPEN_MIC_FAIL                      = ERR_MIC_START_FAIL,                   //> 打开麦克风失败
+    PUSH_ERR_VIDEO_ENCODE_FAIL                  = ERR_VIDEO_ENCODE_FAIL,                //> 视频编码失败
+    PUSH_ERR_AUDIO_ENCODE_FAIL                  = ERR_AUDIO_ENCODE_FAIL,                //> 音频编码失败
+    PUSH_ERR_UNSUPPORTED_RESOLUTION             = ERR_UNSUPPORTED_RESOLUTION,           //> 不支持的视频分辨率
+    PUSH_ERR_UNSUPPORTED_SAMPLERATE             = ERR_UNSUPPORTED_SAMPLERATE,           //> 不支持的音频采样率
+    PUSH_ERR_NET_DISCONNECT                     = ERR_RTMP_PUSH_NET_DISCONNECT,         //> 网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启推流
+    PUSH_ERR_AUDIO_SYSTEM_NOT_WORK              = -1308,                                //> 系统异常,录音失败
+    PUSH_ERR_INVALID_ADDRESS                    = ERR_RTMP_PUSH_INVALID_ADDRESS,        //> 推流地址非法
+    
+    PUSH_WARNING_NET_BUSY                       = WARNING_NET_BUSY,                     //> 网络状况不佳:上行带宽太小,上传数据受阻
+    PUSH_WARNING_RECONNECT                      = WARNING_RTMP_SERVER_RECONNECT,        //> 网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃)
+    PUSH_WARNING_HW_ACCELERATION_FAIL           = WARNING_HW_ENCODER_START_FAIL,        //> 硬编码启动失败,采用软编码
+    PUSH_WARNING_VIDEO_ENCODE_FAIL              = 1104,                                 //> 视频编码失败,非致命错,内部会重启编码器
+    PUSH_WARNING_BEAUTYSURFACE_VIEW_INIT_FAIL   = 1105,                                 //> 视频编码码率异常,警告
+    PUSH_WARNING_VIDEO_ENCODE_BITRATE_OVERFLOW  = 1106,                                 //> 视频编码码率异常,警告
+    PUSH_WARNING_DNS_FAIL                       = WARNING_RTMP_DNS_FAIL,                //> RTMP -DNS解析失败
+    PUSH_WARNING_SEVER_CONN_FAIL                = WARNING_RTMP_SEVER_CONN_FAIL,         //> RTMP服务器连接失败
+    PUSH_WARNING_SHAKE_FAIL                     = WARNING_RTMP_SHAKE_FAIL,              //> RTMP服务器握手失败
+    PUSH_WARNING_SERVER_DISCONNECT	            = WARNING_RTMP_SERVER_BREAK_CONNECT,    //> RTMP服务器主动断开,请检查推流地址的合法性或防盗链有效期
+    PUSH_WARNING_READ_WRITE_FAIL                = WARNING_RTMP_READ_WRITE_FAIL,         //> RTMP 读/写失败,将会断开连接。
 
-	/*step1*/    PUSH_ERR_OPEN_CAMERA_FAIL        = -1301,   // 打开摄像头失败
-/*step1*/    PUSH_ERR_OPEN_MIC_FAIL           = -1302,   // 打开麦克风失败
-/*step3*/    PUSH_ERR_VIDEO_ENCODE_FAIL       = -1303,   // 视频编码失败
-/*step3*/    PUSH_ERR_AUDIO_ENCODE_FAIL       = -1304,   // 音频编码失败
-/*step1*/    PUSH_ERR_UNSUPPORTED_RESOLUTION  = -1305,   // 不支持的视频分辨率
-/*step1*/    PUSH_ERR_UNSUPPORTED_SAMPLERATE  = -1306,   // 不支持的音频采样率
+    /*内部事件*/INNER_EVT_SET_BITRATE_4_SCREEN_CAPTURE = 100001,                         //> 动态设置录屏编码码率
+    /*内部事件*/INNER_EVT_BGM_PLAY_FINISH              = 100002,                         //> BGM播放完毕
     
-/*step2*/    PUSH_ERR_NET_DISCONNECT          = -1307,   // 网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启推流
-/*step1*/    PUSH_ERR_AUDIO_SYSTEM_NOT_WORK   = -1308,   // 系统异常,录音失败
-             PUSH_ERR_INVALID_ADDRESS         = -1313,   // 推流地址非法
     
-/*step3*/    PUSH_WARNING_NET_BUSY            =  1101,   // 网络状况不佳:上行带宽太小,上传数据受阻
-/*step2*/    PUSH_WARNING_RECONNECT           =  1102,   // 网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃)
-/*step3*/    PUSH_WARNING_HW_ACCELERATION_FAIL=  1103,   // 硬编码启动失败,采用软编码
-/*step3*/    PUSH_WARNING_VIDEO_ENCODE_FAIL   =  1104,   // 视频编码失败,非致命错,内部会重启编码器
-/*step3*/    PUSH_WARNING_BEAUTYSURFACE_VIEW_INIT_FAIL   =  1105,   // 视频编码码率异常,警告
-/*step3*/    PUSH_WARNING_VIDEO_ENCODE_BITRATE_OVERFLOW   =  1106,   // 视频编码码率异常,警告
-/*step2*/    PUSH_WARNING_DNS_FAIL            =  3001,   // RTMP -DNS解析失败
-/*step2*/    PUSH_WARNING_SEVER_CONN_FAIL     =  3002,   // RTMP服务器连接失败
-/*step2*/    PUSH_WARNING_SHAKE_FAIL          =  3003,   // RTMP服务器握手失败
-/*step3*/	 PUSH_WARNING_SERVER_DISCONNECT	  =  3004,	 // RTMP服务器主动断开,请检查推流地址的合法性或防盗链有效期
-             PUSH_WARNING_READ_WRITE_FAIL     =  3005,   // RTMP 读/写失败,将会断开连接。
 
-/*内部事件*/    INNER_EVT_SET_BITRATE_4_SCREEN_CAPTURE  = 100001,   // 动态设置录屏编码码率
-/*内部事件*/    INNER_EVT_BGM_PLAY_FINISH  = 100002,   // BGM播放完毕
-    /**
-     * 播放事件列表
-     */
-/*step1*/    PLAY_EVT_CONNECT_SUCC            =  2001,   // 已经连接服务器
-/*step2*/    PLAY_EVT_RTMP_STREAM_BEGIN       =  2002,   // 已经连接服务器,开始拉流
-/*step3*/    PLAY_EVT_RCV_FIRST_I_FRAME       =  2003,   // 渲染首个视频数据包(IDR)
-/*step3*/    PLAY_EVT_PLAY_BEGIN              =  2004,   // 视频播放开始
-/*step3*/    PLAY_EVT_PLAY_PROGRESS           =  2005,   // 视频播放进度
-/*step3*/    PLAY_EVT_PLAY_END                =  2006,   // 视频播放结束
-/*step3*/    PLAY_EVT_PLAY_LOADING			  =  2007,   // 视频播放loading
-	         PLAY_EVT_START_VIDEO_DECODER     =  2008,   // 解码器启动
-             PLAY_EVT_CHANGE_RESOLUTION       =  2009,   // 视频分辨率改变
-             PLAY_EVT_GET_PLAYINFO_SUCC       =  2010,   // 获取点播文件信息成功
-             PLAY_EVT_CHANGE_ROTATION         =  2011,   // MP4视频旋转角度
-             PLAY_EVT_GET_MESSAGE             =  2012,   // 消息事件
-             PLAY_EVT_VOD_PLAY_PREPARED       =  2013,   // 视频加载完毕(点播)
-             PLAY_EVT_VOD_LOADING_END         =  2014,   // loading结束(点播)
-             PLAY_EVT_STREAM_SWITCH_SUCC      =  2015,   // 直播切流完成
+    /**********************************************************************************
+     *                               播放事件列表
+     **********************************************************************************/
+    PLAY_EVT_CONNECT_SUCC                       = EVT_PLAY_LIVE_STREAM_CONNECT_SUCC,    //> 直播,已经连接RTMP拉流服务器
+    PLAY_EVT_RTMP_STREAM_BEGIN                  = EVT_PLAY_LIVE_STREAM_BEGIN,           //> 直播,已经与RTMP服务器握手完毕,开始拉流
+    PLAY_EVT_RCV_FIRST_I_FRAME                  = EVT_RENDER_FIRST_I_FRAME,             //> 渲染首个视频数据包(IDR)
+    PLAY_EVT_PLAY_BEGIN                         = EVT_VIDEO_PLAY_BEGIN,                 //> 视频播放开始
+    PLAY_EVT_PLAY_PROGRESS                      = EVT_VIDEO_PLAY_PROGRESS,              //> 视频播放进度
+    PLAY_EVT_PLAY_END                           = EVT_VIDEO_PLAY_END,                   //> 视频播放结束
+    PLAY_EVT_PLAY_LOADING			            = EVT_VIDEO_PLAY_LOADING,               //> 视频播放loading
+    PLAY_EVT_START_VIDEO_DECODER                = EVT_START_VIDEO_DECODER,              //> 解码器启动
+    PLAY_EVT_CHANGE_RESOLUTION                  = EVT_DOWN_CHANGE_RESOLUTION,           //> 视频分辨率改变
+    PLAY_EVT_GET_PLAYINFO_SUCC                  = EVT_GET_VODFILE_MEDIAINFO_SUCC,       //> 获取点播文件信息成功
+    PLAY_EVT_CHANGE_ROTATION                    = EVT_VIDEO_CHANGE_ROTATION,            //> MP4视频旋转角度
+    PLAY_EVT_GET_MESSAGE                        = EVT_PLAY_GET_MESSAGE,                 //> 消息事件
+    PLAY_EVT_VOD_PLAY_PREPARED                  = EVT_VOD_PLAY_PREPARED,                //> 点播,视频加载完毕
+    PLAY_EVT_VOD_LOADING_END                    = EVT_VOD_PLAY_LOADING_END,             //> 点播,loading结束
+    PLAY_EVT_STREAM_SWITCH_SUCC                 = EVT_PLAY_LIVE_STREAM_SWITCH_SUCC,     //> 直播,切流成功(切流可以播放不同画面大小的视频)
+    PLAY_EVT_GET_METADATA                       = EVT_PLAY_GET_METADATA,                //> TXLivePlayer 接收到视频流中的 metadata 头信息(一条视频流仅触发一次)
+
     
-/*step1*/    PLAY_ERR_NET_DISCONNECT          = -2301,   // 网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放
-             PLAY_ERR_GET_RTMP_ACC_URL_FAIL   = -2302,   // 获取加速拉流地址失败
-             PLAY_ERR_FILE_NOT_FOUND          = -2303,   // 播放文件不存在
-             PLAY_ERR_HEVC_DECODE_FAIL        = -2304,   // H265解码失败
-             PLAY_ERR_HLS_KEY                 = -2305,   // HLS解码key获取失败
-             PLAY_ERR_GET_PLAYINFO_FAIL       = -2306,   // 获取点播文件信息失败
-             PLAY_ERR_STREAM_SWITCH_FAIL      = -2307,   // 切流失败
+    PLAY_ERR_NET_DISCONNECT                     = ERR_PLAY_LIVE_STREAM_NET_DISCONNECT,  //> 直播,网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放
+    PLAY_ERR_GET_RTMP_ACC_URL_FAIL              = ERR_GET_RTMP_ACC_URL_FAIL,            //> 直播,获取加速拉流地址失败
+    PLAY_ERR_FILE_NOT_FOUND                     = ERR_FILE_NOT_FOUND,                   //> 播放文件不存在
+    PLAY_ERR_HEVC_DECODE_FAIL                   = ERR_HEVC_DECODE_FAIL,                 //> H265解码失败
+    PLAY_ERR_HLS_KEY                            = ERR_VOD_DECRYPT_FAIL,                 //> HLS解码key获取失败
+    PLAY_ERR_GET_PLAYINFO_FAIL                  = ERR_GET_VODFILE_MEDIAINFO_FAIL,       //> 获取点播文件信息失败
+    PLAY_ERR_STREAM_SWITCH_FAIL                 = ERR_PLAY_LIVE_STREAM_SWITCH_FAIL,     //> 直播,切流失败(切流可以播放不同画面大小的视频)
     
-/*step3*/    PLAY_WARNING_VIDEO_DECODE_FAIL   =  2101,   // 当前视频帧解码失败
-/*step3*/    PLAY_WARNING_AUDIO_DECODE_FAIL   =  2102,   // 当前音频帧解码失败
-/*step1*/    PLAY_WARNING_RECONNECT           =  2103,   // 网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃)
-/*step3*/    PLAY_WARNING_RECV_DATA_LAG       =  2104,   // 网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀
-/*step3*/    PLAY_WARNING_VIDEO_PLAY_LAG      =  2105,   // 当前视频播放出现卡顿(用户直观感受)
-/*step3*/    PLAY_WARNING_HW_ACCELERATION_FAIL=  2106,   // 硬解启动失败,采用软解
-/*step3*/    PLAY_WARNING_VIDEO_DISCONTINUITY =  2107,   // 当前视频帧不连续,可能丢帧
-/*step3*/    PLAY_WARNING_FIRST_IDR_HW_DECODE_FAIL =  2108,   // 当前流硬解第一个I帧失败,SDK自动切软解
-/*step1*/    PLAY_WARNING_DNS_FAIL            =  3001,   // RTMP -DNS解析失败
-/*step1*/    PLAY_WARNING_SEVER_CONN_FAIL     =  3002,   // RTMP服务器连接失败
-/*step1*/    PLAY_WARNING_SHAKE_FAIL          =  3003,   // RTMP服务器握手失败
-/*step1*/	 PLAY_WARNING_SERVER_DISCONNECT	  =  3004,	 // RTMP服务器主动断开
-             PLAY_WARNING_READ_WRITE_FAIL     =  3005,   // RTMP 读/写失败,将会断开连接。
+    PLAY_WARNING_VIDEO_DECODE_FAIL              = WARNING_VIDEO_FRAME_DECODE_FAIL,      //> 当前视频帧解码失败
+    PLAY_WARNING_AUDIO_DECODE_FAIL              = WARNING_AUDIO_FRAME_DECODE_FAIL,      //> 当前音频帧解码失败
+    PLAY_WARNING_RECONNECT                      = WARNING_LIVE_STREAM_SERVER_RECONNECT, //> 网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃)
+    PLAY_WARNING_RECV_DATA_LAG                  = WARNING_RECV_DATA_LAG,                //> 网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀
+    PLAY_WARNING_VIDEO_PLAY_LAG                 = WARNING_VIDEO_PLAY_LAG,               //> 当前视频播放出现卡顿(用户直观感受)
+    PLAY_WARNING_HW_ACCELERATION_FAIL           = WARNING_HW_DECODER_START_FAIL,        //> 硬解启动失败,采用软解
+    PLAY_WARNING_VIDEO_DISCONTINUITY            = 2107,                                 //> 当前视频帧不连续,可能丢帧
+    PLAY_WARNING_FIRST_IDR_HW_DECODE_FAIL       = WARNING_VIDEO_DECODER_HW_TO_SW,       //> 当前流硬解第一个I帧失败,SDK自动切软解
+    PLAY_WARNING_DNS_FAIL                       = WARNING_RTMP_DNS_FAIL,                //> RTMP -DNS解析失败
+    PLAY_WARNING_SEVER_CONN_FAIL                = WARNING_RTMP_SEVER_CONN_FAIL,         //> RTMP服务器连接失败
+    PLAY_WARNING_SHAKE_FAIL                     = WARNING_RTMP_SHAKE_FAIL,              //> RTMP服务器握手失败
+    PLAY_WARNING_SERVER_DISCONNECT	            = WARNING_RTMP_SERVER_BREAK_CONNECT,    //> RTMP服务器主动断开
+    PLAY_WARNING_READ_WRITE_FAIL                = WARNING_RTMP_READ_WRITE_FAIL,         //> RTMP 读/写失败,将会断开连接。
     
-/* UGC*/     UGC_WRITE_FILE_FAIL              =  4001,   //UGC写文件失败
+    /*UGC*/UGC_WRITE_FILE_FAIL                  = 4001,                                 //> UGC写文件失败
 };
 
 #endif // __TX_LIVE_SDK_TYPE_DEF_H__
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveSDKTypeDef.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveSDKTypeDef.h
index e9f767a..a2765b8 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveSDKTypeDef.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveSDKTypeDef.h
@@ -4,299 +4,326 @@
 #include "TXLiveSDKEventDef.h"
 #import <Foundation/Foundation.h>
 
-/// 屏幕旋转方法
+#if TARGET_OS_IPHONE
+#import <UIKit/UIKit.h>
+typedef UIView TXView;
+typedef UIImage TXImage;
+typedef UIEdgeInsets TXEdgeInsets;
+#elif TARGET_OS_MAC
+#import <AppKit/AppKit.h>
+typedef NSView TXView;
+typedef NSImage TXImage;
+typedef NSEdgeInsets TXEdgeInsets;
+#endif
+
+
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                    【视频相关枚举值定义】
+//                   
+/////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * 1.1 视频分辨率
+ * 
+ * 在普通模式下,TXLivePusher 只支持三种固定的分辨率,即:360 × 640、540 × 960 以及 720 × 1280。
+ * 
+ *【如何横屏推流】
+ * 如果希望使用 640 × 360、960 × 540、1280 × 720 这样的横屏分辨率,需要设置 TXLivePushConfig 中的 homeOrientation 属性,
+ * 并使用 TXLivePusher 中的 setRenderRotation 接口进行画面旋转。
+ *
+ *【自定义分辨率】
+ * 如果希望使用其他分辨率,可以设置 TXLivePushConfig 中的 customModeType 为 CUSTOM_MODE_VIDEO_CAPTURE,
+ * 自己采集 SampleBuffer 送给 TXLivePusher 的 sendVideoSampleBuffer 接口。
+ *
+ *【建议的分辨率】
+ * 手机直播场景下最常用的分辨率为 9:16 的竖屏分辨率 540 × 960。
+ * 从清晰的角度,540 × 960 比 360 × 640 要清晰,同时跟 720 × 1280 相当。
+ * 从性能的角度,540 × 960 可以避免前置摄像头开启 720 × 1280 的采集分辨率,对于美颜开销很大的场景能节省不少的计算量。
+ */
+typedef NS_ENUM(NSInteger, TX_Enum_Type_VideoResolution) {
+	
+	/// 竖屏分辨率,宽高比为 9:16
+    VIDEO_RESOLUTION_TYPE_360_640      = 0,   ///< 建议码率 800kbps
+    VIDEO_RESOLUTION_TYPE_540_960      = 1,   ///< 建议码率 1200kbps
+    VIDEO_RESOLUTION_TYPE_720_1280     = 2,   ///< 建议码率 1800kbps
+	
+	/// 如下均为内建分辨率,为 SDK 内部使用,不支持通过接口进行设置
+    VIDEO_RESOLUTION_TYPE_640_360      = 3,   
+    VIDEO_RESOLUTION_TYPE_960_540      = 4,   
+    VIDEO_RESOLUTION_TYPE_1280_720     = 5,   
+	
+    VIDEO_RESOLUTION_TYPE_320_480      = 6,   
+    VIDEO_RESOLUTION_TYPE_180_320      = 7,
+    VIDEO_RESOLUTION_TYPE_270_480      = 8,
+    VIDEO_RESOLUTION_TYPE_320_180      = 9,
+    VIDEO_RESOLUTION_TYPE_480_270      = 10,
+    
+    VIDEO_RESOLUTION_TYPE_240_320      = 11,
+    VIDEO_RESOLUTION_TYPE_360_480      = 12,
+    VIDEO_RESOLUTION_TYPE_480_640      = 13,
+    VIDEO_RESOLUTION_TYPE_320_240      = 14,
+    VIDEO_RESOLUTION_TYPE_480_360      = 15,
+    VIDEO_RESOLUTION_TYPE_640_480      = 16,
+    
+    VIDEO_RESOLUTION_TYPE_480_480      = 17,
+    VIDEO_RESOLUTION_TYPE_270_270      = 18,
+    VIDEO_RESOLUTION_TYPE_160_160      = 19,
+};
+
+/**
+ * 1.2 画面质量挡位
+ *
+ * 如果您希望调整直播的编码参数,建议您直接使用 TXLivePusher 提供的 setVideoQuality 接口。
+ * 由于视频编码参数中的分辨率,码率和帧率对最终效果都有着复杂的影响,如果您之前没有相关操作经验,不建议直接修改这些编码参数。
+ * 我们在 setVideoQuality 接口中提供了如下几个挡位供您选择:
+ *
+ *  1. 标清:采用 360 × 640 的分辨率,码率调控范围 300kbps - 800kbps,关闭网络自适应时的码率为 800kbps,适合网络较差的直播环境。
+ *  2. 高清:采用 540 × 960 的分辨率,码率调控范围 600kbps - 1500kbps,关闭网络自适应时的码率为 1200kbps,常规手机直播的推荐挡位。
+ *  3. 超清:采用 720 × 1280 的分辨率,码率调控范围 600kbps - 1800kbps,关闭网络自适应时的码率为 1800kbps,能耗高,但清晰度较标清提升并不明显。
+ *  4. 连麦(大主播):主播从原来的“推流状态”进入“连麦状态”后,可以通过 setVideoQuality 接口调整自 MAIN_PUBLISHER 挡位。
+ *  5. 连麦(小主播):观众从原来的“播放状态”进入“连麦状态”后,可以通过 setVideoQuality 接口调整自 SUB_PUBLISHER 挡位。
+ *  6. 视频通话:该选项后续会逐步废弃,如果您希望实现纯视频通话而非直播功能,推荐使用腾讯云 [TRTC](https://cloud.tencent.com/product/trtc) 服务。
+ *
+ * 【推荐设置】如果您对整个平台的清晰度要求比较高,推荐使用 setVideoQuality(HIGH_DEFINITION, NO, NO) 的组合。
+ *             如果您的主播有很多三四线城市的网络适配要求,推荐使用 setVideoQuality(HIGH_DEFINITION, YES, NO) 的组合。
+ *  
+ * @note 在开启硬件加速后,您可能会发现诸如 368 × 640 或者 544 × 960 这样的“不完美”分辨率。
+ *       这是由于部分硬编码器要求像素能被 16 整除所致,属于正常现象,您可以通过播放端的填充模式解决“小黑边”问题。
+ */
+typedef NS_ENUM(NSInteger, TX_Enum_Type_VideoQuality) {
+    VIDEO_QUALITY_STANDARD_DEFINITION       = 1,    ///< 标清:采用 360 × 640 的分辨率   
+    VIDEO_QUALITY_HIGH_DEFINITION           = 2,    ///< 高清:采用 540 × 960 的分辨率  
+    VIDEO_QUALITY_SUPER_DEFINITION          = 3,    ///< 超清:采用 720 × 1280 的分辨率
+    VIDEO_QUALITY_LINKMIC_MAIN_PUBLISHER    = 4,    ///< 连麦场景下的大主播使用 
+    VIDEO_QUALITY_LINKMIC_SUB_PUBLISHER     = 5,    ///< 连麦场景下的小主播(连麦的观众)使用
+    VIDEO_QUALITY_REALTIME_VIDEOCHAT        = 6,    ///< 纯视频通话场景使用(待废弃)
+};
+
+/**
+ * 1.3 画面旋转方向
+ */
 typedef NS_ENUM(NSInteger, TX_Enum_Type_HomeOrientation) {
-    /// home在右边
-    HOME_ORIENTATION_RIGHT  = 0,        
-    /// home在下面
-    HOME_ORIENTATION_DOWN,              
-    /// home在左边
-    HOME_ORIENTATION_LEFT,              
-    /// home在上面
-    HOME_ORIENTATION_UP,                
+    HOME_ORIENTATION_RIGHT     = 0,    ///< HOME 键在右边,横屏模式      
+    HOME_ORIENTATION_DOWN      = 1,    ///< HOME 键在下面,手机直播中最常见的竖屏直播模式                  
+    HOME_ORIENTATION_LEFT      = 2,    ///< HOME 键在左边,横屏模式                   
+    HOME_ORIENTATION_UP        = 3,    ///< HOME 键在上边,竖屏直播(适合小米 MIX2)                     
 };
-
-/// 渲染方式
+
+/**
+ * 1.4 画面填充模式
+ */
 typedef NS_ENUM(NSInteger, TX_Enum_Type_RenderMode) {
-    /// 图像铺满屏幕
-    RENDER_MODE_FILL_SCREEN  = 0,    
-    /// 图像长边填满屏幕
-    RENDER_MODE_FILL_EDGE            
-};
-
-/// 美颜程度, 取值1-9, 这里定义了关闭和最大值
-typedef NS_ENUM(NSInteger, TX_Enum_Type_BeautyFilterDepth) {
-    /// 关闭美颜
-    BEAUTY_FILTER_DEPTH_CLOSE   = 0,    
-    /// 最大美颜强度
-    BEAUTY_FILTER_DEPTH_MAX     = 9,    
+    
+    RENDER_MODE_FILL_SCREEN    = 0,    ///< 图像铺满屏幕,不留黑边,如果图像宽高比不同于屏幕宽高比,部分画面内容会被裁剪掉。
+    RENDER_MODE_FILL_EDGE      = 1,    ///< 图像适应屏幕,保持画面完整,但如果图像宽高比不同于屏幕宽高比,会有黑边的存在。
 };
-
-/// 美颜处理方式
+
+/**
+ * 1.5 美颜风格
+ */
 typedef NS_ENUM(NSInteger, TX_Enum_Type_BeautyStyle) {
-    /// 光滑
-    BEAUTY_STYLE_SMOOTH     = 0,    
-    /// 自然
-    BEAUTY_STYLE_NATURE     = 1,    
-    /// pitu美颜, 需要企业版SDK
-    BEAUTY_STYLE_PITU       = 2,    
+    BEAUTY_STYLE_SMOOTH        = 0,    ///< 光滑,磨皮程度较高,更适合秀场直播类场景下使用。
+    BEAUTY_STYLE_NATURE        = 1,    ///< 自然,磨皮算法会最大限度保留皮肤细节。
+    BEAUTY_STYLE_PITU          = 2,    ///< 天天P图版美颜, 需要商用企业版 SDK 才能支持,普通版本设置此选项无效。
 };
-
-/** 视频分辨率
-  SDK的视频采集模块只支持前3种分辨率,即:360*640 540*960 720*1280
-  如果客户自己负责视频采集,向SDK填充YUV数据,可以使用全部6种分辨率
+
+/**
+ * 1.6 美颜程度,取值范围1 - 9,该枚举值定义了关闭和最大值。
  */
-typedef NS_ENUM(NSInteger, TX_Enum_Type_VideoResolution) {
-    VIDEO_RESOLUTION_TYPE_360_640 = 0,
-    VIDEO_RESOLUTION_TYPE_540_960 = 1,
-    VIDEO_RESOLUTION_TYPE_720_1280 = 2,
-    VIDEO_RESOLUTION_TYPE_640_360 = 3,
-    VIDEO_RESOLUTION_TYPE_960_540 = 4,
-    VIDEO_RESOLUTION_TYPE_1280_720 = 5,
-    /// @name 连麦专用,采用固定码率。
-    VIDEO_RESOLUTION_TYPE_320_480 = 6,   
-    VIDEO_RESOLUTION_TYPE_180_320 = 7,
-    VIDEO_RESOLUTION_TYPE_270_480 = 8,
-    VIDEO_RESOLUTION_TYPE_320_180 = 9,
-    VIDEO_RESOLUTION_TYPE_480_270 = 10,
-    
-    VIDEO_RESOLUTION_TYPE_240_320  = 11,
-    VIDEO_RESOLUTION_TYPE_360_480  = 12,
-    VIDEO_RESOLUTION_TYPE_480_640  = 13,
-    VIDEO_RESOLUTION_TYPE_320_240  = 14,
-    VIDEO_RESOLUTION_TYPE_480_360  = 15,
-    VIDEO_RESOLUTION_TYPE_640_480  = 16,
-    
-    VIDEO_RESOLUTION_TYPE_480_480  = 17,
-    VIDEO_RESOLUTION_TYPE_270_270  = 18,
-    VIDEO_RESOLUTION_TYPE_160_160  = 19,
+typedef NS_ENUM(NSInteger, TX_Enum_Type_BeautyFilterDepth) {
+    BEAUTY_FILTER_DEPTH_CLOSE   = 0,   ///< 关闭美颜
+    BEAUTY_FILTER_DEPTH_MAX     = 9,   ///< 最大美颜强度
 };
 
+
 /**
-*  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\  推流的画面质量选项  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
-* 
-*  - 1.9.1 版本开始引入推流画质接口 setVideoQuality 用于傻瓜化的选择推流画质效果。
-*  - TXLivePush::setVideoQuality 内部通过 TXLivePushConfig 实现几种不同场景和风格的推流质量
-*  - 目前支持的几种画质选项如下:
-*
-*  (1)标清 - 采用 360 * 640 级别分辨率,码率会在 400kbps - 800kbps 之间自适应,如果主播的网络条件不理想,
-*              直播的画质会偏模糊,但总体卡顿率不会太高。
-*              Android平台下这一档我们会选择采用软编码,软编码虽然更加耗电,但在运动画面的表现要由于硬编码。
-*
-*  (2)高清 - 采用 540 * 960 级别分辨率,码率会锁定在 1200kbps,如果主播的网络条件不理想,直播画质不会有变化,
-*              但这段时间内会出现频繁的卡顿和跳帧。 两个平台下,这一档我们都会采用硬编码。
-*
-*  (3)超清 - 采用 720 * 1280 级别分辨率,码率会锁定在 1500kbps,对主播的上行带宽要求比较高,适合观看端是大屏的业务场景。
-*   
-*  (4)大主播 - 顾名思义,连麦中大主播使用,因为是观众的主画面,追求清晰一些的效果,所以分辨率会优先选择 540 * 960。
-*
-*  (5)小主播 - 顾名思义,连麦中小主播使用,因为是小画面,画面追求流畅,分辨率采用 320 * 480, 码率 350kbps 固定。
-*              
-* 【特别说明】
-*  1. 如果是秀场直播,iOS 和 Android 都推荐使用[高清],虽说“马上看壮士,月下观美人”是有这么一说,但是看完某椒就知道清晰有多么重要了。
-*  2. 使用 setVideoQuality 之后,依然可以使用 TXLivePushConfig 设置画质,以最后一次的设置为准。
-*  3. 如果您是手机端观看,那么一般不推荐使用【超清】选项,我们做过多组的画质主观评测,尤其是iOS平台,在小屏幕上观看几乎看不出差别。
-*
-*/
-typedef NS_ENUM(NSInteger, TX_Enum_Type_VideoQuality) {
-    ///标清:建议追求流畅性的客户使用该选项
-    VIDEO_QUALITY_STANDARD_DEFINITION       = 1,      
-    ///高清:建议对清晰度有要求的客户使用该选项
-    VIDEO_QUALITY_HIGH_DEFINITION           = 2,      
-    ///超清:如果不是大屏观看,不推荐使用
-    VIDEO_QUALITY_SUPER_DEFINITION          = 3,      
-    ///连麦大主播
-    VIDEO_QUALITY_LINKMIC_MAIN_PUBLISHER    = 4,      
-    ///连麦小主播
-    VIDEO_QUALITY_LINKMIC_SUB_PUBLISHER     = 5,      
-    ///实时音视频
-    VIDEO_QUALITY_REALTIME_VIDEOCHAT        = 6,      
-};
-
-///流控策略
-typedef NS_ENUM(NSInteger, TX_Enum_Type_AutoAdjustStrategy) {
-    /// 无流控
-    AUTO_ADJUST_NONE                            = -1, 
-    /// 适用于普通直播推流的流控策略,该策略敏感度比较低,会缓慢适应带宽变化,有利于在带宽波动时保持画面的清晰度。
+ * 1.6 网络自适应算法,推荐选项:AUTO_ADJUST_LIVEPUSH_STRATEGY
+ */
+typedef NS_ENUM(NSInteger, TX_Enum_Type_AutoAdjustStrategy) {
+    AUTO_ADJUST_NONE                                 = -1,    ///< 非法数值,用于 SDK 内部做合法性检查
+	
+    AUTO_ADJUST_LIVEPUSH_STRATEGY                    =  0,    ///< 最适合直播模式下的流控算法
+    AUTO_ADJUST_LIVEPUSH_RESOLUTION_STRATEGY         =  1,    ///< 不推荐:SDK 内部会调整视频分辨率,如果有 H5 分享的需求请勿使用
+    AUTO_ADJUST_REALTIME_VIDEOCHAT_STRATEGY          =  5,    ///< 待废弃,请使用腾讯云 TRTC 服务
+
+    AUTO_ADJUST_BITRATE_STRATEGY_1                   =  0,    ///< 已经废弃  
+    AUTO_ADJUST_BITRATE_RESOLUTION_STRATEGY_1        =  1,    ///< 已经废弃  
+    AUTO_ADJUST_BITRATE_STRATEGY_2                   =  2,    ///< 已经废弃  
+    AUTO_ADJUST_BITRATE_RESOLUTION_STRATEGY_2        =  3,    ///< 已经废弃  
+    AUTO_ADJUST_REALTIME_BITRATE_STRATEGY            =  4,    ///< 已经废弃
+    AUTO_ADJUST_REALTIME_BITRATE_RESOLUTION_STRATEGY =  5,    ///< 已经废弃 
+};
+
+/**
+ * 1.7 视频帧的数据格式(未压缩前的)
+ */
+typedef NS_ENUM(NSInteger, TXVideoType) {
     
-    AUTO_ADJUST_LIVEPUSH_STRATEGY               = 0,
-    /// 适用于普通直播推流的流控策略,与 LIVEPUSH_STRATEGY 的差别是改模式下 SDK 会根据当前码率自动调整出适合的分辨率
-    AUTO_ADJUST_LIVEPUSH_RESOLUTION_STRATEGY    = 1,
-    
-    /// 适用于实时音视频通话的流控策略,也就是 VIDEO_QUALITY_REALTIME_VIDEOCHAT 所使用流控策略, 该策略敏感度比较高,网络稍有风吹草动就会进行自适应调整
-    AUTO_ADJUST_REALTIME_VIDEOCHAT_STRATEGY     = 5,
+    VIDEO_TYPE_420SP          = 1,   ///< Android 视频采集格式,PixelFormat.YCbCr_420_SP 17  
+    VIDEO_TYPE_420YpCbCr      = 2,   ///< iOS 视频采集格式,kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange  
+    VIDEO_TYPE_420P           = 3,   ///< yuv420p格式 
+    VIDEO_TYPE_BGRA8888       = 4,   ///< BGRA8888
+    VIDEO_TYPE_RGBA8888       = 5,   ///< RGBA8888  
+    VIDEO_TYPE_NV12           = 6,   ///< NV12(iOS) 
+};
+
 
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                    【音频相关枚举值定义】
+//                   
+/////////////////////////////////////////////////////////////////////////////////
 
-    /// @name 下面是个是老版本中的常量定义,由于名字起得过于奇葩,在宰杀了一个“代码猴子”以后,我们进行如上调整
+/**
+ * 2.1 音频采样率
+ */
+typedef NS_ENUM(NSInteger, TX_Enum_Type_AudioSampleRate) {
     
-    /// 已经废弃不用
-    AUTO_ADJUST_BITRATE_STRATEGY_1              = 0,      
-    /// 已经废弃不用
-    AUTO_ADJUST_BITRATE_RESOLUTION_STRATEGY_1   = 1,      
-    /// 已经废弃不用
-    AUTO_ADJUST_BITRATE_STRATEGY_2              = 2,      
-    /// 已经废弃不用
-    AUTO_ADJUST_BITRATE_RESOLUTION_STRATEGY_2   = 3,      
-    ///实时:只调码率
-    AUTO_ADJUST_REALTIME_BITRATE_STRATEGY       = 4,      
-    ///实时:同时调码率和分辨率
-    AUTO_ADJUST_REALTIME_BITRATE_RESOLUTION_STRATEGY = 5,      
+    AUDIO_SAMPLE_RATE_8000       = 0,     ///< 8k采样率
+    AUDIO_SAMPLE_RATE_16000      = 1,     ///< 16k采样率
+    AUDIO_SAMPLE_RATE_32000      = 2,     ///< 32k采样率
+    AUDIO_SAMPLE_RATE_44100      = 3,     ///< 44.1k采样率
+    AUDIO_SAMPLE_RATE_48000      = 4,     ///< 48k采样率
 };
-
-/// 声音采样率
-typedef NS_ENUM(NSInteger, TX_Enum_Type_AudioSampleRate) {
-    /// 8k采样率
-    AUDIO_SAMPLE_RATE_8000 = 0,
-    /// 16k采样率
-    AUDIO_SAMPLE_RATE_16000,
-    /// 32k采样率
-    AUDIO_SAMPLE_RATE_32000,
-    /// 44.1k采样率
-    AUDIO_SAMPLE_RATE_44100,
-    /// 48k采样率
-    AUDIO_SAMPLE_RATE_48000,
+
+/**
+ * 2.2 混响类型
+ */
+typedef NS_ENUM(NSInteger, TXReverbType) {
+    REVERB_TYPE_0                = 0,     ///< 关闭混响 
+    REVERB_TYPE_1                = 1,     ///< KTV
+    REVERB_TYPE_2                = 2,     ///< 小房间 
+    REVERB_TYPE_3                = 3,     ///< 大会堂    
+    REVERB_TYPE_4                = 4,     ///< 低沉     
+    REVERB_TYPE_5                = 5,     ///< 洪亮    
+    REVERB_TYPE_6                = 6,     ///< 金属声    
+    REVERB_TYPE_7                = 7,     ///< 磁性    
 };
-
-typedef NS_ENUM(NSInteger, TXVideoType) {
-    /// Android 视频采集格式   PixelFormat.YCbCr_420_SP 17
-    VIDEO_TYPE_420SP       = 1,    
-    /// iOS 视频采集格式       kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
-    VIDEO_TYPE_420YpCbCr   = 2,    
-    /// yuv420p格式           客户自己负责视频采集,直接向SDK填充YUV数据
-    VIDEO_TYPE_420P        = 3,    
-    /// BGRA8888 
-    VIDEO_TYPE_BGRA8888    = 4,    
-    /// RGBA8888
-    VIDEO_TYPE_RGBA8888    = 5,    
-    /// NV12 
-    VIDEO_TYPE_NV12        = 6,    
+
+/**
+ * 2.3 变声选项
+ */
+typedef NS_ENUM(NSInteger, TXVoiceChangerType) {
+    
+    VOICECHANGER_TYPE_0          = 0,     ///< 关闭变声 
+    VOICECHANGER_TYPE_1          = 1,     ///< 熊孩子 
+    VOICECHANGER_TYPE_2          = 2,     ///< 萝莉 
+    VOICECHANGER_TYPE_3          = 3,     ///< 大叔 
+    VOICECHANGER_TYPE_4          = 4,     ///< 重金属 
+    VOICECHANGER_TYPE_5          = 5,     ///< 感冒 
+    VOICECHANGER_TYPE_6          = 6,     ///< 外国人 
+    VOICECHANGER_TYPE_7          = 7,     ///< 困兽 
+    VOICECHANGER_TYPE_8          = 8,     ///< 死肥仔 
+    VOICECHANGER_TYPE_9          = 9,     ///< 强电流 
+    VOICECHANGER_TYPE_10         = 10,    ///< 重机械 
+    VOICECHANGER_TYPE_11         = 11,    ///< 空灵 
 };
-
-///混响类型
-typedef NS_ENUM(NSInteger, TXReverbType) {
-    /// 关闭混响
-    REVERB_TYPE_0         = 0,    
-    /// KTV
-    REVERB_TYPE_1         = 1,    
-    /// 小房间
-    REVERB_TYPE_2         = 2,    
-    /// 大会堂
-    REVERB_TYPE_3         = 3,    
-    /// 低沉
-    REVERB_TYPE_4         = 4,    
-    /// 洪亮
-    REVERB_TYPE_5         = 5,    
-    /// 金属声
-    REVERB_TYPE_6         = 6,    
-    /// 磁性
-    REVERB_TYPE_7         = 7,    
-};
-
-/// 变声选项
-typedef NS_ENUM(NSInteger, TXVoiceChangerType) {
-    /// 关闭变声
-    VOICECHANGER_TYPE_0   = 0,    
-    /// 熊孩子
-    VOICECHANGER_TYPE_1   = 1,    
-    /// 萝莉
-    VOICECHANGER_TYPE_2   = 2,    
-    /// 大叔
-    VOICECHANGER_TYPE_3   = 3,    
-    /// 重金属
-    VOICECHANGER_TYPE_4   = 4,    
-    /// 感冒
-    VOICECHANGER_TYPE_5   = 5,    
-    /// 外国人
-    VOICECHANGER_TYPE_6   = 6,    
-    /// 困兽
-    VOICECHANGER_TYPE_7   = 7,    
-    /// 死肥仔
-    VOICECHANGER_TYPE_8   = 8,    
-    /// 强电流
-    VOICECHANGER_TYPE_9   = 9,    
-    /// 重机械
-    VOICECHANGER_TYPE_10  = 10,   
-    /// 空灵
-    VOICECHANGER_TYPE_11  = 11,   
-};
-
-///音频播放类型
-typedef NS_ENUM(NSInteger, TXAudioRouteType) {
-    /// 扬声器
-    AUDIO_ROUTE_SPEAKER    = 0,   
-    /// 听筒
-    AUDIO_ROUTE_RECEIVER   = 1,   
+
+/**
+ * 2.4 声音播放模式(音频路由)
+ *
+ * 一般手机都有两个扬声器,设置音频路由的作用就是要决定声音从哪个扬声器播放出来。
+ * - Speakerphone:扬声器,位于手机底部,声音偏大,适合外放音乐。
+ * - Earpiece:听筒,位于手机顶部,声音偏小,适合通话。
+ */
+typedef NS_ENUM(NSInteger, TXAudioRouteType) {
+    AUDIO_ROUTE_SPEAKER          = 0,      ///< 扬声器,位于手机底部,声音偏大,适合外放音乐。 
+    AUDIO_ROUTE_RECEIVER         = 1,      ///< 听筒,位于手机顶部,声音偏小,适合通话。
 };
-
-///传输通道
+
+/**
+ * 2.5 推流用网络通道(待废弃)
+ */
 typedef NS_ENUM(NSInteger, TX_Enum_Type_RTMPChannel) {
-    /// 自动
-    RTMP_CHANNEL_TYPE_AUTO          = 0,    
-    /// 标准的RTMP协议,网络层采用TCP协议
-    RTMP_CHANNEL_TYPE_STANDARD      = 1,    
-    /// 标准的RTMP协议,网络层采用私有通道传输(在UDP上封装的一套可靠快速的传输通道),能够更好地抵抗网络抖动
-    RTMP_CHANNEL_TYPE_PRIVATE       = 2,    
+    
+    RTMP_CHANNEL_TYPE_AUTO       = 0,      ///< 自动:推腾讯云使用加速协议,推友商云使用标准 RTMP 协议。
+    RTMP_CHANNEL_TYPE_STANDARD   = 1,      ///< 标准 RTMP 协议  
+    RTMP_CHANNEL_TYPE_PRIVATE    = 2,      ///< 腾讯云专属加速协议 
 };
 
-/// @name 状态键名定义
-/// cpu使用率
-#define NET_STATUS_CPU_USAGE         @"CPU_USAGE"        
-/// 设备总CPU占用
-#define NET_STATUS_CPU_USAGE_D       @"CPU_USAGE_DEVICE" 
-/// 当前视频编码器输出的比特率,也就是编码器每秒生产了多少视频数据,单位 kbps
-#define NET_STATUS_VIDEO_BITRATE     @"VIDEO_BITRATE"    
-/// 当前音频编码器输出的比特率,也就是编码器每秒生产了多少音频数据,单位 kbps
-#define NET_STATUS_AUDIO_BITRATE     @"AUDIO_BITRATE"    
-/// 当前视频帧率,也就是视频编码器每条生产了多少帧画面
-#define NET_STATUS_VIDEO_FPS         @"VIDEO_FPS"        
-/// 当前视频GOP,也就是每两个关键帧(I帧)间隔时长,单位s
-#define NET_STATUS_VIDEO_GOP         @"VIDEO_GOP"        
-/// 当前的发送速度
-#define NET_STATUS_NET_SPEED         @"NET_SPEED"        
-/// 网络抖动情况,抖动越大,网络越不稳定
-#define NET_STATUS_NET_JITTER        @"NET_JITTER"       
-/// 缓冲区大小,缓冲区越大,说明当前上行带宽不足以消费掉已经生产的视频数据
-#define NET_STATUS_CACHE_SIZE        @"CACHE_SIZE"       
-/// 视频缓冲帧数 (包括jitterbuffer和解码器两部分缓冲)
-#define NET_STATUS_VIDEO_CACHE_SIZE  @"VIDEO_CACHE_SIZE" 
-/// 视频解码器缓冲帧数
-#define NET_STATUS_V_DEC_CACHE_SIZE  @"V_DEC_CACHE_SIZE" 
-///视频当前渲染帧的timestamp和音频当前播放帧的timestamp的差值,标示当时音画同步的状态
-#define NET_STATUS_AV_PLAY_INTERVAL  @"AV_PLAY_INTERVAL"  
-///jitterbuffer最新收到的视频帧和音频帧的timestamp的差值,标示当时jitterbuffer收包同步的状态
-#define NET_STATUS_AV_RECV_INTERVAL  @"AV_RECV_INTERVAL"  
-///jitterbuffer当前的播放速度
-#define NET_STATUS_AUDIO_PLAY_SPEED  @"AUDIO_PLAY_SPEED"  
-///当前流的音频信息,包括采样率信息和声道数信息
-#define NET_STATUS_AUDIO_INFO        @"AUDIO_INFO"        
-#define NET_STATUS_DROP_SIZE         @"DROP_SIZE"
-#define NET_STATUS_VIDEO_WIDTH       @"VIDEO_WIDTH"
-#define NET_STATUS_VIDEO_HEIGHT      @"VIDEO_HEIGHT"
-#define NET_STATUS_SERVER_IP         @"SERVER_IP"
-///编解码缓冲大小
-#define NET_STATUS_CODEC_CACHE       @"CODEC_CACHE"      
-///编解码队列DROPCNT
-#define NET_STATUS_CODEC_DROP_CNT    @"CODEC_DROP_CNT"   
-#define NET_STATUS_SET_VIDEO_BITRATE @"SET_VIDEO_BITRATE"
-
-#define EVT_MSG                      @"EVT_MSG"
-#define EVT_TIME                     @"EVT_TIME"
-#define EVT_PARAM1					 @"EVT_PARAM1"
-#define EVT_PARAM2					 @"EVT_PARAM2"
-#define EVT_PLAY_PROGRESS            @"EVT_PLAY_PROGRESS"
-#define EVT_PLAY_DURATION            @"EVT_PLAY_DURATION"
-#define EVT_PLAYABLE_DURATION        @"PLAYABLE_DURATION"   
-#define EVT_REPORT_TOKEN             @"EVT_REPORT_TOKEN"
-#define EVT_GET_MSG                  @"EVT_GET_MSG"
-///视频封面
-#define EVT_PLAY_COVER_URL           @"EVT_PLAY_COVER_URL"   
-///视频播放地址
-#define EVT_PLAY_URL                 @"EVT_PLAY_URL"         
-///视频名称
-#define EVT_PLAY_NAME                @"EVT_PLAY_NAME"        
-///视频简介
-#define EVT_PLAY_DESCRIPTION         @"EVT_PLAY_DESCRIPTION" 
-
-#define STREAM_ID                    @"STREAM_ID"
-
-#endif 
+
+/**
+ * 2.6 屏幕采集源(用于录屏推流)
+ */
+#if TARGET_OS_OSX
+typedef NS_ENUM(NSInteger, TXCaptureVideoInputSource) {
+    TXCaptureVideoInputSourceCamera,
+    TXCaptureVideoInputSourceScreen,
+    TXCaptureVideoInputSourceWindow
+};
+#endif
+
+
+
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                    【状态通知字段名 onNetStatus】
+//                   
+/////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * TXLivePushListener 和 TXLivePlayListener 的 onNetStatus() 会以 2s 一次的时间间隔,定时通知网络状态和内部指标,
+ * 这些数值采用 key-value 的组织格式,其中 key 值的定义如下:
+ */
+
+#define NET_STATUS_CPU_USAGE             @"CPU_USAGE"              ///> 进程 CPU 占用率
+#define NET_STATUS_CPU_USAGE_D           @"CPU_USAGE_DEVICE"       ///> 系统 CPU 占用率
+
+#define NET_STATUS_VIDEO_WIDTH           @"VIDEO_WIDTH"            ///> 视频分辨率宽度
+#define NET_STATUS_VIDEO_HEIGHT          @"VIDEO_HEIGHT"           ///> 视频分辨率高度
+#define NET_STATUS_VIDEO_FPS             @"VIDEO_FPS"              ///> 视频帧率:也就是视频编码器每秒生产了多少帧画面。
+#define NET_STATUS_VIDEO_GOP             @"VIDEO_GOP"              ///> 关键帧间隔:即每两个关键帧(I帧)间隔时长,单位:秒。
+#define NET_STATUS_VIDEO_BITRATE         @"VIDEO_BITRATE"          ///> 视频码率:即视频编码器每秒生产了多少视频数据,单位:kbps。
+#define NET_STATUS_AUDIO_BITRATE         @"AUDIO_BITRATE"          ///> 音频码率:即音频编码器每秒生产了多少音频数据,单位:kbps。
+#define NET_STATUS_NET_SPEED             @"NET_SPEED"              ///> 传输速度:即每秒钟发送或接收了多少字节的数据。
+
+#define NET_STATUS_VIDEO_CACHE           @"VIDEO_CACHE"            ///> TXLivePusher:主播端堆积的视频帧数;TXLivePlayer:播放端缓冲的视频总时长。
+#define NET_STATUS_AUDIO_CACHE           @"AUDIO_CACHE"            ///> TXLivePusher:主播端堆积的音频帧数;TXLivePlayer:播放端缓冲的音频总时长。
+#define NET_STATUS_VIDEO_DROP            @"VIDEO_DROP"             ///> TXLivePusher:主播端主动丢弃的视频帧数;TXLivePlayer: N/A。
+#define NET_STATUS_AUDIO_DROP            @"AUDIO_DROP"             ///> 暂未使用
+
+#define NET_STATUS_V_DEC_CACHE_SIZE      @"V_DEC_CACHE_SIZE"       ///> TXLivePlayer:播放端解码器中缓存的视频帧数(Android 端硬解码时存在)。
+#define NET_STATUS_V_SUM_CACHE_SIZE      @"V_SUM_CACHE_SIZE"       ///> TXLivePlayer:播放端缓冲的总视频帧数,该数值越大,播放延迟越高。
+#define NET_STATUS_AV_PLAY_INTERVAL      @"AV_PLAY_INTERVAL"       ///> TXLivePlayer:音画同步错位时间(播放),单位 ms,此数值越小,音画同步越好。
+#define NET_STATUS_AV_RECV_INTERVAL      @"AV_RECV_INTERVAL"       ///> TXLivePlayer:音画同步错位时间(网络),单位 ms,此数值越小,音画同步越好。
+#define NET_STATUS_AUDIO_CACHE_THRESHOLD @"AUDIO_CACHE_THRESHOLD"  ///> TXLivePlayer:音频缓冲时长阈值,缓冲超过该阈值后,播放器会开始调控延时。
+
+#define NET_STATUS_AUDIO_INFO            @"AUDIO_INFO"             ///> 音频信息:包括采样率信息和声道数信息
+#define NET_STATUS_NET_JITTER            @"NET_JITTER"             ///> 网络抖动:数值越大表示抖动越大,网络越不稳定
+#define NET_STATUS_SERVER_IP             @"SERVER_IP"              ///> 连接的Server IP地址
+
+
+/////////////////////////////////////////////////////////////////////////////////
+//
+//                    【事件通知字段名 onPushEvent onPlayEvent】
+//                   
+/////////////////////////////////////////////////////////////////////////////////
+
+
+/**
+ * 腾讯云 LiteAVSDK 通过 TXLivePushListener 中的 onPushEvent(),TXLivePlayListener 中的 onPlayEvent() 向您通知内部错误、警告和事件:
+ * - 错误:严重且不可恢复的错误,会中断 SDK 的正常逻辑。
+ * - 警告:非致命性的提醒和警告,可以不理会。
+ * - 事件:SDK 的流程和状态通知,比如开始推流,开始播放,等等。
+ *  
+ * 这些数值采用 key-value 的组织格式,其中 key 值的定义如下:
+ */
+#define EVT_MSG                          @"EVT_MSG"                 ///> 事件ID
+#define EVT_TIME                         @"EVT_TIME"                ///> 事件发生的UTC毫秒时间戳
+#define EVT_PARAM1				         @"EVT_PARAM1"              ///> 事件参数1
+#define EVT_PARAM2					     @"EVT_PARAM2"              ///> 事件参数2
+#define EVT_GET_MSG                      @"EVT_GET_MSG"             ///> 消息内容,收到PLAY_EVT_GET_MESSAGE事件时,通过该字段获取消息内容
+#define EVT_PLAY_PROGRESS                @"EVT_PLAY_PROGRESS"       ///> 点播:视频播放进度
+#define EVT_PLAY_DURATION                @"EVT_PLAY_DURATION"       ///> 点播:视频总时长
+#define EVT_PLAYABLE_DURATION            @"PLAYABLE_DURATION"       ///> 点播:视频可播放时长
+#define EVT_PLAY_COVER_URL               @"EVT_PLAY_COVER_URL"      ///> 点播:视频封面
+#define EVT_PLAY_URL                     @"EVT_PLAY_URL"            ///> 点播:视频播放地址
+#define EVT_PLAY_NAME                    @"EVT_PLAY_NAME"           ///> 点播:视频名称
+#define EVT_PLAY_DESCRIPTION             @"EVT_PLAY_DESCRIPTION"    ///> 点播:视频简介
+
+#define STREAM_ID                        @"STREAM_ID"
+
+#endif 
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVideoCustomProcessDelegate.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVideoCustomProcessDelegate.h
index 4d80f95..98be4fa 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVideoCustomProcessDelegate.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVideoCustomProcessDelegate.h
@@ -7,8 +7,13 @@
 //
 
 #import <Foundation/Foundation.h>
+#if TARGET_OS_IPHONE
 #include <OpenGLES/ES2/gl.h>
 #include <OpenGLES/ES2/glext.h>
+#elif TARGET_OS_MAC
+#import <OpenGL/OpenGL.h>
+#import <OpenGL/gl.h>
+#endif
 
 @protocol TXVideoCustomProcessDelegate <NSObject>
 @optional
@@ -38,7 +43,7 @@
 #pragma mark - Player
 /**
  * 视频渲染对象回调
- * @prarm pixelBuffer   渲染图像
+ * @param pixelBuffer   渲染图像
  * @return              返回YES则SDK不再显示;返回NO则SDK渲染模块继续渲染
  *  说明:渲染图像的数据类型为config中设置的renderPixelFormatType
  */
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayConfig.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayConfig.h
index 241b399..e91255a 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayConfig.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayConfig.h
@@ -20,31 +20,32 @@ typedef NS_ENUM(NSInteger, TX_Enum_PlayerType) {
 /// 播放器配置参数
 @interface TXVodPlayConfig : NSObject
 
-/// 播放器连接重试次数 : 最小值为 1, 最大值为 10, 默认值为 3
+/// 播放器连接重试次数:最小值为1,最大值为10,默认值为 3
 @property(nonatomic, assign) int connectRetryCount;
 
-/// 播放器连接重试间隔 : 单位秒,最小值为 3, 最大值为 30, 默认值为 3
+/// 播放器连接重试间隔:单位秒,最小值为3, 最大值为30,默认值为3
 @property(nonatomic, assign) int connectRetryInterval;
 
-@property NSTimeInterval timeout;           /// 超时时间: 单位秒,默认10s
+/// 超时时间:单位秒,默认10s
+@property NSTimeInterval timeout;
 
-/// 视频渲染对象回调的视频格式. 支持kCVPixelFormatType_32BGRA、kCVPixelFormatType_420YpCbCr8BiPlanarFullRange、kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
+/// 视频渲染对象回调的视频格式。支持kCVPixelFormatType_32BGRA、kCVPixelFormatType_420YpCbCr8BiPlanarFullRange、kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
 @property(nonatomic, assign) OSType playerPixelFormatType;
 
 /**
  * 注意:缓存目录应该是单独的目录,SDK可能会清掉其中的文件
  */
-@property NSString *cacheFolderPath;        /// 视频缓存目录,点播MP4、HLS有效
+@property NSString *cacheFolderPath;        ///< 视频缓存目录,点播MP4、HLS有效
 
-@property int maxCacheItems;                /// 最多缓存文件个数
+@property int maxCacheItems;                ///< 最多缓存文件个数
 
-@property NSInteger playerType;             /// 播放器类型
+@property NSInteger playerType;             ///< 播放器类型
 
-@property NSDictionary *headers;            /// 自定义HTTP Headers
+@property NSDictionary *headers;            ///< 自定义 HTTP Headers
 
-@property BOOL enableAccurateSeek;          /// 是否精确seek,默认YES. 开启精确后seek,seek的时间平均多出200ms
+@property BOOL enableAccurateSeek;          ///< 是否精确 seek,默认YES。开启精确后seek,seek 的时间平均多出200ms
 
-@property BOOL autoRotate;                  /// 播放mp4文件时,若设为YES则根据文件中的旋转角度自动旋转。旋转角度可在PLAY_EVT_CHANGE_ROTATION事件中获得。默认YES
+@property BOOL autoRotate;                  ///< 播放 MP4 文件时,若设为YES则根据文件中的旋转角度自动旋转。旋转角度可在 EVT_VIDEO_CHANGE_ROTATION 事件中获得。默认YES
 
 /**
  * 平滑切换码率。默认NO
@@ -57,6 +58,12 @@ typedef NS_ENUM(NSInteger, TX_Enum_PlayerType) {
  *  若不设置,SDK默认间隔0.5秒回调一次
  */
 @property NSTimeInterval progressInterval;
+
+/**
+ * 最大预加载大小,单位 MB
+ *  此设置会影响playableDuration,设置越大,提前缓存的越多
+ */
+@property int maxBufferSize;
 @end
 
 #endif /* TXVodPlayConfig_h */
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayer.h b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayer.h
index ad01fcb..ab0d191 100644
--- a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayer.h
+++ b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayer.h
@@ -40,7 +40,6 @@
 
 /**
  * 点播配置
- * @see TXVodPlayConfig
  */
 @property(nonatomic, copy) TXVodPlayConfig *config;
 
@@ -48,7 +47,7 @@
 @property BOOL isAutoPlay;
 
 /**
- * 加密HLS的token。设置此值后,播放器自动在URL中的文件名之前增加voddrm.token.<Token>
+ * 加密HLS的token。设置此值后,播放器自动在URL中的文件名之前增加 voddrm.token.TOKEN
  */
 @property (nonatomic, strong) NSString *token;
 
@@ -72,14 +71,16 @@
 /**
  * startPlay 启动从指定URL播放
  *
- * @prarm url 完整的URL(如果播放的是本地视频文件,这里传本地视频文件的完整路径)
+ * @param url 完整的URL(如果播放的是本地视频文件,这里传本地视频文件的完整路径)
  * @return 0 = OK
  */
 - (int)startPlay:(NSString *)url;
 
 /**
- * 通过fileid方式播放.
- * @discussion fileid的获取方式可参考 https://cloud.tencent.com/document/product/454/12148#step-3.3A-.E5.90.AF.E5.8A.A8.E6.92.AD.E6.94.BE
+ * 通过fileid方式播放。
+ *
+ * fileid的获取方式可参考 [启动播放](https://cloud.tencent.com/document/product/454/12148#step-3.3A-.E5.90.AF.E5.8A.A8.E6.92.AD.E6.94.BE)
+ *
  * @param params 认证参数
  * @return 0 = OK
  */
@@ -173,7 +174,7 @@
 /**
  * 当播放地址为master playlist,返回支持的码率(清晰度)
  *
- * @warning 在收到PLAY_EVT_PLAY_BEGIN事件后才能正确返回结果
+ * @warning 在收到EVT_VIDEO_PLAY_BEGIN事件后才能正确返回结果
  * @return 无多码率返回空数组
  */
 - (NSArray<TXBitrateItem *> *)supportedBitrates;
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Info.plist b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Info.plist
index d8883f6..292c23d 100644
Binary files a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Info.plist and b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/Info.plist differ
diff --git a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/TXLiteAVSDK_Smart b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/TXLiteAVSDK_Smart
index bacb941..c00b20a 100644
Binary files a/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/TXLiteAVSDK_Smart and b/HHVDoctorSDK/TXLiteAVSDK_Smart.framework/TXLiteAVSDK_Smart differ