本發(fa)明涉及一(yi)種基于freeswitch平臺的(de)RTP會話創建(jian)方(fang)法以及系統。
背景技術:
freeswitch是一個電話的(de)(de)軟交換解決方案,是一個SIP服(fu)務(wu)器,提(ti)供多種(zhong)音頻編(bian)碼的(de)(de)支(zhi)持,以(yi)及提(ti)供對視頻編(bian)碼轉(zhuan)發的(de)(de)支(zhi)持。提(ti)供多種(zhong)應(ying)用模(mo)塊的(de)(de)支(zhi)持,可以(yi)很(hen)容(rong)易添(tian)加第(di)三(san)方的(de)(de)編(bian)碼支(zhi)持以(yi)及添(tian)加第(di)三(san)方的(de)(de)控制模(mo)塊的(de)(de)支(zhi)持。Freeswitch提(ti)供對RTP/RTCP非常全面的(de)(de)支(zhi)持。
現有freeswitch對(dui)于RTP的(de)創建(jian),大部分走(zou)的(de)SIP/H323的(de)流(liu)程。雖然是(shi)標準化的(de)協(xie)議(yi),但是(shi)在(zai)創建(jian)一(yi)個(ge)媒體會話的(de)時候,SIP協(xie)議(yi)需(xu)要邀請并協(xie)商等(deng)一(yi)系列的(de)流(liu)程,并且需(xu)要有注冊到對(dui)應的(de)SIP服務器等(deng)。而如果當僅(jin)僅(jin)需(xu)要基(ji)于freeswitch創建(jian)RTP會話,難免這些流(liu)程會比(bi)較多余。
技術實現要素:
本發明(ming)要解決的技(ji)術問題,在于(yu)提供一(yi)種基于(yu)freeswitch平(ping)臺的RTP會話(hua)創建(jian)方法以及系(xi)統,便于(yu)用戶快速建(jian)立RTP會話(hua)。
本發明(ming)之一是這(zhe)樣實現的:一種基于freeswitch平臺的RTP會話創建方(fang)法,包括如下(xia)步驟:
步驟1、本端的freeswitch平臺初始化運行,并加載MPC模塊,遠端向本端請求RTP會話;
步驟(zou)2、本端(duan)創(chuang)建(jian)會(hui)話以及流媒體,會(hui)話根據(ju)Mparams創(chuang)建(jian)媒體句(ju)柄;
步驟3、本端(duan)請求freeswitch平臺(tai)的(de)音(yin)頻(pin)端(duan)口(kou)以(yi)及視(shi)頻(pin)端(duan)口(kou),freeswitch對會話音(yin)視(shi)頻(pin)進行(xing)預處理(li);
步驟4、本端對(dui)SDP信息進行SDP協商處理,生成本地(di)SDP;
步驟5、本(ben)端向MPC模塊獲取音頻IP、音頻端口、視頻IP以及視頻端口;
步驟6、本端激活RTP通道(dao),RTP會話創(chuang)建完成(cheng)。
進(jin)一(yi)步(bu)地,所述步(bu)驟(zou)3進(jin)一(yi)步(bu)具體為(wei):本端(duan)通過(guo)調(diao)用(yong)switch_core_media_choose_port請求freeswitch平臺(tai)的音(yin)頻端(duan)口以及視(shi)頻端(duan)口,并通過(guo)調(diao)用(yong)switch_core_media_prepare_codecs以及switch_core_media_check_video_codecs使得freeswitch對會話(hua)音(yin)視(shi)頻進(jin)行預(yu)處(chu)理。
進一步地,所(suo)述(shu)步驟(zou)5進一步具體為:本端通過調用(yong)
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_PORT_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_PORT_VARIABLE);
可以(yi)分別獲取(qu)到音(yin)頻的(de)IP、端口,以(yi)及視(shi)頻的(de)IP、端口。
進(jin)(jin)一步(bu)地,所述(shu)步(bu)驟6進(jin)(jin)一步(bu)具(ju)體(ti)為:本(ben)端通過調用core API中的activate激活RTP通道,RTP會話(hua)創建完成(cheng)。
本發明之二是這樣實現的:一(yi)種(zhong)基(ji)于freeswitch平臺的RTP會話創建系統,包括(kuo)如下模(mo)塊:
初始化(hua)模(mo)塊(kuai)(kuai),本端(duan)的(de)freeswitch平臺初始化(hua)運行,并加載MPC模(mo)塊(kuai)(kuai),遠端(duan)向本端(duan)請求RTP會話;
創建(jian)(jian)模塊,本(ben)端創建(jian)(jian)會(hui)話以及流媒(mei)體,會(hui)話根(gen)據Mparams創建(jian)(jian)媒(mei)體句柄;
請(qing)求(qiu)模塊,本端(duan)請(qing)求(qiu)freeswitch平臺的音(yin)(yin)頻(pin)端(duan)口以(yi)及視頻(pin)端(duan)口,freeswitch對(dui)會話音(yin)(yin)視頻(pin)進(jin)行預處理;
SDP協商(shang)模塊,本端對SDP信(xin)息進行SDP協商(shang)處理,生成本地(di)SDP;
獲(huo)取模塊,本端(duan)向MPC模塊獲(huo)取音頻(pin)IP、音頻(pin)端(duan)口(kou)、視頻(pin)IP以及視頻(pin)端(duan)口(kou);
激活(huo)模塊,本(ben)端激活(huo)RTP通道,RTP會話創建完成。
進一步地(di),所(suo)述請(qing)求(qiu)模塊進一步具體為:本端(duan)(duan)通(tong)過調(diao)用switch_core_media_choose_port請(qing)求(qiu)freeswitch平臺的音(yin)(yin)頻端(duan)(duan)口以及視(shi)頻端(duan)(duan)口,并通(tong)過調(diao)用switch_core_media_prepare_codecs以及switch_core_media_check_video_codecs使得freeswitch對會話音(yin)(yin)視(shi)頻進行預處理。
進一(yi)步地,所述獲取(qu)模塊進一(yi)步具體為:本端通過(guo)調(diao)用
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_PORT_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_PORT_VARIABLE);
可以分別獲(huo)取到音頻的IP、端口,以及視(shi)頻的IP、端口。
進一步地(di),所述激(ji)活(huo)模(mo)塊進一步具體為:本端通(tong)過調用core API中的activate激(ji)活(huo)RTP通(tong)道,RTP會(hui)話(hua)創建完成。
本發明(ming)具有如下優(you)點:本發明(ming)一(yi)種基于freeswitch平臺的(de)RTP會(hui)話(hua)創(chuang)建方法以(yi)及系(xi)統,將freeswitch抽象成幾個簡(jian)單的(de)API,不用經過其原先(xian)的(de)SIP協(xie)商(shang)以(yi)及一(yi)些規(gui)則配置,可(ke)快(kuai)(kuai)速(su)并(bing)直接構建RTP會(hui)話(hua),可(ke)快(kuai)(kuai)速(su)并(bing)直接將RTP加入會(hui)議(yi),并(bing)能夠(gou)根據freeswitch現有的(de)實現達(da)到對SDP的(de)快(kuai)(kuai)速(su)協(xie)商(shang);能夠(gou)直接控制(zhi)freeswitch對會(hui)議(yi)進行一(yi)系(xi)列會(hui)議(yi)控制(zhi),以(yi)及能夠(gou)快(kuai)(kuai)速(su)達(da)到對媒體(ti)的(de)轉存等(deng)一(yi)系(xi)列操(cao)(cao)作(zuo),規(gui)避(bi)了原有freeswitch必須(xu)基于SIP操(cao)(cao)作(zuo)的(de)一(yi)系(xi)列繁雜的(de)操(cao)(cao)作(zuo),達(da)到快(kuai)(kuai)速(su)創(chuang)建RTP會(hui)話(hua),并(bing)且能夠(gou)將RTP會(hui)話(hua)加入會(hui)議(yi)操(cao)(cao)作(zuo)。
附圖說明
下面參照附圖結合(he)實施例對本發明作進一步的說明。
圖(tu)1是(shi)本發明的(de)一個整體時序圖(tu)。
圖(tu)2是本發(fa)明創建(jian)一個RTP會話(hua)的流程(cheng)。
具體實施方式
如圖2所示,本(ben)發明(ming)基于freeswitch平臺的RTP會話(hua)創建方法,包括如下步驟:
步驟1、本(ben)端(duan)的freeswitch平臺(tai)初始化(hua)運行,并加載(zai)MPC模塊,遠端(duan)向本(ben)端(duan)請求RTP會話;
步驟2、本端(duan)創(chuang)建會話(hua)(hua)以(yi)及流媒(mei)體(ti),會話(hua)(hua)根據Mparams創(chuang)建媒(mei)體(ti)句柄;
步驟3、本(ben)端通過調用(yong)switch_core_media_choose_port請(qing)求freeswitch平臺(tai)的音(yin)頻(pin)端口(kou)以(yi)及視頻(pin)端口(kou),并通過調用(yong)switch_core_media_prepare_codecs以(yi)及switch_core_media_check_video_codecs使得freeswitch對會話音(yin)視頻(pin)進(jin)行預處(chu)理;
步驟(zou)4、本端對SDP信息進行SDP協商(shang)處理(li),生成(cheng)本地SDP;
步驟5、本端通(tong)過調用(yong)
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_PORT_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_PORT_VARIABLE);
可以分別獲取到音頻(pin)的IP、端(duan)口,以及(ji)視頻(pin)的IP、端(duan)口;
步驟6、本端通(tong)過調(diao)用core API中的(de)activate激(ji)活RTP通(tong)道,RTP會話創建完成。
本(ben)發明(ming)之(zhi)二是這樣實現(xian)的:一種(zhong)基于freeswitch平臺的RTP會話(hua)創(chuang)建系統,包括如下模塊:
初(chu)始化模塊,本端的freeswitch平(ping)臺初(chu)始化運行(xing),并加載MPC模塊,遠端向本端請(qing)求(qiu)RTP會話;
創(chuang)建模塊,本(ben)端創(chuang)建會話以及(ji)流媒體(ti),會話根(gen)據Mparams創(chuang)建媒體(ti)句(ju)柄(bing);
請求(qiu)模塊,本端(duan)通過調用(yong)switch_core_media_choose_port請求(qiu)freeswitch平臺的音頻(pin)端(duan)口(kou)以及視(shi)頻(pin)端(duan)口(kou),并通過調用(yong)switch_core_media_prepare_codecs以及switch_core_media_check_video_codecs使得(de)freeswitch對(dui)會話音視(shi)頻(pin)進行預處理;
SDP協商模塊,本端對(dui)SDP信息進行SDP協商處理,生成本地SDP;
獲取模塊,本端(duan)通過(guo)調用
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_PORT_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_PORT_VARIABLE);
可以分別獲取到音頻的IP、端口(kou),以及(ji)視頻的IP、端口(kou);
激活模塊,本端通過(guo)調(diao)用core API中的activate激活RTP通道,RTP會話(hua)創建完成。
本發明(ming)一種具體實施(shi)方式如下:
偽代(dai)碼(ma):用偽代(dai)碼(ma)的(de)(de)形式,將如果調用freeswitch core API進行一個簡要的(de)(de)說(shuo)明;如下所示:
freeswitch現(xian)有的(de)(de)(de)(de)結構大致分為(wei)3大部(bu)分,mod為(wei)其(qi)(qi)擴(kuo)展(zhan)模塊(kuai),支持xml配(pei)置以(yi)達(da)到按需加載的(de)(de)(de)(de)功(gong)能(neng),core為(wei)freeswitch內部(bu)的(de)(de)(de)(de)核心模塊(kuai),所有的(de)(de)(de)(de)開(kai)發都基于core API。libs則是其(qi)(qi)對(dui)一(yi)(yi)些第三方庫的(de)(de)(de)(de)依賴。而在mod部(bu)分還分為(wei)applications、codecs、endpoints、formats等(deng)子部(bu)分。其(qi)(qi)中applications主要(yao)實(shi)現(xian)類(lei)似(si)會議(yi),語音(yin)信件(jian)等(deng)一(yi)(yi)系列(lie)具(ju)體的(de)(de)(de)(de)業務(wu)應用(yong)(yong)(yong),而codecs則是對(dui)一(yi)(yi)些OPUS,ILBC,H264等(deng)音(yin)視頻(pin)編碼的(de)(de)(de)(de)實(shi)現(xian)。endpoints則是用(yong)(yong)(yong)來(lai)實(shi)現(xian)與外部(bu)對(dui)接的(de)(de)(de)(de)一(yi)(yi)系列(lie)操(cao)作,包括基于sofia的(de)(de)(de)(de)SIP協議(yi),H323協議(yi)等(deng)。Mpc模塊(kuai)由于也(ye)屬于endpoints的(de)(de)(de)(de)范疇,也(ye)就是可以(yi)通過MPC的(de)(de)(de)(de)抽象來(lai)對(dui)接freeswitch,通過MPC模塊(kuai)來(lai)調用(yong)(yong)(yong)freeswitch的(de)(de)(de)(de)core API實(shi)現(xian)快速創建RTP會話(hua)的(de)(de)(de)(de)功(gong)能(neng)。
偽代(dai)(dai)(dai)碼,主要是(shi)描述如果實(shi)(shi)(shi)現(xian)(xian)mpc對freeswitch做RTP的(de)(de)(de)一個抽象操作,分別抽象成3個API,其中mpc_construct_rtp用于抽象創(chuang)建一個RTP會(hui)話,mpc_activate_rtp則用來抽象激活對應創(chuang)建的(de)(de)(de)RTP會(hui)話,mpc_destruct_rtp則是(shi)用來刪除一個抽象的(de)(de)(de)RTP會(hui)話(包括退出會(hui)議模塊(kuai)等操作),join_conf則是(shi)用來加(jia)入會(hui)議模塊(kuai)(或取余(yu)的(de)(de)(de)一些(xie)模塊(kuai),都(dou)(dou)可以(yi)通過類似的(de)(de)(de)接(jie)口來實(shi)(shi)(shi)現(xian)(xian))。這(zhe)幾(ji)個API全部都(dou)(dou)是(shi)調(diao)用freeswitch的(de)(de)(de)core API來實(shi)(shi)(shi)現(xian)(xian)的(de)(de)(de)業務功能(neng),而(er)外部的(de)(de)(de)模塊(kuai)僅(jin)需(xu)要傳遞SDP等參數信息,即可達到快速(su)創(chuang)建/激活/刪除RTP會(hui)話的(de)(de)(de)功能(neng)。注意的(de)(de)(de)是(shi),偽代(dai)(dai)(dai)碼只是(shi)大體描述下coreAPI的(de)(de)(de)一些(xie)調(diao)用流程,并沒有說(shuo)提供的(de)(de)(de)源碼能(neng)夠編譯執行,而(er)是(shi)根(gen)據core API可以(yi)達到實(shi)(shi)(shi)現(xian)(xian)效果。具體還需(xu)要進一步的(de)(de)(de)完善代(dai)(dai)(dai)碼,才(cai)能(neng)正常運行。
圖(tu)1,則簡單(dan)描述了(le)下(xia)基于(yu)偽代碼中的(de)(de)(de)(de)(de)新(xin)的(de)(de)(de)(de)(de)API進行構(gou)建(jian)一(yi)個(ge)(ge)RTP的(de)(de)(de)(de)(de)會(hui)話通路時(shi)序圖(tu)。根(gen)據現在抽(chou)象實現,僅需要提供對端(duan)的(de)(de)(de)(de)(de)SDP信息,之后調用(yong)mpc_construct_rtp快(kuai)速創建(jian)一(yi)個(ge)(ge)RTP會(hui)話,并(bing)調用(yong)mpc_activate_rtp來(lai)(lai)激活該條通路。而當想要解釋會(hui)話的(de)(de)(de)(de)(de)時(shi)候,也僅需要調用(yong)mpc_destruct_rtp即可斷(duan)開媒體會(hui)話。其中MPC并(bing)不能建(jian)立協商(shang)的(de)(de)(de)(de)(de)會(hui)話,其協商(shang)的(de)(de)(de)(de)(de)會(hui)話可以通過(guo)RTSP或SIP協議來(lai)(lai)補充(chong),圖(tu)1中簡要描述了(le)遠(yuan)端(duan)與本端(duan)通過(guo)RTSP或SIP來(lai)(lai)簡單(dan)建(jian)立會(hui)話的(de)(de)(de)(de)(de)一(yi)個(ge)(ge)過(guo)程(cheng)以及在會(hui)話處理(li)中MPC快(kuai)速創建(jian)的(de)(de)(de)(de)(de)一(yi)個(ge)(ge)時(shi)序。
圖2,則是(shi)mpc_construct_rtp抽象調(diao)用原有(you)core API的(de)(de)一(yi)個整(zheng)體(ti)的(de)(de)流程,在(zai)(zai)(zai)創建會話的(de)(de)時(shi)候,需要(yao)先預(yu)配置(zhi)Mparams,該數據(ju)結(jie)構(gou)為(wei)switch_core_media_params_t,其包含了本地的(de)(de)編解碼,RTP對(dui)應(ying)的(de)(de)出口(kou)IP,是(shi)否(fou)開啟VAD/CNG等一(yi)系(xi)列的(de)(de)參數配置(zhi),而這個可以在(zai)(zai)(zai)MPC模塊初始(shi)化,或者后期根(gen)據(ju)RTP的(de)(de)需求進(jin)行修改(gai)。以及(ji)支(zhi)持對(dui)遠端(duan)SDP的(de)(de)協商(shang)處理,也(ye)就(jiu)是(shi)在(zai)(zai)(zai)mpc_construct_rtp抽象的(de)(de)時(shi)候就(jiu)進(jin)行了對(dui)SDP的(de)(de)協商(shang),并根(gen)據(ju)流程,逐步的(de)(de)將本端(duan)的(de)(de)SDP以及(ji)媒(mei)體(ti)流都預(yu)先建立成功。當(dang)所有(you)的(de)(de)建立成功后,僅需要(yao)再調(diao)用下mpc_activate_rtp抽象,即可激活現有(you)的(de)(de)RTP通道。
如(ru)圖2,Freeswitch初始化運行并加載(zai)MPC模塊(kuai),freswitch是一個平臺,在這(zhe)邊主要(yao)(yao)用來做媒體交互,需要(yao)(yao)加載(zai)MPC的模塊(kuai),才能實現對(dui)RTP快速創建(jian);
調用switch_core_session_request請求一個新的(de)會話;向freeswitch請求一個core session會獲取到(dao)core session的(de)句柄(bing),而后續的(de)一系列操作,都需要根(gen)據該句柄(bing)進行操作;
switch_core_session_add_stream創建一(yi)個(ge)新的流媒體;Core session添(tian)加一(yi)個(ge)stream流,一(yi)個(ge)core session可以對(dui)應多(duo)個(ge)的stream(該(gai)操作(zuo),主要是往core session做一(yi)些標志(zhi)操作(zuo));
switch_media_handle_create會話根據Mparams創建媒(mei)體(ti)句柄;該API調用,就(jiu)是(shi)讓(rang)core session能夠(gou)根據mparams中的配(pei)置來配(pei)置stream基于的IP,媒(mei)體(ti)編碼,jitterbuffer等,也就(jiu)是(shi)讓(rang)MPC配(pei)置的mparams參數能夠(gou)生效(xiao);
獲(huo)取(qu)預配置(zhi)(zhi)的Mparams(主要是包含編(bian)解碼支持以及監聽(ting)IP等(deng),根(gen)據(ju)自己所需(xu)求進行配置(zhi)(zhi)修改);Mparams為(wei)switch_core_media_params_t結構體(ti),成員變量inbound_codec_string、outbound_codec_string分別用(yong)于配置(zhi)(zhi)呼(hu)入/呼(hu)出的編(bian)碼配置(zhi)(zhi),而(er)rtpip用(yong)于配置(zhi)(zhi)RTP的IP,jb_msec用(yong)于jitterbuffer等(deng),這些一(yi)般在MPC初(chu)始(shi)化(hua)的時候,都使用(yong)同一(yi)個配置(zhi)(zhi)。
switch_core_media_choose_port分別請求音視頻端口;調用該(gai)API后,freeswitch會從自己的(de)端口列(lie)表中選(xuan)取一個可用的(de)端口,來給core session句柄使用;
分別調用switch_core_media_prepare_codecs以及switch_core_media_check_video_codecs使(shi)freeswitch對(dui)(dui)會(hui)話音視頻(pin)進行預處理;調用這幾個API后,對(dui)(dui)應core session句柄(bing)的音視頻(pin)編解碼會(hui)做一(yi)個初始(shi)化操(cao)作,這樣后面如果(guo)RTP需要的編解碼才能正(zheng)常使(shi)用;
調用switch_core_media_negotiate_sdp進(jin)行對remote SDP的協商(shang)處理(li);協商(shang)remote SDP,協商(shang)完(wan)成(cheng)后,freeswitch可(ke)以根據(ju)remote SDP中的媒體信息來生成(cheng)local sdp給對應(ying)的core session句柄;
調用switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_MEDIA_PORT_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_IP_VARIABLE);
switch_channel_get_variable(channel,SWITCH_LOCAL_VIDEO_PORT_VARIABLE);
可以(yi)(yi)(yi)分別獲取(qu)到(dao)(dao)音頻的IP、端口以(yi)(yi)(yi)及(ji)視頻的IP、端口;Channel是core session對應(ying)的channel(一(yi)(yi)個(ge)session有且僅有一(yi)(yi)一(yi)(yi)對應(ying)的channel)。根據(ju)這幾個(ge)API可以(yi)(yi)(yi)分別取(qu)到(dao)(dao)IP、端口,這是與switch_core_media_choose_port以(yi)(yi)(yi)及(ji)Mparams中配置的RTPIP地址相(xiang)關的,取(qu)到(dao)(dao)這些(xie)數據(ju),用(yong)來備用(yong),但是一(yi)(yi)般是取(qu)下文(wen)中發SDP來做響應(ying);
調用switch_core_media_gen_local_sdp;生成(cheng)(cheng)local SDP;調用switch_channel_get_variable(channel,"rtp_local_sdp_str")獲(huo)取到local sdp數據(ju);上(shang)面已經可以(yi)(yi)取到IP、端口(kou)了,但是一般我(wo)們都是取SDP,因為很多協議的協商(shang)是用SDP來做(zuo)媒體協商(shang)的,而協商(shang)成(cheng)(cheng)功(gong)后,freeswitch并沒有(you)生成(cheng)(cheng)本端的sdp,需要調用下switch_core_media_gen_local_sdp,local sdp才可以(yi)(yi)生成(cheng)(cheng)出來,并根據(ju)"rtp_local_sdp_str"字段,可以(yi)(yi)獲(huo)取到core session對應channel的local sdp。
雖然以(yi)(yi)上描述了本(ben)發(fa)(fa)明的(de)(de)(de)具體(ti)實(shi)施方式,但(dan)是熟悉本(ben)技(ji)術領域的(de)(de)(de)技(ji)術人(ren)員(yuan)應(ying)當理(li)解,我們所(suo)描述的(de)(de)(de)具體(ti)的(de)(de)(de)實(shi)施例只是說明性(xing)的(de)(de)(de),而不是用于對本(ben)發(fa)(fa)明的(de)(de)(de)范(fan)圍的(de)(de)(de)限定,熟悉本(ben)領域的(de)(de)(de)技(ji)術人(ren)員(yuan)在依照本(ben)發(fa)(fa)明的(de)(de)(de)精神(shen)所(suo)作的(de)(de)(de)等效(xiao)的(de)(de)(de)修(xiu)飾以(yi)(yi)及變化,都應(ying)當涵蓋(gai)在本(ben)發(fa)(fa)明的(de)(de)(de)權利要求所(suo)保護的(de)(de)(de)范(fan)圍內(nei)。