您當(dāng)前的位置是:  首頁(yè) > 新聞 > 國(guó)內(nèi) >
 首頁(yè) > 新聞 > 國(guó)內(nèi) >

MRCP協(xié)議學(xué)習(xí)筆記-語(yǔ)音合成資源中的請(qǐng)求處理

2018-07-13 15:56:57   作者: james.zhu   來(lái)源:CTI論壇   評(píng)論:0  點(diǎn)擊:


  從今天的章節(jié)開(kāi)始,我們將逐一介紹MRCP協(xié)議棧中媒體處理方式的內(nèi)容。語(yǔ)音合成是我們今天重點(diǎn)介紹的內(nèi)容。MRCP的語(yǔ)音合成處理是對(duì)普通文本或描述文本文件,然后實(shí)時(shí)通過(guò)媒體傳輸合成的語(yǔ)音。在前面的章節(jié)中,我們?cè)?jīng)介紹過(guò)其兩種基本的類(lèi)型,為了本章節(jié)的內(nèi)容,這里我們?cè)俅位貞浺幌逻@些內(nèi)容。MRCP中的語(yǔ)音合成包括兩種基本的媒體處理類(lèi)型:一直是basicsynth,另外一種是speechsynth。前者的媒體處理類(lèi)型僅能支持簡(jiǎn)單的語(yǔ)音合成和非常有限的單詞構(gòu)成;后者則可以支持全功能的語(yǔ)音合成和豐富的單詞語(yǔ)義,同時(shí)支持文本的渲染和其語(yǔ)音轉(zhuǎn)化合成功能。此此章節(jié)和接下來(lái)的章節(jié)中,我們將重點(diǎn)介紹這兩種媒體類(lèi)型的method,事件和頭域的使用方式。
  1、在討論媒體處理類(lèi)型時(shí),我們以前也討論了SSML的描述語(yǔ)法。這些語(yǔ)法可以支持不同的媒體處理類(lèi)型和能力。首先,我們介紹一下兩個(gè)媒體資源類(lèi)型所支持的SSML語(yǔ)法格式,請(qǐng)求方法,事件消息,狀態(tài)機(jī)和一些特別的頭域。
  下面的列表中列出了兩種媒體資源類(lèi)型所支持的相應(yīng)的SSML要素以及輸入格式。
  語(yǔ)音合成的媒體資源類(lèi)型支持七個(gè)請(qǐng)求消息和兩個(gè)事件消息。七個(gè)請(qǐng)求的method分別是:
  兩個(gè)事件消息分別是:
  語(yǔ)音合成媒體資源支持一個(gè)狀態(tài)機(jī)。狀態(tài)機(jī)是由MRCP的客戶(hù)端來(lái)發(fā)起驅(qū)動(dòng),媒體資源自己本身則產(chǎn)生事件消息。
  支持的各種特別的頭域列表:
  2、現(xiàn)在,我們討論一下經(jīng)常使用的具體的method方法。SPEAK method 有兩個(gè)目的: 提供語(yǔ)音合成的輸入,然后快速發(fā)起語(yǔ)音合成和媒體流數(shù)據(jù)。在SPEAK請(qǐng)求消息體中可包含:
  • inline 的SSML描述語(yǔ)法(application/ssml+xml);
  • 外部SSML的URL或文本列表;
  • inline的文本或多外部的消息;
  3、合成媒體資源使用的是先進(jìn)先出的隊(duì)列處理機(jī)制,因此處理過(guò)程是按照順序執(zhí)行,接收順序也是如此。當(dāng)媒體資源接收到SPEAK請(qǐng)求時(shí),如果媒體資源在空閑狀態(tài),回復(fù)的響應(yīng)請(qǐng)求狀態(tài)則是IN-PROGRESS 的消息;如果媒體資源是在講話(huà)狀態(tài)或暫停狀態(tài)時(shí),響應(yīng)的請(qǐng)求返回消息則是PENDING,表示此請(qǐng)求正在隊(duì)列中。這里讀者要注意,在合成請(qǐng)求中使用的一些語(yǔ)音參數(shù)是具有一定優(yōu)先級(jí)的。最高優(yōu)先級(jí)的是SSML描述語(yǔ)言,其次是SEPAK 請(qǐng)求中的相關(guān)語(yǔ)音參數(shù):Voice-,Prosody-,Speaker-Profile 和 Speech-Language 頭;最低優(yōu)先級(jí)是會(huì)話(huà)默認(rèn)值,它們使用SET-PARAMS和其接下來(lái)的后續(xù)method請(qǐng)求。以下是一個(gè)SPEAK請(qǐng)求示例圖:
  其相應(yīng)的客戶(hù)端到服務(wù)器端響應(yīng)消息如下:
  F1(client→speechsynth):
  • MRCP/2.0338 SPEAK 3214
  • Channel-Identifier:23eb10a@speechsynth
  • Content-Type: application/ssml+xml
  • Content-Length: 213
  • <?xml version="1.0" encoding="UTF-8"?>
  • <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
  • xml:lang="en-US">
  • Please leave a message after the beep.
  • <audio src="beep.wav"/>
  • </speak>
  F2 (speechsynth → client)的回復(fù)消息如下:
  • MRCP/2.0 119 3214 200 IN-PROGRESS
  • Channel-Identifier: 23eb10a@speechsynth
  • Speech-Marker: timestamp=857206027059
  F3 (speechsynth → client):
  • MRCP/2.0 156 SPEAK-COMPLETE 3214 COMPLETE
  • Channel-Identifier: 23eb10a@speechsynth
  • Speech-Marker: timestamp=861500994355
  • Completion-Cause: 000 normal
  4。如果MRCP客戶(hù)端對(duì)語(yǔ)音資源媒體講話(huà)表示一些內(nèi)容命令時(shí),PAUSE請(qǐng)求method可以用來(lái)支持對(duì)合成媒體資源發(fā)出暫停語(yǔ)音輸出的請(qǐng)求。當(dāng)語(yǔ)音輸出暫停以后,媒體資源會(huì)響應(yīng)一個(gè)帶200 OK的狀態(tài)碼。如果在一個(gè)會(huì)話(huà)中,發(fā)出PAUSE 請(qǐng)求后,SPEAK不是一個(gè)活動(dòng)的狀態(tài),媒體資源服務(wù)器端必須對(duì)客戶(hù)端返回一個(gè)帶“Method not valid in this state” 的402 錯(cuò)誤狀態(tài)碼。如果SPEAK請(qǐng)求是在活動(dòng)狀態(tài)時(shí),服務(wù)器端則必須返回一個(gè)Active-Request-Id-List,這個(gè)頭包含已被暫停的SPEAK 請(qǐng)求ID(注意,F(xiàn)4)。以下是一個(gè)暫停的示例圖:
 
  相應(yīng)的PAUSE 請(qǐng)求消息流程圖如下:
  F1 (client → speechsynth):
  • MRCP/2.0 187 SPEAK 3215
  • Channel-Identifier: 23eb10a@speechsynth
  • Content-Type: text/uri-list
  • Content-Length: 70
  • http://www.example.com/file01.ssml
  • http://www.example.com/file02.ssml
  F2 (speechsynth → client):
  • MRCP/2.0 118 3215 200 IN-PROGRESS
  • Channel-Identifier: 23eb10a@speechsynth
  • Speech-Marker: timestamp=857206027059
  F3 (client → speechsynth):
  • MRCP/2.0 67 PAUSE 3216
  • Channel-Identifier: 23eb10a@speechsynth
  F4 (speechsynth → client):
  • MRCP/2.0 105 3216 200 COMPLETE
  • Channel-Identifier: 23eb10a@speechsynth
  • Active-Request-Id-List: 3215
  5、RESUME請(qǐng)求是對(duì)暫停的請(qǐng)求重啟。當(dāng)語(yǔ)音生產(chǎn)重啟后,服務(wù)器端會(huì)對(duì)客戶(hù)端返回一個(gè)200 消息。Active-Request-Id-List 頭中會(huì)說(shuō)明重啟的請(qǐng)求ID(注意 F6)。當(dāng)服務(wù)器端處于空閑狀態(tài)時(shí),服務(wù)器收到RESUME 請(qǐng)求時(shí),它必須返回一個(gè)“402 Method not valid in this state” 消息。以下是一個(gè)重啟的示例圖:
  這里,我們借用了前面的暫停消息流程,所以忽略了前面暫停的部分消息,僅展示重啟的消息流程(F5->F7)。
  F5(client→speechsynth):
  • MRCP/2.068 RESUME 3217
  • Channel-Identifier:23eb10a@speechsynth
  F6(speechsynth→client):
  • MRCP/2.01053217200 COMPLETE
  • Channel-Identifier:23eb10a@speechsynth
  • Active-Request-Id-List:3215
  F7(speechsynth→client):
  • MRCP/2.0155SPEAK-COMPLETE 3215 COMPLETE
  • Channel-Identifier:23eb10a@speechsynth
  • Speech-Marker:timestamp=861500994355
  • Completion-Cause:000 normal
  6、STOP請(qǐng)求是對(duì)服務(wù)器端發(fā)出停止請(qǐng)求,通知服務(wù)器端停止處理語(yǔ)音輸出。如果在請(qǐng)求的消息中沒(méi)有攜帶Active-Request-Id-List,它說(shuō)明在處理過(guò)程中的SPEAK請(qǐng)求已經(jīng)停止,任何在等待隊(duì)列中SPEAK請(qǐng)求已經(jīng)從隊(duì)列中移除。如果一個(gè)STOP請(qǐng)求成功停止了一個(gè)或多個(gè)PENDING 或IN-PROGRESS SPEAK 請(qǐng)求,則返回一個(gè)200 Success,并且在返回的200 消息中包含通過(guò)Active-Request-Id-List列出已經(jīng)成功停止的請(qǐng)求ID。以下是一個(gè)STOP 請(qǐng)求的示例圖:
  F1(client→speechsynth):
  MRCP/2.0143 SPEAK 4000
  Channel-Identifier:23eb10a@speechsynth
  Content-Type:text/plain
  Content-Length:28
  Thankyou.Pleasecallagain.
  F2(speechsynth→client):
  MRCP/2.0122 4000 200 IN-PROGRESS
  Channel-Identifier:23eb10a@speechsynth
  Speech-Marker:timestamp=857206027059
  F3(client→speechsynth):
  MRCP/2.066 STOP 4001
  Channel-Identifier:23eb10a@speechsynth
  F4(speechsynth→client):
  MRCP/2.0145 4001 200 COMPLETE
  Channel-Identifier:23eb10a@speechsynth
  Speech-Marker:timestamp=861500994355
  Active-Request-Id-List:4000
  7、如果當(dāng)一個(gè)活動(dòng)的SPEAK請(qǐng)求中攜帶了頭Kill-On-Barge-In, 并且這個(gè)值設(shè)置為true的時(shí)候,BARGE-IN-OCCURRED請(qǐng)求會(huì)明確執(zhí)行一個(gè)對(duì)STOP 請(qǐng)求的操作。BARGE-IN-OCCURRED的目的是MRCP 客戶(hù)端對(duì)媒體資源服務(wù)器端通信時(shí),對(duì)服務(wù)器端發(fā)出的一個(gè)輸入事件,例如摁了DTMF按鍵或說(shuō)話(huà)輸入觸發(fā)了收入的事件。語(yǔ)音合成資源服務(wù)器則根據(jù)輸入的數(shù)據(jù)來(lái)決定是否執(zhí)行結(jié)束輸入的流程。BARGE-IN-OCCURRED 打斷可以使用在以下兩種場(chǎng)景中:
  1. 語(yǔ)音識(shí)別引擎和語(yǔ)音合成資源是各自獨(dú)立的。
  2. 語(yǔ)音識(shí)別引擎和語(yǔ)音合成資源耦合度非常高,它們之間需要緊密配合。通?赡苁峭粡S(chǎng)家的產(chǎn)品。
  在以上的使用場(chǎng)景中,MRCP客戶(hù)端的工作方式類(lèi)似于一個(gè)proxy 代理的方式。它從服務(wù)器端接收到一個(gè)START-OF-INPUT事件,然后馬上對(duì)服務(wù)器端發(fā)送一個(gè)BARGE-IN-OCCURRED 打斷事件。如果是兩個(gè)服務(wù)器耦合度非常高的話(huà),在接下來(lái)的由客戶(hù)端發(fā)出的BARGE-IN-OCCURRED請(qǐng)求中,MRCP客戶(hù)端會(huì)添加一個(gè)Proxy-Sync-Id 頭。如果服務(wù)器端已經(jīng)開(kāi)始處理打斷事件的話(huà),這個(gè)頭會(huì)支持服務(wù)器端來(lái)決定進(jìn)一步的處理流程。在MRCP這樣的設(shè)計(jì)的目的就是MRCP客戶(hù)端無(wú)需獲悉MRCP服務(wù)器端是否直接在服務(wù)器使用了打斷的流程。
  如果BARGE-IN-OCCURRED請(qǐng)求導(dǎo)致一個(gè)或多個(gè)SPEAK請(qǐng)求結(jié)束時(shí),服務(wù)器端會(huì)返回一個(gè) 200 Success, 并且包含一個(gè)Active-Request-Id-List頭來(lái)通知結(jié)束的請(qǐng)求ID。如果沒(méi)有結(jié)束SPEAK 請(qǐng)求的話(huà),服務(wù)器端仍然返回200 Success,當(dāng)然不會(huì)包含任何Active-Request-Id-List頭值。以下示例是一個(gè)打斷過(guò)示例圖:
  這里,我們假設(shè)語(yǔ)音識(shí)別已經(jīng)通過(guò)RECOGNIZE 開(kāi)啟了識(shí)別的請(qǐng)求狀態(tài),這里沒(méi)有顯示。“internal barge-in message”使用在語(yǔ)音識(shí)別和合成服務(wù)器耦合工作的狀態(tài)中,F(xiàn)在讓我們看一下具體的消息發(fā)送流程:
  F1 (client → speechsynth):
  MRCP/2.0 376 SPEAK 9200
  Channel-Identifier: 23eb10a@speechsynth
  Content-Type: application/ssml+xml
  Content-Length: 251
  <?xml version="1.0" encoding="UTF-8"?>
  <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
  xml:lang="en-US">
  Here is your track. You may pause at anytime by simply
  saying pause.
  <audio src="track01.wav"/>
  </speak>
  F2 (speechsynth → client):
  MRCP/2.0 118 9200 200 IN-PROGRESS
  Channel-Identifier: 23eb10a@speechsynth
  Speech-Marker: timestamp=857206027059
  F3 (speechrecog → client):
  MRCP/2.0 134 START-OF-INPUT 10001 IN-PROGRESS
  Channel-Identifier:a123c31f@speechrecog
  Input-Type:speechProxy-Sync-Id:392812
  F4(client→speechsynth):
  MRCP/2.0103 BARGE-IN-OCCURRED 9201
  Channel-Identifier:23eb10a@speechsynth
  Proxy-Sync-Id:392812
  F5(speechsynth→client):
  MRCP/2.01449201 200 COMPLETE
  Channel-Identifier:23eb10a@speechsynth
  Speech-Marker:timestamp=861500994355
  Active-Request-Id-List:9200
  8、CONTROL請(qǐng)求是從客戶(hù)端發(fā)出的命令,通知語(yǔ)音合成資源服務(wù)器客戶(hù)端需要對(duì)客戶(hù)端說(shuō)出的說(shuō)話(huà)語(yǔ)音數(shù)據(jù)進(jìn)行修改。簡(jiǎn)單來(lái)說(shuō),就是客戶(hù)端通知語(yǔ)音合成服務(wù)器對(duì)剛才已說(shuō)語(yǔ)音修改通知,可能客戶(hù)端對(duì)前面講話(huà)需要調(diào)整相關(guān)數(shù)據(jù),例如可能調(diào)整說(shuō)話(huà)人速度,說(shuō)話(huà)人其他參數(shù)(Voice-或者Prosody-)等。這個(gè)調(diào)整可能完全取決于語(yǔ)音合成服務(wù)器端的功能支持,調(diào)整參數(shù)的設(shè)置通過(guò)CONTROL請(qǐng)求中添加頭值Jump-Size 來(lái)實(shí)現(xiàn)。注意,它僅能支持IN-PROGRESS SPEAK 請(qǐng)求。
  如果CONTROL應(yīng)用到了SPEAK請(qǐng)求中,服務(wù)器端回復(fù)一個(gè)200 Success消息,消息中包含Active-Request-Id-List 頭,而且?guī)б粋(gè)活動(dòng)的SPEAK 請(qǐng)求的ID。這個(gè)ID表示應(yīng)用了CONTROL的ID。如果CONTROL發(fā)出以后,沒(méi)有任何SPEAK請(qǐng)求是在IN-PROGRESS 狀態(tài)的話(huà),服務(wù)器端返回一個(gè)“402 Method not valid in this state”。
  這里有一個(gè)比較特別的情況需要大家注意。當(dāng)MRCP 客戶(hù)端在CONTROL請(qǐng)求中設(shè)定了Jump-Size 頭時(shí),此跳轉(zhuǎn)超過(guò)了當(dāng)前SPEAK請(qǐng)求起始值時(shí),這個(gè)活動(dòng)的請(qǐng)求會(huì)重新從起始值啟動(dòng),并且在響應(yīng)中包含一個(gè)Speak-Restart 為true的頭。同樣,當(dāng)MRCP 客戶(hù)端在CONTROL請(qǐng)求中設(shè)定了Jump-Size 頭時(shí),此跳轉(zhuǎn)超過(guò)了當(dāng)前SPEAK請(qǐng)求結(jié)束值時(shí),這個(gè)活動(dòng)的請(qǐng)求會(huì)馬上結(jié)束,攜帶了一個(gè)SPEAK-COMPLETE事件。以下是一個(gè)CONTROL的示例圖:
  具體的CONTROL的消息流程如下:
  F1(client→speechsynth):
  MRCP/2.0529 SPEAK 5000
  Channel-Identifier:23eb10a@speechsynth
  Content-Type:multipart/mixed;
  boundary=0a23bf1020
  Content-Length:388--0a23bf1020
  Content-Type: text/uri-list
  Content-Length: 32
  http://www.example.com/menu.ssml
  --0a23bf1020
  Content-Type: application/ssml+xml
  Content-Length: 198
  <?xml version="1.0" encoding="UTF-8"?>
  <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
  xml:lang="en-US">
  Say operator to speak with a customer representative
  </speak>
  --0a23bf1020--
  F2 (speechsynth → client):
  MRCP/2.0 118 5000 200 IN-PROGRESS
  Channel-Identifier: 23eb10a@speechsynth
  Speech-Marker: timestamp=857206027059
  F3 (client → speechsynth):
  MRCP/2.0 114 CONTROL 5001
  Channel-Identifier: 23eb10a@speechsynth
  Jump-Size: +3 Second
  Prosody-volume:+20%
  F4(speechsynth→client):
  MRCP/2.01455001 200 COMPLETE
  Channel-Identifier:23eb10a@speechsynth
  Active-Request-Id-List:5000
  Speech-Marker:timestamp=861500994355
  F5(speechsynth→client):
  MRCP/2.0156 SPEAK-COMPLETE  5000 CO MPLETE
  Channel-Identifier:23eb10a@speechsynthSpeech-Marker:timestamp=865795961651
  Completion-Cause:000normal
  9、DEFINE-LEXICON 請(qǐng)求是客戶(hù)端要求語(yǔ)音合成資源服務(wù)器加載或卸載此會(huì)話(huà)中的語(yǔ)法文件。DEFINE-LEXICON請(qǐng)求發(fā)出后,它要求當(dāng)語(yǔ)音合成資源服務(wù)器在空閑狀態(tài)時(shí),加載一些可能出現(xiàn)的大容量的語(yǔ)法文件。在請(qǐng)求中使用Load-Lexicon 頭來(lái)表示加載語(yǔ)法文件,這里默認(rèn)設(shè)置問(wèn)true,表示默認(rèn)加載;如果是false,則表示下載語(yǔ)法文件。語(yǔ)法文件的數(shù)據(jù)格式可以支持在消息體中的inline的消息數(shù)據(jù),也可以使用外部的URL(text/uri-list)支持外部的數(shù)據(jù)格式。如果DEFINE-LEXICON 請(qǐng)求失敗的話(huà),例如,因?yàn)槠脚_(tái)的不同導(dǎo)致的語(yǔ)法格式不支持或者訪(fǎng)問(wèn)出現(xiàn)問(wèn)題的話(huà),則會(huì)返回一個(gè)407 錯(cuò)誤狀態(tài)碼(407 Method or operation failed)。
  如果MRCP客戶(hù)端需要加載多個(gè)語(yǔ)法文件的話(huà),可以通過(guò)SPEAK請(qǐng)求,在請(qǐng)求中通過(guò)Lexicon-Search-Order頭來(lái)設(shè)定。頭值中可以包含外部URL或session:URIs(引入inline 數(shù)據(jù))。注意,加載語(yǔ)法文件時(shí),SSML語(yǔ)法文件的優(yōu)先級(jí)會(huì)高于Lexicon-Search-Order 設(shè)定的優(yōu)先級(jí)。以下是一個(gè)DEFINE-LEXICON的示例圖:
  我們通過(guò)一個(gè)DEFINE-LEXICON的請(qǐng)求響應(yīng)流程來(lái)整個(gè)說(shuō)明消息流程:
  F1(client→speechsynth):
  MRCP/2.0468 DEFINE-LEXICON 6999
  Channel-Identifier:23eb10a@speechsynth
  Content-ID:names@example.com
  Content-Type:application/pls+xml
  Content-Length:302<?xmlversion="1.0"encoding="UTF-8"?>
  F2 (speechsynth → client):
  MRCP/2.0 74 6999 200 COMPLETE
  Channel-Identifier: 23eb10a@speechsynth
  F3 (client → speechsynth):
  MRCP/2.0 362 SPEAK 7000
  Channel-Identifier: 23eb10a@speechsynth
  Lexicon-Search-Order: <session:names@example.com>
  Content-Type: application/ssml+xml
  Content-Length: 184
  <?xml version="1.0" encoding="UTF-8"?>
  <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
  xml:lang="en-US">
  You have a new message from Francesca.
  </speak>
  F4(speechsynth→client):
  MRCP/2.01187000 200 IN-PROGRESS
  Channel-Identifier:23eb10a@speechsynth
  Speech-Marker:timestamp=857206027059
  F5(speechsynth→client):
  MRCP/2.0156 SPEAK-COMPLETE 7000 COMPLETE
  Channel-Identifier:23eb10a@speechsynth
  Speech-Marker:timestamp=861500994355
  Completion-Cause:000 normal
  在今天的章節(jié)中,我們主要介紹了媒體資源請(qǐng)求的處理流程。MRCP 請(qǐng)求處理包含了七個(gè)主要的請(qǐng)求方式,我們針對(duì)這七個(gè)請(qǐng)求方式通過(guò)每個(gè)請(qǐng)求的基本介紹,錯(cuò)誤碼,并且結(jié)合示例圖和請(qǐng)求的流程消息來(lái)加以完整的說(shuō)明。
  在接下來(lái)的部分章節(jié)中,我們繼續(xù)介紹媒體資源的事件和一些頭域值參數(shù)設(shè)置。
     



  unimrcp-MRCP協(xié)議學(xué)習(xí)分享,QQ群號(hào):208136295
  關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的行業(yè)分享
  freepbx 技術(shù)論壇:www.ippbx.org.cn
  Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
  歐米(Omni)智能客服解決方案
  融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
  unimrcp-MRCP協(xié)議學(xué)習(xí)分享,QQ群號(hào):208136295
  關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的行業(yè)分享
  freepbx 技術(shù)論壇:www.ippbx.org.cn
  Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
  歐米(Omni)智能客服解決方案
  融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專(zhuān)題