华为云用户手册

  • 请求示例 创建直播转码模板,应用名称为live,转码质量为SD,转码编码格式为H264,宽为1920像素,高为1080像素。 POST https://{endpoint}/v1/{project_id}/template/transcodings { "domain" : "play.example.com", "app_name" : "live", "quality_info" : [ { "quality" : "lsd", "hdlb" : "off", "codec" : "H264", "width" : 1920, "height" : 1080, "bitrate" : 4500, "video_frame_rate" : 20, "gop" : 4 }, { "quality" : "userdefine", "templateName" : "yourTemplateName", "hdlb" : "off", "codec" : "H264", "width" : 1920, "height" : 1080, "bitrate" : 4500, "video_frame_rate" : 20, "gop" : 4 } ] }
  • 响应参数 状态码: 200 表4 响应Header参数 参数 参数类型 描述 X-Request-Id String 此字段携带请求ID号,以便任务跟踪。格式为:request_id-timestamp-hostname(request_id在服务器端生成UUID,timestamp为当前时间戳,hostname为处理当前接口的服务器名称) 状态码: 400 表5 响应Header参数 参数 参数类型 描述 X-Request-Id String 此字段携带请求ID号,以便任务跟踪。格式为:request_id-timestamp-hostname(request_id在服务器端生成UUID,timestamp为当前时间戳,hostname为处理当前接口的服务器名称) 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必填。通过调用 IAM 服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必填,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必填,请求的发生时间。 X-Project-Id 否 String 使用AK/SK方式认证时必填,携带项目ID信息。 表3 请求Body参数 参数 是否必选 参数类型 描述 domain 是 String 推流 域名 或播放域名 auth_type 是 String 鉴权类型。 包含如下取值: WHITE:IP白名单鉴权。 BLACK:IP黑名单鉴权。 NONE:不鉴权。 ip_auth_list 是 String IP黑名单列表,IP之间用;分隔,如192.168.0.0;192.168.0.8,最多支持配置100个IP。支持IP网段添加,例如127.0.0.1/24表示采用子网掩码中的前24位为有效位,即用32-24=8bit来表示主机号,该子网可以容纳2^8 - 2 = 254 台主机。故127.0.0.1/24 表示IP网段范围是:127.0.0.1~127.0.0.255
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 domain String 直播域名 guard_switch String referer防盗链开关:true表示开启;false表示关闭 referer_config_empty String 是否包含referer头域:true表示包含;false表示不包含;guard_switch为true则必填 referer_white_list String 是否为referer白名单:true表示白名单;false表示黑名单;guard_switch为true则必填 referer_auth_list Array of strings 域名列表,域名为正则表达式;最多支持配置100个域名,以英文“;”进行分隔;guard_switch为true则必填 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求参数 表3 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必填。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必填,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必填,请求的发生时间。 X-Project-Id 否 String 使用AK/SK方式认证时必填,携带项目ID信息。
  • 响应示例 状态码: 200 查询Referer黑白名单成功 { "domain" : "play.example.huawei.com", "guard_switch" : "true", "referer_config_empty" : "true", "referer_white_list" : "false", "referer_auth_list" : [ "^http://test.*com$", "abc.com" ] } 状态码: 400 查询Referer黑白名单失败 { "error_code" : "LIVE.100011001", "error_msg" : "Request Illegal" }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必填。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必填,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必填,请求的发生时间。 X-Project-Id 否 String 使用AK/SK方式认证时必填,携带项目ID信息。 表3 请求Body参数 参数 是否必选 参数类型 描述 domain 是 String 直播域名 domain_type 是 String 域名类型 pull:播放域名 push:推流域名 region 是 String 直播所属的直播中心 service_area 否 String 域名加速区域 mainland_china:中国大陆 outside_mainland_china:中国大陆境外 global:全球加速 enterprise_project_id 否 String 企业项目ID
  • 响应参数 状态码: 201 表4 响应Body参数 参数 参数类型 描述 domain String 直播域名 domain_type String 域名类型 pull:播放域名 push:推流域名 domain_cname String 直播域名的CNAME region String 直播所属直播中心 status String 直播域名的状态 create_time String 域名创建时间,格式:yyyy-mm-ddThh:mm:ssZ,UTC时间 status_describe String 状态描述 service_area String 域名加速区域 mainland_china:中国大陆 outside_mainland_china:中国大陆境外 global:全球加速 enterprise_project_id String 企业项目ID 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 201 直播域名创建成功 { "domain" : "play.example.com", "domain_type" : "pull", "domain_cname" : "play.example.com.c.cdnhwc3.com", "region" : "region1", "status" : "configuring", "create_time" : "2020-01-19T02:57:00Z" } 状态码: 400 参数错误 { "error_code" : "LIVE.100011001", "error_msg" : "Request Illegal" }
  • 响应参数 状态码: 204 表3 响应Header参数 参数 参数类型 描述 X-request-id String 此字段携带请求ID号,以便任务跟踪。格式为:request_id-timestamp-hostname(request_id在服务器端生成UUID,timestamp为当前时间戳,hostname为处理当前接口的服务器名称) 状态码: 400 表4 响应Header参数 参数 参数类型 描述 X-request-id String 此字段携带请求ID号,以便任务跟踪。格式为:request_id-timestamp-hostname(request_id在服务器端生成UUID,timestamp为当前时间戳,hostname为处理当前接口的服务器名称) 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述 状态码: 404 表6 响应Header参数 参数 参数类型 描述 X-request-id String 此字段携带请求ID号,以便任务跟踪。格式为:request_id-timestamp-hostname(request_id在服务器端生成UUID,timestamp为当前时间戳,hostname为处理当前接口的服务器名称) 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必填。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必填,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必填,请求的发生时间。 X-Project-Id 否 String 使用AK/SK方式认证时必填,携带项目ID信息。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 domain String 直播域名 domain_type String 域名类型 pull:播放域名 push:推流域名 domain_cname String 直播域名的CNAME region String 直播所属直播中心 status String 直播域名的状态 create_time String 域名创建时间,格式:yyyy-mm-ddThh:mm:ssZ,UTC时间 status_describe String 状态描述 service_area String 域名加速区域 mainland_china:中国大陆 outside_mainland_china:中国大陆境外 global:全球加速 enterprise_project_id String 企业项目ID 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 200 直播域名修改成功 { "domain" : "play.example.com", "domain_type" : "pull", "domain_cname" : "play.example.com.c.cdnhwc3.com", "region" : "region1", "status" : "off", "create_time" : "2020-01-19T02:57:00Z" } 状态码: 400 参数错误 { "error_code" : "LIVE.100011001", "error_msg" : "Request Illegal" }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必填。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必填,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必填,请求的发生时间。 X-Project-Id 否 String 使用AK/SK方式认证时必填,携带项目ID信息。 表3 请求Body参数 参数 是否必选 参数类型 描述 domain 是 String 直播域名,不允许修改 status 否 String 直播域名状态,通过修改此字段,实现域名的启用和停用;域名处于“配置中”状态时,不允许对该域名执行启停操作 enterprise_project_id 否 String 企业项目ID
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 total Integer 查询结果的总元素数量 bandwidth_info Array of BandwidthInfo objects 带宽信息 表5 BandwidthInfo 参数 参数类型 描述 bw_bps Integer 带宽峰值,单位:bps timestamp String 带宽数据采样周期起始时刻,UTC时间,格式:yyyy-MM-ddTHH:mm:ssZ 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 200 查询直播加速的带宽数据成功 { "total" : 1, "bandwidth_info" : [ { "bw_bps" : 1024, "timestamp" : "2018-05-19T21:10:15Z" } ] } 状态码: 400 查询直播加速的带宽数据失败 { "error_code" : "LIVE.100011001", "error_msg" : "Request Illegal" }
  • URI GET /v1/{project_id}/stream/bandwidth 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方法请参考获取项目ID。 表2 Query参数 参数 是否必选 参数类型 描述 domain 否 String 播放域名,不指定域名表示查询租户所有域名汇总带宽 start_time 否 String 查询起始时间,UTC时间,格式:yyyy-MM-ddTHH:mm:ssZ end_time 否 String 查询结束时间,UTC时间,格式:yyyy-MM-ddTHH:mm:ssZ。 start_time与end_time均不存在时,服务端从最近一个统计周期的数据里查询。 start_time存在、end_time不存在时,end_time取当前时间。 start_time不存在、end_time存在时,请求非法。 只能查询最近三个月内的数据,start_time和end_time的跨度不能大于30天。 step 否 Integer 统计周期,单位:分钟
  • 操作步骤 登录 视频直播 控制台,获取需要配置录制规则的播放域名。 获取用户Token,用于调用直播接口时进行认证鉴权。 详细信息请参见构造请求。以“华北-北京四”为示例,若您需要调用其它区域的直播接口,请替换成对应区域的IAM终端节点。 POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "password", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "projectname" } } } } 如图1所示,红框中的信息为获取用户Token。 图1 获取用户Token 调用创建录制规则接口,配置录制规则参数。 选择POST请求方法并输入URI。 https://{endpoint}/v1/{project_id}/record/rules 请求消息头中增加“X-Auth-Token”,值设置为步骤2中获取的用户Token。 Request Body中传入参数如下: { "publish_domain" : "publish.xxx.com", "app" : "live", "stream" : "*", "record_type" : "CONTINUOUS_RECORD", "default_record_config" : { "record_format" : [ "HLS", "FLV" ], "hls_config" : { "record_cycle" : 3600, "record_prefix" : "Record/{publish_domain}/{app}/{record_type}/{record_format}/{stream}_{file_start_time}/{file_start_time}", "record_ts_prefix" : "{file_start_time_unix}-{file_end_time_unix}-{ts_sequence_number}", "record_slice_duration" : 10, "record_max_duration_to_merge_file" : 0 }, "flv_config" : { "record_cycle" : 9000, "record_prefix" : "Record/{publish_domain}/{app}/{record_format}/{stream}_{file_start_time}/{file_start_time}", "record_max_duration_to_merge_file" : 0 }, "obs_addr" : { "bucket" : "mybucket", "location" : "cn-north-4", "object" : "record/" } } } 请求响应成功后,无返回参数,返回状态码201。 开始直播推流,推流过程中会根据录制配置生成对应录制文件,并存储至OBS中。录制文件的获取方法请参见管理录制文件。
  • 请求参数 表3 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必填。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必填,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必填,请求的发生时间。 X-Project-Id 否 String 使用AK/SK方式认证时必填,携带项目ID信息。
  • 响应示例 状态码: 200 直播域名查询成功 { "total" : 2, "domain_info" : [ { "domain" : "play.example.huawei.com", "domain_type" : "pull", "vendor" : "uCDN", "domain_cname" : "play.example.huawei.com.c.cdnhwc3.com", "region" : "region1", "status" : "on", "related_domain" : "publish.example.huawei.com", "create_time" : "2020-01-19T02:57:00Z" }, { "domain" : "publish.example.huawei.com", "domain_type" : "push", "vendor" : "uCDN", "domain_cname" : "publish.example.huawei.com.c.cdnhwc3.com", "region" : "region1", "status" : "on", "related_domain" : "", "create_time" : "2020-01-19T02:58:00Z" } ] } 状态码: 404 直播域名查询失败 { "error_code" : "LIVE.103011019", "error_msg" : "Request Illegal" }
  • 请求参数 表3 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token,使用Token鉴权方式时必选。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必填,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必填,请求的发生时间。 X-Project-Id 否 String 使用AK/SK方式认证时必填,携带项目ID信息。
  • URI GET /v1/{project_id}/domain 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方法请参考获取项目ID。 表2 Query参数 参数 是否必选 参数类型 描述 domain 否 String 直播域名,如果不设置此字段,则返回租户所有的域名信息 enterprise_project_id 否 String 企业项目ID,如果不设置此字段,则不进行该字段过滤,返回所有域名信息
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 total Number 查询结果的总数量 domain_info Array of DecoupledLiveDomainInfo objects 直播域名列表 表5 DecoupledLiveDomainInfo 参数 参数类型 描述 domain String 直播域名 domain_type String 域名类型 vendor String CDN厂商 region String 直播所属直播中心 domain_cname String 直播域名的CNAME status String 直播域名的状态 related_domain String 播放域名关联的推流域名(只有domain_type为pull的时候有效) create_time String 域名创建时间,格式:yyyy-mm-ddThh:mm:ssZ,UTC时间 status_describe String 状态描述 service_area String 域名加速区域 mainland_china:中国大陆 outside_mainland_china:中国大陆境外 global:全球加速 enterprise_project_id String 企业项目ID is_ipv6 Boolean IPV6开关是否开启,默认关闭,true为开启;false或空为关闭 状态码: 404 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 响应示例 状态码: 200 查询IP黑/白名单成功 { "domain" : "play.example.huawei.com", "auth_type" : "WHITE", "ip_auth_list" : "192.168.0.0;192.168.0.8" } 状态码: 400 查询IP黑/白名单失败 { "error_code" : "LIVE.100011001", "error_msg" : "Request Illegal" }
  • 响应参数 状态码: 200 表4 响应Header参数 参数 参数类型 描述 X-Request-Id String 此字段携带请求ID号,以便任务跟踪。格式为:request_id-timestamp-hostname(request_id在服务器端生成UUID,timestamp为当前时间戳,hostname为处理当前接口的服务器名称) 表5 响应Body参数 参数 参数类型 描述 domain String 推流域名或播放域名 auth_type String 鉴权类型。 包含如下取值: WHITE:IP白名单鉴权。 BLACK:IP黑名单鉴权。 NONE:不鉴权。 ip_auth_list String IP黑名单列表,IP之间用;分隔,如192.168.0.0;192.168.0.8,最多支持配置100个IP。支持IP网段添加,例如127.0.0.1/24表示采用子网掩码中的前24位为有效位,即用32-24=8bit来表示主机号,该子网可以容纳2^8 - 2 = 254 台主机。故127.0.0.1/24 表示IP网段范围是:127.0.0.1~127.0.0.255 状态码: 400 表6 响应Header参数 参数 参数类型 描述 X-Request-Id String 此字段携带请求ID号,以便任务跟踪。格式为:request_id-timestamp-hostname(request_id在服务器端生成UUID,timestamp为当前时间戳,hostname为处理当前接口的服务器名称) 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_msg String 错误描述
  • 请求参数 表3 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必填。通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必填,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必填,请求的发生时间。 X-Project-Id 否 String 使用AK/SK方式认证时必填,携带项目ID信息。
  • 请求消息体(可选) 该部分可选。请求消息体通常以结构化格式(如JSON或XML)发出,与请求消息头中Content-Type对应,传递除请求消息头之外的内容。若请求消息体中的参数支持中文,则中文字符必须为UTF-8编码。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 对于管理员创建IAM用户接口,您可以从接口的请求部分看到所需的请求参数及参数说明,将消息体加入后的请求如下所示,其中加粗的字段需要根据实际值填写。 accountid为IAM用户所属的账号ID。 username为要创建的IAM用户名。 email为IAM用户的邮箱。 **********为IAM用户的登录密码。 POST https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users Content-Type: application/json X-Sdk-Date: 20240416T095341Z Authorization: SDK-HMAC-SHA256 Access=****************, SignedHeaders=content-type;host;x-sdk-date, Signature=**************** { "user": { "domain_id": "accountid", "name": "username", "password": "**********", "email": "email", "description": "IAM User Description" } } 到这里为止这个请求需要的内容就具备齐全了,您可以使用curl、Postman或直接编写代码等方式发送请求调用API。对于获取用户Token接口,返回的响应消息头中的“X-Subject-Token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。
  • 请求URI 请求URI由如下部分组成: {URI-scheme}://{Endpoint}/{resource-path}?{query-string} 尽管请求URI包含在请求消息头中,但大多数语言或框架都要求您从请求消息中单独传递它,所以在此单独强调。 表1 URI中的参数说明 参数 描述 URI-scheme 表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint 指定承载REST服务端点的服务器域名或IP,不同服务不同区域的Endpoint不同,您可以从地区和终端节点获取。 例如IAM服务在“华北-北京四”区域的Endpoint为“iam.cn-north-4.myhuaweicloud.com”。 resource-path 资源路径,即API访问路径。从具体API的URI模块获取,例如“获取用户Token”API的resource-path为“/v3/auth/tokens”。 query-string 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“?limit=10”,表示查询不超过10条数据。 例如您需要创建IAM用户,由于IAM为全局服务,则使用任一区域的Endpoint,比如“华北-北京四”区域的Endpoint(iam.cn-north-4.myhuaweicloud.com),并在管理员创建IAM用户的URI部分找到resource-path(/v3.0/OS-USER/users),拼接起来如下所示。 1 https://iam.cn-north-4.myhuaweicloud.com/v3.0/OS-USER/users 图1 URI示意图 为方便查看,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • 请求方法 HTTP请求方法(也称为操作或动词),它告诉服务您正在请求什么类型的操作。 表2 HTTP方法 方法 说明 GET 请求服务器返回指定资源。 PUT 请求服务器更新指定资源。 POST 请求服务器新增资源或执行特殊操作。 DELETE 请求服务器删除指定资源,如删除对象等。 HEAD 请求服务器资源头部。 PATCH 请求服务器更新资源的部分内容。 当资源不存在的时候,PATCH可能会去创建一个新的资源。 在管理员创建IAM用户的URI部分,您可以看到其请求方法为“POST”,则其请求为: 1 POST https://iam.cn-north-1.myhuaweicloud.com/v3.0/OS-USER/users
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 详细的公共请求消息头字段请参见表3。 表3 公共请求消息头 名称 描述 是否必选 示例 Host 请求的服务器信息,从服务API的URL中获取。值为hostname[:port]。端口缺省时使用默认的端口,https的默认端口为443。 否 使用AK/SK认证时该字段必选。 code.test.com or code.test.com:443 Content-Type 消息体的类型(格式)。推荐用户使用默认值application/json,有其他取值时会在具体接口中专门说明。 是 application/json Content-Length 请求body长度,单位为Byte。 否 3495 X-Project-Id project id,项目编号。请参考获取项目ID章节获取项目编号。 否 如果是专属云场景采用AK/SK认证方式的接口请求,或者多project场景采用AK/SK认证的接口请求,则该字段必选。 e9993fc787d94b6c886cbaa340f9c0f4 X-Auth-Token 用户Token。 用户Token也就是调用获取用户Token接口的响应值,该接口是唯一不需要认证的接口。 请求响应成功后在响应消息头(Headers)中包含的“X-Subject-Token”的值即为Token值。 否 使用Token认证时该字段必选。 注:以下仅为Token示例片段。 MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ API同时支持使用AK/SK认证,AK/SK认证使用SDK对请求进行签名,签名过程会自动往请求中添加Authorization(签名认证信息)和X-Sdk-Date(请求发送的时间)请求头。 AK/SK认证的详细说明请参见认证鉴权的“AK/SK认证”。 对于管理员创建IAM用户接口,使用AK/SK方式认证时,添加消息头后的请求如下所示。 1 2 3 4 POST https://iam.cn-north-1.myhuaweicloud.com/v3.0/OS-USER/users Content-Type: application/json X-Sdk-Date: 20240416T095341Z Authorization: SDK-HMAC-SHA256 Access=****************, SignedHeaders=content-type;host;x-sdk-date, Signature=****************
共100000条