rtcp

RTP 控制协议

采用与数据包相同的分发机制,将控制包周期性传输到所有会话参与者中。底层协议必须提供数据和控制包的多路发送,例如使用不同的 UDP端口号。

协议概况
RTCP:RTP 控制协议 (RTCP:RTP Control Protocol)
RTCP 提供数据分发质量反馈信息,这是 RTP 作为传输协议的部分功能并且它涉及到了其它传输协议的流控制拥塞控制
RTCP 为 RTP 源携带一个持久性传输层标识符,称为规范名或 CNAME。由于一旦发现冲突或程序重启时, SSRC 标识符会随之改变,所以接收方需要 CNAME 来跟踪每一个参与者。同时接收方还要求 CNAME 能够与一组相关 RTP 会话中来自于给定参与者的多重数据流相关联,例如同步视频和音频。
上述前两个功能要求所有的参与者都要发送 RTCP 包,因此必须控制速率以便 RTP 按比例增加大量的参与者。通过每一个参与者发送各自的控制包给其它所有参与者,每一个参与者能够独立观察到参与者数量,该数量可用来计算控制包的发送速率。
OPTIONAL 功能用于传送最少会话控制信息,例如在用户界面显示参与者标识。这对于“松散受控”会话(在没有成员控制或阐述协商的情况下,参与者可以加入或退出该会话)是非常有用的。
上述功能 1 - 3 适用于所有环境,尤其是 IP 组播环境。RTP 应用程序设计者应该避免设计只能工作于单播模式并且不能增加到大量数量的机制。在某些情况下如单向链接中,不可能有来自接收方的反馈,所以 RTCP 的传输就可能由发送方和接收方分别独立控制。
协议结构
定义
单位(bit)
Length
Version ― 识别 RTP 版本。RTP 数据包中的该值与 RTCP 数据包中的一样。当前规范定义的版本值为 2。
P ― 间隙(Padding)。设置时, RTCP 数据包包含一些其它 padding 八位位组,它们不属于控制信息。Padding 的最后八位是用于计算应该忽略多少间隙八位位组。一些加密算法中需要计算固定块大小时也可能需要使用 Padding 字段。在一个复合 RTCP 数据包中,只有最后的个别数据包中才需要使用 padding ,这是因为复合数据包是作为一个整体来加密的。
RC ― 接收方报告计数。包含在该数据包中的接收方报告块的数量,有效值为 0。
Packet type ― 包括常量 200 ,识别这是一个 RTCP SR 数据包。
Length ― RTCP 数据包的大小(32 位字减去 1),包含头和任意间隙 (偏移量的引入使得 0 成为有效值,并避免了扫描复合 RTCP 数据包过程中的无限循环现象,而采用 32 位字计数方法则避免了对 4 的倍数的有效性校验)。
RTCP的分组类型
下表为RTCP的五种分组类型
结束分组BYE表示关闭一个数据流。
特定应用分组APP使应用程序能够定义新的分组类型、。
接收端报告分组RR用来使接收端周期性地向所有的点用多播方式进行报告。接收端每收到一个RTP流(一次会话包含多个RTP流)就产生一个接收端报告分组RR。RR分组的内容有:所收到的RTP流的SSRC;该RTP流的分组丢失率(若分组丢失率太高,发送端就应该适当地降低发送分组的速率);在该RTP流中的最后一个RTP分组的序号;分组到达时间间隔的抖动等;
发送RR分组有两个目的。第一,可以使所有的接收端和发送端了解当前网络的状态。第二,可以使所有发送RTCP分组的站点自适应地调整自己发送RTCP分组的速率,使得起控制作用的RTCP分组不要过多地影响传送应用数据的RTP分组在网络中的传输。通常是使RTCP分组的通信量不超过网络中工大数据分组的数据量的5%,而接收端的通信量又应小于所有RTCP分组的通信量的75%。
发送端报告分组SR用来使发送端周期性地向所有接收端用多播方式进行报告。发送端每发送一个RTP流就要发送一个发送端报告分组SR。SR分组的内容有:该RTP流的SSRC;该RTP流中最新产生的RTP分组的时间戳和绝对时钟时间(或墙上时钟时间wall clock time);该RTP流包含的分组数;该RTP流包含的字节数。
绝对时钟时间是必要的。因为RTP要求每一种媒体使用一个流。例如,要传送视频图像和相应的声音就需要传送两个流。有了绝对时钟时间就可以进行图像和声音的同步。
源点描述分组SDES给出会话中参加者的描述,它包含参加者的规范名CNAME(Canonical NAME)。规范名是参加者的电子邮件地址的字符串。
其他相关协议
RTCP的实现
Introduction
An RTCP implementation has three parts: the packet formats,the timing rules,and the participant database
Packet Formats:
Timing Rules:
所有的RTCP复合包被周期性送出,这个周期称为reporting interval,所有的RTCP活动都是以这个间隔发生的,除了update of source description 和lip synchronization information,以及在这个interval内发生的reception quality statistics.
Participant Database:
基于收到的RTCP包建立的.
⒈根据这个db可以填充Reception Report,并发送给对方
⒉可以维护Participant Information
⒊可以用于进行lip synchronization.
RTCP的传输
⒈必须发送RTCP compound包,
⒉odd ports,是RTP port + 1(最近不要求必须是奇数,也不要求必须大1了)
⒊所有的参与者应当送出compound packets,也接收所有其他的participants发送的compound packets,
Note that feedback is sent to all participants in a multiparty session: either unicast to a translator,which then redistributes the data,or directly via multicast. The peer-to-peer nature of RTCP gives each participant in a session knowledge of all other participants: their presence,reception quality,and—optionally—personal details such as name,e-mail address,location,and phone number.
RTCP的包格式
SR,RR,SDES,BYE,APP
通用头(固定头):4 octets
v p ic pt length(be measured in units of 32-bits word)
2 1 5 8 16
---------- p c⑻
⒈RR(Receiver Report)
Reception quality reporting:所有发送RTP数据的Sender的信息,每个block包含一个SSRC的RTP接受质量报告
PT = 201
Format:
Reporter SSRC
*{//一个Reporter Block
固定头
24 octets的内容
包括以下部分:
reportee SSRC:
cumulative number of packets lost :24bit的有符号数,从会话开始到期望收到-实际收到(可为负)
extended highest sequence number :per session
loss fraction :per interval,取整 [丢包/期望收到数目 * 256](如果丢包为负值,则结果设为0)
interarrival jitter :
last sender report timestamp(LSR) :从reportee端最后收到的Sender Report中NTP timestamp的中32bits.(无则为0)
delay since last sender report(DLSR) :最后收到SR和发送RR之间的间隔,以1/65536为单位(否则为0)
}
RR的解释
这是一个接收质量的反馈,对Sender和其他的第三方如网络的monitor等都有意义
如:
1)可以计算Round-trip Time (RR收到时间-LSR - DLSR),round-trip time的估计是很重要的
2)Lost fraction:短期内,对媒体格式的选择有参考
3)Jitter:突然增大的Jitter通常意味着丢包的开始
SR(Sender Report)
Sender Report 提供了有关Sender所发送的媒体的信息,主要用于进行多个媒体流同步等.
PT = 200
Format:
固定头
Reporter SSRC
NTP Timestamp(2 octets):发送SR的NTP
RTP Timestamp: 与previous field同一时刻,但是单位是RTP Media clock
Sender's packet count:自会话开始
Sender's octet count:自会话开始
SR的解释
计算速率等
媒体时钟和NTP时钟
⒊SDES: Source Description
用于提供参与者的详细信息,通常是人可读的,如email,电话等,依赖于应用.
PT = 202
Format:
固定头
*{
SSRC/CSRC
List of SDES items
}
Items中每个entry如下:
Type Length content
8 8
Type == 0 表示Lists结束
RFC中规定了一些Items如:CNAME,NAME,EMAIL,PHONE,LOC,TOOL,NOTE,and PRⅣ.
⒋RTCP BYE: Membership Control
通常用于指示会话中的某个成员正在离开.
但是RTCP BYE的含义在某种程度上是依赖于应用的,应用通常有其他的控制协议如SIP,H323等控制会话.
记住BYE不终止会话成员的关系,只是表示正在离开,并且不保证传输肯定到达.
PT=203
Format:
固定头
*{
SSRC
}
可选长度,可选原因
⒌RTCP APP: Application-Defined RTCP Packets
PT=204
⒍Compound Packet
以上的RTCP包从不单独发送,它们被打包成复合包(Compound Packet)来发送,有几个规则.
1)对活动的发送者(active data sender),compound必须以SR开始,否则以RR开始,即使没有数据接收和发送.后面跟着*个RR.
2)然后是SDES,SDES必须包含一个CNAME,其他可选.
3)如果有BYE的话,放到最后.其他的包可以随意.
RTCP Packet从来不单独传输,他们按照一定的规则总是组成Compound Packet来传送.下面介绍这个规则:
1)最前面可以有个可选的32位值(在RTCP compound packet加密时使用)
Security and Privacy
SDES的传输中暴露隐私,这是个问题.但是CNAME是必须的.
Packet Validation
⒈所有的包必须是复合包
⒉版本必须是2
⒊复合包开始的RTCP Packet必须是SR和RR
⒋如果需要Padding,则只有最后一个packet是padding的.
⒌所有的RTCP packets的长度必须等于复合RTCP包的长度.
相关数据库
参与者和会话的信息
⒈RTCP的全局配置信息
1)The RTP bandwidth
1)RTCP所占总带宽的比例(这意味必须知道RTP所占的总带宽):default 0.05
2)发送间隔:default 5s(最小)
3)发送部分所占的比例:default 0.025
4)The average size of all RTCP packets sent and received by this participant.
5)The number of members in the session,the number of members when this participant last sent an RTCP packet,and the fraction of those who have sent RTP data packets during the preceding reporting interval.
6)The time at which the implementation last sent an RTCP packet,and the next scheduled transmission time.
8)A flag indicating whether the implementation has sent any RTP data packets since sending the last two RTCP packets.
9)A flag indicating whether the implementation has sent any RTCP packets at all.
10)The number of packets and octets of RTP data it has sent.
11)The last sequence number it used.
12)The correspondence between the RTP clock it is using and an NTP-format timestamp.
会话中每个成员的信息
1)SSRC identifier.
2)Source description information: the CNAME is required; other information may be included (note that these values are not null-terminated,and care must be taken in their handling).
3)Reception quality statistics (packet loss and jitter),to allow generation of RTCP RR packets.
4)Information received from sender reports,to allow lip synchronization (see Chapter 7).
5)The last time this participant was heard from so that inactive participants can be timed out.
6)A flag indicating whether this participant has sent data within the current RTCP reporting interval.
7)The media playout buffer,and any codec state needed (see Chapter 6,Media Capture,Playout,and Timing).
8)Any information needed for channel coding and error recovery—for example,data awaiting reception of repair packets before it can
Timing Rules
总的目标是限制RTCP占RTP会话量的一小部分,通常是5%.在这个目标的前提下,参与者送出RTCP packet的速率是不固定的,而是变化了,如对有大量的listener的Internet Radio,客户端可能几分钟才发送,而对two-party的电话可能是几秒钟.
有一些规则可以参考,这些规则可以确保实现的可缩放性(Scalability).
⒈Reporting Interval
根据以下几个部分来计算:
1).The bandwidth allocated to RTCP:5%通常 * Session带宽
2).The average size of RTCP packets sent and received:包括所有头(UDP,IP)
3).The total number of participants and the fraction of those participants who are senders
在计算时,
SNo:Sender Number
ANo:所有参与者数目
RNo:Receiver Number
Intl:Interval
ARS:average RTCP size
RW:RTCP bandwidth
if (senders > 0 && senders <= (25% of total number of participants)
{
if (we are sending)
{
Interval = average RTCP size * senders / (25% of RTCP bandwidth)
}
else
{
Interval = average RTCP size * receivers / (75% of RTCP bandwidth)
}
}
else if ((senders = 0) or (senders > (25% of total number of participants))
{
Interval = average RTCP size * total number of members / RTCP bandwidth
}
这样可以确保Sender即使很少的情况下也可以确保25%的带宽,能够送出足够的lip synchronization信息
If (Interval < minimum interval)
{
Interval = minimum interval
}
当会话中的参与者的数目或者sender所占比例发生变化时,报告间隔应当重新计算.
⒉Basic Transmission Rules
基本的传输规则就是:
I = (Interval * random[0.5,1.5])
if (this is the first RTCP packet we are sending) {
I *= 0.5
}
next_rtcp_send_time = current_time + I
对于有很多参与者,并且数目还在变化的会话,每次发送当前的RTCP Packet后,根据得到的Participants Number来计算.
⒊Forward Reconsideration
方法:
在每次发送前,根据当前的会话信息重新计算发送时间,
if (current_time >= next_rtcp_check_time) {//1.21828是一个补偿因子
new_rtcp_send_time = (rtcp_interval() / 1.21828) + last_rtcp_send_time
if (current_time >= new_rtcp_send_time) {
send RTCP packet
next_rtcp_check_time = (rtcp_interval() /1.21828) + current_time
} else {
next_rtcp_check_time = new_send_time
}
}
⒋Reverse Reconsideration
为此,当BYE来时,立即重新计算下个包的发送时间.
⒌BYE Reconsideration
大量的BYE,为此可以:延迟BYE的发送,或者干脆不发送.
⒍Comments on Reconsideration
各个实现应该考虑这个问题,并尽可能的使用各个Reconsideration.
⒎Common Implementation Problems
1)没有正确的考虑参与者的数目,固定的Reporting Interval会导致流量呈线性增长.
2)Reporting interval没有随机化.有潜在的可能:同步他们的reports,导致
3)在带宽计算时未考虑Headers(IP,UDP)等
4)padding使用不正确
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市