• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 資訊 > 國內 >
     首頁(yè) > 資訊 > 國內 >

    完整SIP/SDP媒體協(xié)商概論-SDP基礎-會(huì )話(huà)描述說(shuō)明

    2020-03-04 09:44:26   作者:james.zhu    來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


      在上一章節 SDP基礎-使用和要求的章節中,筆者討論了關(guān)于SDP的使用場(chǎng)景和一些SDP語(yǔ)法構建。這里,我們根據SDP的規范說(shuō)明,重點(diǎn)介紹SDP具體的會(huì )話(huà)描述和媒體描述參數。
      5、SDP規范標準
      總體來(lái)說(shuō),SDP會(huì )話(huà)描述的語(yǔ)法由五個(gè)核心部分構成,它們分別是:會(huì )話(huà)元數據,流媒體,服務(wù)保障,網(wǎng)絡(luò )和安全。
      Session metadata(會(huì )話(huà)元數據)描述了會(huì )話(huà)本身所需要的數據標識,包括SDP協(xié)議版本,會(huì )話(huà)發(fā)起方描述,會(huì )話(huà)身份確認描述和會(huì )話(huà)活動(dòng)時(shí)間。
      Stream description包含了媒體功能的描述細節和參數。
      QoS描述包含了所有媒體流性能參數,它可能通過(guò)其他信息的調用對多媒體流打包支持帶寬和其他資源的優(yōu)化。
      Network description可能包括各種傳輸協(xié)議(TCP,UDP等)和網(wǎng)絡(luò )協(xié)議以便支持多媒體會(huì )議參與方之間的媒體收發(fā)。
      Security 描述包括了密鑰,簽權,認證,不可否認性,完整性?xún)热荨?/div>
      一個(gè)SDP會(huì )話(huà)描述通過(guò)媒體類(lèi)型標識為:"application/sdp"。SDP會(huì )話(huà)描述完全是一種文本格式,其格式遵從UTF-8解碼規范。其基本的語(yǔ)法規范是:
      <type>=<value>
      這里,type必須是一個(gè)大小寫(xiě)敏感的字符,value是一種具有一定結構的文本,value的格式完全取決于type的取值。通常情況下,value可以是多個(gè)值域或者一個(gè)自由文本格式。如果value包含多個(gè)值域的話(huà),通過(guò)單空格隔離。注意,“=”兩邊決定不能使用空格。
      SDP會(huì )話(huà)描述由會(huì )話(huà)級描述緊接著(zhù)零或多個(gè)媒體級的描述構成。其中,會(huì )話(huà)級描述以"v="行開(kāi)始,一直繼續到第一個(gè)媒體級的"m="行之前結束。媒體級會(huì )話(huà)描述以"m="行開(kāi)始,然后繼續到下一個(gè)媒體級或整個(gè)會(huì )話(huà)描述結束。通常來(lái)說(shuō),除非媒體級的值覆蓋默認設置,一般來(lái)說(shuō),對所有媒體來(lái)說(shuō),會(huì )話(huà)級的設置是默認的。會(huì )話(huà)描述行分為必要設置和可選設置兩個(gè)部分,其會(huì )話(huà)描述文本格式必須按照固定順序呈現,這樣可以方便處理,避免語(yǔ)法錯誤。其中,可選會(huì )話(huà)描述設置帶一個(gè)"*"字符作為標識。
      v=(protocol version) // "v" 開(kāi)始
      o=(originator and session identifier)
      s=(session name)
      i=* (session information), 可選
      u=* (URI of description)
      e=* (email address)
      p=* (phone number)
      c=* ( connection information -- not required if included in all media)
      b=* (zero or more bandwidth information lines)
      One or more time descriptions ("t=" and "r=" lines; see below)
      z=* (time zone adjustments)
      k=* (encryption key)
      a=* (zero or more session attribute lines)
      Zero or more media descriptions, 這里可能無(wú)媒體會(huì )話(huà)
      媒體描述示例:
      m=(media name and transport address) // "m" 開(kāi)始
      i=* (media title)
      c=* (connection information -- optional if included at session level)
      b=* (zero or more bandwidth information lines)
      k=* (encryption key)
      a=* (zero or more media attribute lines)
      接下來(lái),筆者重點(diǎn)介紹幾個(gè)常用的會(huì )話(huà)描述設置,主要包括會(huì )話(huà)級參數,時(shí)間和媒體級參數設置。其他的會(huì )話(huà)描述在后續具體章節中再做闡述。
      Protocol Version ("v="),其語(yǔ)法格式為:
      v=0
      "v"定義了SDP版本。此規范定義的是0,沒(méi)有子版本。
      Origin ("o="),其語(yǔ)法格式為:
      o=<username> <sess-id> <sess-version> <nettype> <addrtype>
      <unicast-address>
      "o=" 定義了會(huì )話(huà)發(fā)起方名稱(chēng),sess-id 是一個(gè)數值字符串,通過(guò)用戶(hù)名稱(chēng),sess-id,nettype,addrtype,和unicast-address構成了一個(gè)全局唯一認證ID,<sess-version>是此會(huì )話(huà)描述的版本號,<nettype>是一個(gè)文本字符串,表示網(wǎng)絡(luò )類(lèi)型,初始設置是”IN"表示Internet。<addrtype>是一個(gè)文本字符串地址,表示是IP4或IP6,也可能使用其他的值。<unicast-address>,此地址是一個(gè)創(chuàng )建此會(huì )話(huà)的機器地址。
      Session Name ("s="), 其語(yǔ)法格式為:
      s=<session name>
      "s="定義了文本會(huì )話(huà)名稱(chēng),這里必須是僅一個(gè)會(huì )話(huà)名稱(chēng),此名稱(chēng)不能為空,其字符串應該包含ISO 10646字符。
      Session Information ("i="), 其語(yǔ)法格式為:
      i=<session description>
      "i=" 提供了關(guān)于此會(huì )話(huà)的文本信息,每個(gè)會(huì )話(huà)描述必須有一個(gè)"i=",一個(gè)媒體至少有一個(gè)"i="。如果出現了"a=charset"屬性的話(huà),它會(huì )設定"i="的字符設置。如果沒(méi)有出現"a=charset"的話(huà),"i="必須包含用UTF-8解碼的ISO 1646字符。單個(gè)"i="也可以使用在每個(gè)媒體定義中。在媒體定義中,"i="的主要目的是為了標注媒體流。因此,這種標注方式對單會(huì )話(huà)環(huán)境中有同一媒體類(lèi)型,它需要支持完全不同的媒體流時(shí)非常有用。例如,兩個(gè)不同的白板功能,一個(gè)白板是支持自己的幻燈片播放,另外一個(gè)白板支持問(wèn)題答疑和回復處理。
      URI ("u="),其語(yǔ)法格式為:
      u=<uri>
      URL是WWW用戶(hù)使用的處理方式,URL應該指向一個(gè)針對此會(huì )話(huà)的其他另外資源地址。此描述是可選描述。但是,如果它出現的話(huà),它必須出現在第一個(gè)媒體前面。在每個(gè)會(huì )話(huà)描述中不允許第二個(gè)URL出現。
      Email Address 和 Phone Number ("e=" 和 "p="),其語(yǔ)法格式為:
      e=<email-address>
      p=<phone-number>
      "e=" 和 "p="定義了負責會(huì )議的聯(lián)系人信息。是否包含"e=" 和 "p="是可選的。這兩個(gè)會(huì )話(huà)描述使用不是非常廣泛。但是,如果出現了郵箱和電話(huà)號碼的話(huà),它們必須出現在第一個(gè)媒體域前面。一個(gè)會(huì )話(huà)可以支持一個(gè)或者多個(gè)郵箱或者電話(huà)號碼。電話(huà)號碼的格式必須按照ITU-T推薦格式來(lái)定義,號碼前加一個(gè)”+“前綴,并且使用”-“分離電話(huà)號碼,方便用戶(hù)閱讀。例如:
      p=+1 617 555-6011
      如果是電子郵件的話(huà),兩種格式都可以支持:
      e=j.doe@example.com (Jane Doe)
      或者
      e=Jane Doe <j.doe@example.com>
      Connection Data ("c="), 其語(yǔ)法格式為:
      c=<nettype> <addrtype> <connection-address>
      它包含一些連接數據。在會(huì )話(huà)描述中,媒體描述必須至少包含一個(gè)"c="行,或者在會(huì )話(huà)級包含一個(gè)單個(gè)"c="行。在某些應用場(chǎng)景中,預設的媒體設置可以覆蓋默認的設置會(huì )話(huà)級的參數。因此,在每個(gè)媒體會(huì )話(huà)中,"c="可以包含一個(gè)單個(gè)的會(huì )話(huà)級的"c="和其他另外的子"c="行。這里的<nettype>和<addrtype>值和前面介紹的一樣,讀者參考前面的介紹。<connection-address>是一個(gè)連接地址,在連接地址后可以增加另外的子項,這些子項取決于<addrtype>類(lèi)型(是IP4還是IP6地址)。如果會(huì )話(huà)在多播方式做工作,連接地址必須是一個(gè)多播地址組,如果會(huì )話(huà)在單播方式工作,則廣播地址是單播地址。如果會(huì )話(huà)使用的是一個(gè)多播IP4類(lèi)型的話(huà),多播連接地址必須支持存活時(shí)間(TTL),TTL取值范圍在0-255之間(例如:c=IN IP4 224.2.36.42/127,TTL是127)。注意,IP6沒(méi)有使用TTL,因此也沒(méi)有TTL設置,TTL肯定不會(huì )出現在IP4中。IP6使用的是一種繼承或層級方式來(lái)實(shí)現連接地址的處理(例如:c=IN IP6 FF15::101, 無(wú)TTL)。
      Bandwidth ("b="),其語(yǔ)法格式為:
      b=<bwtype>:<bandwidth>  // kilobits per second
      它是一個(gè)可選會(huì )話(huà)描述,表示對會(huì )話(huà)或者媒體建議使用的帶寬。帶寬類(lèi)型子項是以字母方式表示(我們這里討論的是支持兩種類(lèi)型:CT和AS,還有可能出現TIAS),針對后面的帶寬數值描述。CT和AS在創(chuàng )建使用上有明顯的不同。CT(Conference Total)表示多會(huì )話(huà)廣播中會(huì )話(huà)或者媒體使用的最大帶寬建議值,CT值相當于所有會(huì )話(huà)帶寬值。AS(Application-Specific)是指具體某個(gè)應用程序所占用的總帶寬建議值,相當于最大應用程序帶寬值,它僅值單媒體在單點(diǎn)所占用的帶寬。如果讀者對AS有興趣的話(huà),可以閱讀RFC3550-6,RFC3556-2中的RS/PR收發(fā)帶寬修改機制和RFC3890關(guān)于Bandwidth Modifier的規范說(shuō)明。
      Timing ("t="),其語(yǔ)法格式為:
      t=<start-time> <stop-time>
      它設置了啟動(dòng)和停止會(huì )話(huà)的時(shí)間。如果在非正常周期時(shí)間段啟動(dòng)會(huì )話(huà),此會(huì )話(huà)需要增加多"t="行。每個(gè)"t="支持另外一個(gè)時(shí)間段表示會(huì )話(huà)在此時(shí)間段是活動(dòng)狀態(tài)。如果會(huì )話(huà)使用在正常時(shí)間周期,"t="后面加了一個(gè)"r="行表示重復次數。這兩個(gè)時(shí)間標識使用的是NTP的十進(jìn)制的方式表示,以秒為單位。此時(shí)間規范在RFC1305中有非常明確的發(fā)明,此時(shí)間不是UNIX定義的時(shí)間,用戶(hù)可以參考轉換方式來(lái)進(jìn)一步了解如何轉換。 如果<stop-time>設置為0,則表示會(huì )話(huà)不受限,除非<start-time>后,此會(huì )話(huà)才會(huì )被啟動(dòng)。如果<start-time>設置為0,則表示此會(huì )話(huà)是一個(gè)永久會(huì )話(huà)。通常情況下,規范不建議在用戶(hù)接口或者其他應用控制界面設置這兩個(gè)時(shí)間取值,這樣會(huì )導致會(huì )話(huà)時(shí)間錯亂,會(huì )話(huà)控制失效。
      Repeat Times ("r="),其語(yǔ)法規則為:
      r=<repeat interval> <active duration> <offsets from start-time>
      它定義了對此會(huì )話(huà)的時(shí)間重復次數。"r="行的取值是根據前面的"t="決定的。
      Time Zones ("z="), 其語(yǔ)法格式為:
      z=<adjustment time> <offset> <adjustment time> <offset> …
      會(huì )話(huà)時(shí)差處理。為了對重復的會(huì )話(huà)(此會(huì )話(huà)貫穿一個(gè)白天晚上到標準時(shí)間的修改流程,或者相反處理)進(jìn)行定時(shí)處理,有必要對標準時(shí)間設定一個(gè)偏移時(shí)間數值。這樣就要求針對不同的時(shí)間對應不同的時(shí)間標準。每個(gè)國家可能都有自己的時(shí)差日期基準。因此,為了保證對同一會(huì )話(huà)在不同時(shí)期進(jìn)行定時(shí)處理,必須對數據雙方雙方明確設定一個(gè)時(shí)間基準和偏移值。
      Encryption Keys ("k="),其語(yǔ)法結構如下:
      k=<method>
      k=<method>:<encryption key>
      如果傳輸消息需要通過(guò)一個(gè)安全的傳輸方式進(jìn)行的話(huà),SDP可以用來(lái)傳輸密鑰。"k=" 行提供了一個(gè)簡(jiǎn)單的密鑰交換機制。為什么說(shuō)是簡(jiǎn)單的交換機制?因為當初設計"k="行的主要目的是考慮和舊部署規范的兼容性支持,也不是規范所推薦的使用方式。"k="本身不具有拓展性,支持不了更多傳輸參數和密鑰管理功能,一些比較新的密鑰交換機制也逐步使用在了SDP會(huì )話(huà)描述中。"k="使用仍然在更新中,一些語(yǔ)法和內容相對比較舊(例如缺少安全協(xié)議中要求的兩個(gè)密鑰的支持:confidentiality 和integrity),因此,筆者不打算在這里再展開(kāi)討論。關(guān)于"k="具體的使用方式,用戶(hù)可以通過(guò)RFC 4567規范和RFC4568做更加詳細的理解,這兩個(gè)規范中增加了更多對SDP的拓展支持。這些交換機制和密鑰管理也會(huì )使用在一些新的應用場(chǎng)景中。
      Attributes ("a="),其語(yǔ)法格式為:
      a=<attribute>
      a=<attribute>:<value>
      Attributes 表示拓展的SDP的基本含義,我們這里翻譯為特征屬性。特征屬性參數可以定義在會(huì )話(huà)級和媒體級。媒體描述中可以定義多個(gè)"a="行來(lái)定義具體的媒體特性。"a="可以出現在第一個(gè)媒體描述前,這是會(huì )話(huà)級的屬性參數,這樣的屬性是針對整個(gè)會(huì )議會(huì )議定義的,不是針對單獨媒體定義的屬性。特征Attributes屬性可以支持兩種屬性格式:
      "a=<flag>."  // 例如:"a=recvonly."
      "a=<attribute>:<value>. // 例如 "a=orient: landscape."
      特征屬性的取值取決于使用的媒體工具。特征屬性的值除了0x00 (Null),0x0A (LF),和 0x0D (CR)以外,可以是任何octet字符串。默認取值解析為ISO-10646字符形式,通過(guò)UTF-8解碼取值。如果接收方不理解已接收的特征屬性值,接收方必須忽略此特征屬性值。
      Media Descriptions ("m="): 其語(yǔ)法格式為:
      m=<media> <port> <proto> <fmt> …
      一個(gè)會(huì )話(huà)描述中可以包含多個(gè)媒體描述。每個(gè)媒體描述以"m="開(kāi)始,媒體描述結束以下一個(gè)媒體描述開(kāi)始或者以會(huì )話(huà)描述結束來(lái)結尾。一個(gè)媒體描述包含幾個(gè)媒體描述子項:
      <media>,它表示媒體類(lèi)型,目前定義的媒體類(lèi)型包括語(yǔ)音,視頻,應用程序,和消息。未來(lái)可能還有其他類(lèi)型,用戶(hù)需要密切關(guān)注。
      <port>,它是一個(gè)傳輸端口,媒體發(fā)送到此端口。此端口依賴(lài)于"c="行定義的網(wǎng)絡(luò )傳輸協(xié)議。其他被媒體應用程序使用的端口,例如RTCP端口需要根據其基準端口來(lái)設定相應的端口,或者分開(kāi)特征屬性設置。如果使用了非連續端口或者沒(méi)有遵從偶數-RTP端口,奇數-RTCP端口的規則處理的話(huà),必須增加一個(gè)"a=rtcp:"行。應用程序被發(fā)送到一個(gè)端口,此端口是一個(gè)奇數端口,并且出現"a=rtcp:"行時(shí),此媒體一定不能從RTP端口減一,應用程序必須發(fā)送RTP數據到<port>指定的端口,并且發(fā)送RTCP到"a=rtcp"屬性設定的端口。對于某些應用程序,它們的媒體流通過(guò)層級解碼發(fā)送到單播地址時(shí),它們有必要設定多個(gè)傳輸端口。使用語(yǔ)法和多播地址的方式類(lèi)似: m=<media> <port>/<number of ports> <proto> <fmt> …這種場(chǎng)景中,使用的端口依賴(lài)于傳輸協(xié)議類(lèi)型。一些讀者可能明白,通常默情況下,RTP使用偶數端口傳輸數據,它的RTCP使用高一位數的奇數端口控制RTP會(huì )話(huà)。<number of ports>表示RTP會(huì )話(huà)數量。例如:
      m=video 49170/2 RTP/AVP 31
      這里,媒體會(huì )話(huà)將設定一個(gè)視頻媒體類(lèi)型,端口從49170開(kāi)始計算,包括兩對RTP媒體會(huì )話(huà),其中第一對媒體會(huì )話(huà)是49170端 口(RTP)和 49171 端口(RTCP)。第二對是從49172(RTP)和49173端 口(RTCP)端口。RTP/AVP是傳輸協(xié)議,31是媒體格式(fmt,H261)。以上介紹的是默認環(huán)境中使 用的連續端口,如果端口使用的是非連續的端口,需要增加屬 性"a=rtcp:" 分開(kāi)獨立的端口屬性。
      <proto>,它是傳輸協(xié)議。這里的傳輸協(xié)議依賴(lài)于"c="行定義的地址類(lèi)型。目前支持的主要的幾個(gè)類(lèi)型包括:UDP,RTP/AVP,RTP/SAVP。這里專(zhuān)門(mén)針對媒體格式設定不同的傳輸協(xié)議是因為同一網(wǎng)絡(luò )協(xié)議時(shí),標準的媒體格式可以通過(guò)不同的傳輸協(xié)議來(lái)進(jìn)行傳輸。這樣的設定可以支持不同的網(wǎng)絡(luò )傳輸和滿(mǎn)足不同檢測工具部署。
      <fmt>,它表示一種媒體格式描述。前面第四個(gè)子項或者其他后續子項都表示媒體格式。媒體格式描述的解析依賴(lài)于<proto>子項的值。如果<proto> 子項是"RTP/AVP"或者"RTP/SAVP,媒體格式描述會(huì )包含RTP payload 類(lèi)型號碼。當給定了一個(gè)payload類(lèi)型列表時(shí)(靜態(tài)方式,從96-127),這表示所有的媒體格式可以適用于此會(huì )話(huà)中,但是,通常列表中的第一個(gè)格式應該作為此會(huì )話(huà)默認支持格式。如果payload類(lèi)型列表是動(dòng)態(tài)的payload類(lèi)型列表的話(huà),SDP使用"a=rtpmap:"屬性來(lái)執行一個(gè)映射(從RTP payload 類(lèi)型號碼到媒體解碼名稱(chēng)),通過(guò)媒體類(lèi)型號碼到媒體解碼名稱(chēng)的對應關(guān)系來(lái)確認payload格式。"a=fmtp:" 行可以用來(lái)設定具體的媒體格式參數。在很多應用場(chǎng)景中,用戶(hù)可以看到動(dòng)態(tài)payload不匹配導致的問(wèn)題,例如Asterisk或者FreeSWITCH的運行環(huán)境中,我們經(jīng)常看到類(lèi)似的錯誤:
      Unsupported payload type received
      關(guān)于動(dòng)態(tài)payload的規范定義,用戶(hù)可以查閱RFC3551-6。
      6、SDP屬性說(shuō)明/IANA/ABNF
      除了我們前面介紹的會(huì )話(huà)描述和媒體描述說(shuō)明以外,SDP以支持了特征屬性的拓展,通過(guò)拓展的屬性可以支持更多的屬性參數。SDP屬性支持了會(huì )話(huà)級和媒體級屬性?xún)煞N。會(huì )話(huà)級屬性顧名思義,它是針對會(huì )話(huà)層級的屬性。媒體級屬性針對媒體屬性設置所設置的屬性。大家經(jīng)常遇到的也是一些在應用場(chǎng)景中常見(jiàn)的屬性設置,我們這里也不可能做一個(gè)非常完整的歸納。因此,因為篇幅所限,筆者只能介紹一下其基本的語(yǔ)法構成:
      a=tool:<name and version of tool>
      具體在一般場(chǎng)景中看到的例如:
      a=ptime:<packet time>
      此特征屬性表示一個(gè)數據包中的媒體打包時(shí)長(cháng)的特征屬性。如果使用RTP映射的話(huà),使用的語(yǔ)法為:
      a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding
      parameters>]
      另外,為了規范SDP會(huì )話(huà)描述中的語(yǔ)法格式,讀者也需要了解幾個(gè)相關(guān)的規范,這些規范定義了SDP的語(yǔ)法規則。IANA和ABNF是在SDP規范中需要了解的基本語(yǔ)法,其中,ABNF規定了一些基本的規則,包括空格,大小寫(xiě),分割行和各種會(huì )話(huà)描述,媒體描述以及特征屬性的完整說(shuō)明。
      7、總結
      在本章節中,筆者重點(diǎn)介紹了關(guān)于SDP規范細節的會(huì )話(huà)描述部分以及相關(guān)的拓展屬性介紹。筆者通過(guò)三個(gè)子章節的篇幅,基本介紹了SDP的使用方式和要求,增加針對SDP會(huì )話(huà)描述和媒體描述的規范細節做了充分說(shuō)明和拓展介紹,并且對SDP的特征屬性已經(jīng)IANA和ABFN做了一些簡(jiǎn)單介紹。以上內容都相對比較抽象,讀者需要在實(shí)際生產(chǎn)環(huán)境中不斷練習,不斷解決排查問(wèn)題,才能對這些內容有進(jìn)一步的了解。
      到此為止,筆者已經(jīng)完整介紹了SDP的基礎和核心語(yǔ)法。這些基礎的內容為我們后續章節的介紹打下了一個(gè)比較好的基礎。在接下來(lái)的章節中,我們將首先完整介紹SDP的協(xié)商模式。
      再次說(shuō)明,因為很多約定用語(yǔ)需要翻譯成中文的含義,本文中的翻譯風(fēng)格或者理解不同可能有一些出入,希望讀者諒解。
      參考鏈接:
      https://www.rfc-editor.org/rfc/rfc3556
      https://www.rfc-editor.org/rfc/rfc3890
      https://www.rfc-editor.org/rfc/rfc4567
      關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享
      Asterisk freepbx FreeSBC技術(shù)文檔: www.freepbx.org.cn
      融合通信/IPPBX商業(yè)解決方案:www.hiastar.com
      如何使用FreeSBC,qq技術(shù)分享群:334023047, www.freesbc.cn
    【免責聲明】本文僅代表作者本人觀(guān)點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對文中陳述、觀(guān)點(diǎn)判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

    相關(guān)閱讀:

    專(zhuān)題

    CTI論壇會(huì )員企業(yè)

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 顺义区| 咸阳市| 拉萨市| 东乡族自治县| 广西| 梓潼县| 阿拉尔市| 山东省| 云龙县| 安国市| 交城县| 金堂县| 秦皇岛市| 九台市| 白银市| 永宁县| 叶城县| 咸阳市| 古田县| 五大连池市| 茌平县| 连山| 云梦县| 河曲县| 饶平县| 五峰| 承德市| 桓台县| 赣州市| 南江县| 凤山市| 皋兰县| 临泽县| 金昌市| 正宁县| 巫溪县| 沅江市| 临湘市| 德阳市| 井冈山市| 桦甸市| http://444 http://444 http://444 http://444 http://444 http://444