節(jié)目切換播放方法及裝置的制造方法
【專利摘要】本發(fā)明實施例提供了節(jié)目切換播放方法及裝置,所述方法包括:接收針對節(jié)目的至少一個切換指令,將各切換指令產(chǎn)生的操作命令按序加入到命令隊列中;按序執(zhí)行命令隊列中的操作命令,并循環(huán)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量;對于每次檢測結(jié)果,若該次檢測結(jié)果為大于,則對命令隊列中的待濾除命令鏈進行過濾,按序執(zhí)行命令隊列中保留的操作命令,以根據(jù)最后一個切換指令產(chǎn)生的節(jié)目打開命令和播放開始命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放。本發(fā)明實施例,大大減少了實際執(zhí)行的操作命令,大大縮短了連續(xù)切換播放節(jié)目的延時。
【專利說明】
節(jié)目切換播放方法及裝置
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及電視技術(shù)領(lǐng)域,具體而言,本發(fā)明涉及一種節(jié)目切換播放方法及裝置。
【背景技術(shù)】
[0002]IPTV(Internet Protocol Televis1n,互聯(lián)網(wǎng)協(xié)議電視)是一種利用寬帶網(wǎng),集互聯(lián)網(wǎng)、多媒體、通訊等技術(shù)于一體,向用戶提供包括數(shù)字電視節(jié)目在內(nèi)的多種交互式服務(wù)的嶄新技術(shù)。用戶可以通過IPTV機頂盒+普通電視機的方式獲取IPTV提供的服務(wù)。
[0003]現(xiàn)有的IPTV機頂盒,其節(jié)目播放功能是通過網(wǎng)頁方式來實現(xiàn)的。
[0004]IPTV機頂盒根據(jù)節(jié)目的首頁地址向服務(wù)方的節(jié)目服務(wù)器請求獲取相關(guān)的網(wǎng)頁內(nèi)容;網(wǎng)頁通過網(wǎng)頁內(nèi)容攜帶的用于節(jié)目播放控制的JS(JavaScript)接口,調(diào)用IPTV機頂盒底層的播放器的接口來實現(xiàn)對網(wǎng)頁內(nèi)容的播放控制。
[0005]現(xiàn)有的節(jié)目切換播放方法包括:網(wǎng)頁每接收到一個針對節(jié)目的切換指令,通常會執(zhí)行下述流程:停止播放(STOP)當(dāng)前的節(jié)目、關(guān)閉(CLOSE)當(dāng)前的節(jié)目、打開(OPEN)待切換的節(jié)目(即根據(jù)網(wǎng)絡(luò)地址獲取待切換的節(jié)目數(shù)據(jù))、以及開始播放(PLAY)待切換的節(jié)目。但是,當(dāng)用戶在觀看節(jié)目時,很可能會進行連續(xù)的節(jié)目切換操作,相應(yīng)的,網(wǎng)頁則連續(xù)接收到針對節(jié)目的切換指令。
[0006]然而,本發(fā)明的發(fā)明人發(fā)現(xiàn),利用現(xiàn)有的節(jié)目切換播放方法,存在連續(xù)進行節(jié)目的切換操作造成節(jié)目播放延時較大的缺陷。例如,網(wǎng)頁在連續(xù)接收多個切換指令的情況下,會依據(jù)各切換指令內(nèi)容依次執(zhí)行現(xiàn)有的節(jié)目切換播放流程,即反復(fù)執(zhí)行下述流程:停止播放上一節(jié)目、關(guān)閉上一節(jié)目,根據(jù)網(wǎng)絡(luò)地址獲取下一節(jié)目數(shù)據(jù)、再調(diào)用播放器播放下一節(jié)目。但是,執(zhí)行一個現(xiàn)有的節(jié)目切換播放流程所花費的時間,大于接收一個切換指令所花費的時間;在連續(xù)接收多個切換指令的情況下,接收到最后一個切換指令的同時,網(wǎng)頁很可能還在執(zhí)行在先接收的切換指令所對應(yīng)的節(jié)目切換播放流程;因而容易導(dǎo)致開始播放最后一個切換指令涉及的節(jié)目與接收最后一個切換指令之間存在較大的延時,影響用戶體驗。
【發(fā)明內(nèi)容】
[0007]本發(fā)明針對現(xiàn)有的節(jié)目切換播放方式的缺點,提出一種節(jié)目切換播放方法及裝置,用以解決現(xiàn)有技術(shù)存在連續(xù)切換播放節(jié)目時延時較大的問題,以縮短節(jié)目連續(xù)切換播放的延時。
[0008]本發(fā)明的實施例根據(jù)一個方面,提供了一種節(jié)目切換播放方法,包括:
[0009]接收針對節(jié)目的至少一個切換指令,將各切換指令產(chǎn)生的操作命令按序加入到命令隊列中;
[0010]按序執(zhí)行所述命令隊列中的操作命令,并循環(huán)檢測所述命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量;
[0011 ]對于每次檢測結(jié)果,若該次檢測結(jié)果為大于,則由第二線程對所述命令隊列中的待濾除命令鏈進行過濾,按序執(zhí)行所述命令隊列中保留的操作命令,以根據(jù)最后一個切換指令產(chǎn)生的節(jié)目打開命令和播放開始命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放。
[0012]本發(fā)明的實施例根據(jù)另一個方面,還提供了一種節(jié)目切換播放裝置,包括:
[0013]入隊模塊,用于接收針對節(jié)目的至少一個切換指令,將各切換指令產(chǎn)生的操作命令按序加入到命令隊列中;
[0014]執(zhí)行模塊,用于按序執(zhí)行所述命令隊列中的操作命令;
[0015]檢測模塊,用于循環(huán)檢測所述命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量;
[0016]過濾模塊,用于對于所述檢測模塊的每次檢測結(jié)果,若該次檢測結(jié)果為大于,則對所述命令隊列中的待濾除命令鏈進行過濾;
[0017]所述執(zhí)行模塊還用于按序執(zhí)行所述命令隊列中保留的操作命令,以根據(jù)最后一個切換指令產(chǎn)生的節(jié)目打開命令和播放開始命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放。
[0018]本發(fā)明實施例中,將接收的至少一個切換指令產(chǎn)生的操作命令按序加入到命令隊列中;當(dāng)檢測出命令隊列中操作命令的數(shù)量超過預(yù)設(shè)的待濾除命令鏈中的操作命令時,確認命令隊列中很可能加入了多個切換指令產(chǎn)生的操作命令;對命令隊列中的待濾除命令鏈進行過濾,濾除了其它切換指令所產(chǎn)生的操作命令和最后一個切換指令所產(chǎn)生的部分操作命令;根據(jù)保留的最后一個切換指令的OPEN命令和PLAY命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放;大大減少了實際執(zhí)行的操作命令,在滿足用戶觀看感興趣的節(jié)目的情況下,大大縮短了連續(xù)切換播放節(jié)目的延時,能夠提升用戶體驗。
[0019]本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
【附圖說明】
[0020]本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中:
[0021 ]圖1為本發(fā)明實施例的節(jié)目切換播放系統(tǒng)的架構(gòu)示意圖;
[0022]圖2a為本發(fā)明實施例的節(jié)目切換播放方法的流程示意圖;
[0023]圖2b為本發(fā)明實施例的待濾除命令鏈過濾前的命令隊列的一個實例的示意圖;
[0024]圖2c、2d和2e都為本發(fā)明實施例的待濾除命令鏈過濾中的命令隊列的實例的示意圖;
[0025]圖3為本發(fā)明實施例的一個周期內(nèi)過濾待濾除命令鏈的特例的流程示意圖;
[0026]圖4為本發(fā)明實施例的節(jié)目切換播放裝置的內(nèi)部結(jié)構(gòu)的框架示意圖。
【具體實施方式】
[0027]下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
[0028]本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個”、“所述”和“該”也可包括復(fù)數(shù)形式。應(yīng)該進一步理解的是,本發(fā)明的說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應(yīng)該理解,當(dāng)我們稱元件被“連接”或“耦接”到另一元件時,它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這里使用的“連接”或“親接”可以包括無線連接或無線耦接。這里使用的措辭“和/或”包括一個或更多個相關(guān)聯(lián)的列出項的全部或任一單元和全部組合。
[0029]本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學(xué)術(shù)語),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語,應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣被特定定義,否則不會用理想化或過于正式的含義來解釋。
[0030]本技術(shù)領(lǐng)域技術(shù)人員可以理解,這里所使用的“終端”、“終端設(shè)備”既包括無線信號接收器的設(shè)備,其僅具備無發(fā)射能力的無線信號接收器的設(shè)備,又包括接收和發(fā)射硬件的設(shè)備,其具有能夠在雙向通信鏈路上,進行雙向通信的接收和發(fā)射硬件的設(shè)備。這種設(shè)備可以包括:蜂窩或其他通信設(shè)備,其具有單線路顯示器或多線路顯示器或沒有多線路顯示器的蜂窩或其他通信設(shè)備;PCS(Personal Communicat1ns Service,個人通信系統(tǒng)),其可以組合語音、數(shù)據(jù)處理、傳真和/或數(shù)據(jù)通信能力;PDA(Personal Digital Assistant,個人數(shù)字助理),其可以包括射頻接收器、尋呼機、互聯(lián)網(wǎng)/內(nèi)聯(lián)網(wǎng)訪問、網(wǎng)絡(luò)瀏覽器、記事本、日歷和/或GPS(Global Posit1ning System,全球定位系統(tǒng))接收器;常規(guī)膝上型和/或掌上型計算機或其他設(shè)備,其具有和/或包括射頻接收器的常規(guī)膝上型和/或掌上型計算機或其他設(shè)備。這里所使用的“終端”、“終端設(shè)備”可以是便攜式、可運輸、安裝在交通工具(航空、海運和/或陸地)中的,或者適合于和/或配置為在本地運行,和/或以分布形式,運行在地球和/或空間的任何其他位置運行。這里所使用的“終端”、“終端設(shè)備”還可以是通信終端、上網(wǎng)終端、音樂/視頻播放終端,例如可以是PDA、MID(Mobile Internet Device,移動互聯(lián)網(wǎng)設(shè)備)和/或具有音樂/視頻播放功能的移動電話,也可以是智能電視、機頂盒等設(shè)備。
[0031]本發(fā)明的發(fā)明人發(fā)現(xiàn),IPTV播放控制流程由網(wǎng)頁控制,而網(wǎng)頁是服務(wù)器端的服務(wù)方編寫的,作為終端的IPTV機頂盒通常無法獲知或預(yù)知其整體邏輯過程,無法在網(wǎng)頁播放節(jié)目的早期參與控制,自然無法進行時延優(yōu)化。
[0032]因此,本發(fā)明的發(fā)明人對IPTV機頂盒可參與控制的階段或過程進行了研究。經(jīng)過研究發(fā)現(xiàn),IPTV機頂盒從服務(wù)方的節(jié)目服務(wù)器獲取網(wǎng)頁后,從網(wǎng)頁中解析出JS函數(shù),這些JS函數(shù)可以執(zhí)行下述多個操作命令調(diào)用播放器的相應(yīng)API (Applicat1n ProgrammingInterface,應(yīng)用程序編程接口)接口: INIT(初始化)命令、OPEN(節(jié)目打開)命令、PLAY(播放開始)命令、STOP(播放停止)命令、CLOSE(節(jié)目關(guān)閉)命令、TERM(結(jié)束)命令、POS(setvidPOSit 1n,視窗位置設(shè)置)命令、V0L(setV0Lume,音量設(shè)置)命令、TRACK(setsoungTRACK,音軌設(shè)置)命令。
[0033]進一步,本發(fā)明的發(fā)明人對上述多個操作命令的耗時進行研究發(fā)現(xiàn):
[0034]INIT命令,用于調(diào)用播放器的播放節(jié)目的初始化接口,一般耗時;
[0035]OPEN命令,攜帶節(jié)目的網(wǎng)絡(luò)地址參數(shù),例如節(jié)目的URL(Uniform ResourceLocator,統(tǒng)一資源定位器),用于根據(jù)網(wǎng)絡(luò)地址獲取節(jié)目的數(shù)據(jù),在各操作命令中最為耗時;
[0036]PLAY命令,用于調(diào)用播放器的播放接口,一般耗時;
[0037]STOP命令,用于調(diào)用播放器的停止接口,一般耗時;
[0038]CLOSE命令,用于調(diào)用播放器的關(guān)閉節(jié)目接口,一般耗時;
[0039]TERM命令,用于調(diào)用播放器的播放節(jié)目的結(jié)束接口,一般耗時;
[0040]POS命令,通常用于記錄位置坐標(biāo)值,供顯示視頻時采用,基本不耗時;
[0041 ] VOL命令,用于設(shè)置音量變量,供輸出音頻時采用,基本不耗時;
[0042]TRACK命令,用于設(shè)置音軌變量,供絢麗音軌時采用,基本不耗時。
[0043]本發(fā)明的發(fā)明人對現(xiàn)有的節(jié)目切換播放過程進行分析發(fā)現(xiàn),當(dāng)用戶快速操作連續(xù)切換節(jié)目時,IPTV機頂盒中的上述線程通過網(wǎng)頁連續(xù)接收到多個切換指令,對于每個切換指令,依次產(chǎn)生多個操作命令;可能依次產(chǎn)生下述四個操作命令:ST0P、CL0SE、0PEN和PLAY命令;也可能依次產(chǎn)生下述六個操作命令:STOP、CLOSE、TERM、INIT、OPEN和PLAY命令。以產(chǎn)生的四個操作命令為例,根據(jù)ST0P、CL0SE命令對當(dāng)前播放的節(jié)目進行停播、關(guān)閉,根據(jù)OPEN命令及其中的URL從節(jié)目服務(wù)器獲取待切換節(jié)目的數(shù)據(jù),根據(jù)PLAY命令對獲取的節(jié)目數(shù)據(jù)進行播放。現(xiàn)有的節(jié)目切換播放方法,是對每一個切換指令產(chǎn)生的多個命令都進行執(zhí)行,由于執(zhí)行上述多個命令尤其是執(zhí)行OPEN命令相當(dāng)耗時,容易導(dǎo)致節(jié)目的切換播放延時較大,從而降低用戶體驗。
[0044]本發(fā)明的發(fā)明人進一步分析用戶的需求發(fā)現(xiàn),當(dāng)用戶進行快速連續(xù)的節(jié)目切換時,實際上用戶是對最初播放的以及切換過程中的節(jié)目都不感興趣,而對最后一次切換的節(jié)目比較感興趣,因此選擇停止切換、觀看最后一次切換的節(jié)目;可以推得,上述現(xiàn)有的節(jié)目切換播放過程中,最后一個切換指令之前的其它切換指令產(chǎn)生的操作命令大部分是無效的,響應(yīng)其它切換指令所花費的時間大部分是無效耗時。
[0045]基于上述分析,本發(fā)明實施例中,接收針對節(jié)目的至少一個切換指令,將各切換指令產(chǎn)生的操作命令按序加入到命令隊列中;按序執(zhí)行命令隊列中的操作命令,并循環(huán)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量;對于每次檢測結(jié)果,若該次檢測結(jié)果為大于,則由第二線程對命令隊列中的待濾除命令鏈進行過濾,按序執(zhí)行命令隊列中保留的操作命令,以根據(jù)最后一個切換指令產(chǎn)生的OPEN命令和PLAY命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放。容易看出,本發(fā)明實施例中,保留了最后一個切換指令的OPEN和PLAY命令,濾除了其它切換指令所產(chǎn)生的OPEN和PLAY命令、以及切換指令之間的STOP、CLOSE命令,以及TERM和INIT命令;大大減少了實際執(zhí)行的操作命令,在滿足用戶觀看感興趣的節(jié)目的情況下,大大縮短了節(jié)目切換播放的延時,提升了用戶體驗。
[0046]此外,本發(fā)明的發(fā)明人還發(fā)現(xiàn),現(xiàn)有方法運行單個線程完成所有的節(jié)目切換播放的步驟,通常容易阻塞節(jié)目切換時網(wǎng)頁頁面的刷新。例如,線程在先執(zhí)行OPEN命令的步驟,在后執(zhí)行網(wǎng)頁刷新步驟用于在網(wǎng)頁上顯示諸如節(jié)目號等其他信息;由于執(zhí)行OPEN命令的過程較為耗時,導(dǎo)致后續(xù)網(wǎng)頁刷新步驟被阻塞,無法及時顯示待切換的節(jié)目號等信息,容易導(dǎo)致用戶體驗不佳。
[0047]而本發(fā)明實施例中,進行了線程分工,第二線程專門負責(zé)過濾和執(zhí)行命令隊列中的操作命令,第一線程負責(zé)執(zhí)行其它工作包括網(wǎng)頁刷新,即使第二線程發(fā)生阻塞也不會影響第一線程執(zhí)行的工作,可以維持網(wǎng)頁的刷新,保證網(wǎng)頁上及時顯示待切換的節(jié)目的信息等需要顯示的信息供用戶參考,進一步提升用戶的體驗。
[0048]下面結(jié)合附圖具體介紹本發(fā)明實施例的技術(shù)方案。
[0049]本發(fā)明實施例中,提供了一種節(jié)目切換播放系統(tǒng),該系統(tǒng)的架構(gòu)示意圖如圖1所示,包括:1PTV(Internet Protocol Televis1n,互聯(lián)網(wǎng)協(xié)議電視)設(shè)備和節(jié)目服務(wù)器。
[0050]其中,IPTV設(shè)備可以包括多個。IPTV設(shè)備可以是下述設(shè)備之一:連接有顯示設(shè)備的IPTV機頂盒、具有IPTV功能的智能電視、臺式電腦、筆記本電腦、智能手機、平板電腦、電子閱讀器、PDA(Personal Digital Assistant,個人數(shù)據(jù)助手)等。
[0051 ] IPTV設(shè)備可以有線方式接入互聯(lián)網(wǎng),也可以無線方式接入互聯(lián)網(wǎng)。
[0052]無線連接可以是下述至少一種連接方式:WiFi(Wireless Fidelity,無線保真)網(wǎng)絡(luò)、3G(3rd_Generat1n wireless telephone technology,第三代無線電話技術(shù))網(wǎng)絡(luò)、LTE(Long Term Evolut1n,長期演進)網(wǎng)絡(luò)等。
[0053]服務(wù)方的節(jié)目服務(wù)器通過有線方式接入互聯(lián)網(wǎng)。具體地,節(jié)目服務(wù)器中的服務(wù)器可以有線方式接入互聯(lián)網(wǎng)的廣域網(wǎng)或者主干網(wǎng)。例如,節(jié)目服務(wù)器中的服務(wù)器通過光纖接入互聯(lián)網(wǎng)的廣域網(wǎng)。
[0054]本發(fā)明實施例中,IPTV設(shè)備預(yù)先在節(jié)目服務(wù)器中進行注冊,注冊的具體方法為本領(lǐng)域技術(shù)人員所熟知,此處不再贅述。
[0055]IPTV設(shè)備開機后自動接入網(wǎng)絡(luò),與服務(wù)方的節(jié)目服務(wù)器建立網(wǎng)絡(luò)連接,建立網(wǎng)絡(luò)連接的具體方法為本領(lǐng)域技術(shù)人員所熟知,此處不再贅述。
[0056]下面介紹本發(fā)明實施例中提供的節(jié)目切換播放方法,該方法的流程示意圖如圖2a所示,包括如下步驟:
[0057]S201:接收針對節(jié)目的至少一個切換指令,將各切換指令產(chǎn)生的操作命令按序加入到命令隊列中。
[0058]IPTV設(shè)備運行第一線程,將其內(nèi)置的瀏覽器加載到第一線程中;第一線程通過瀏覽器登錄節(jié)目服務(wù)器,從節(jié)目服務(wù)器獲取用于播放節(jié)目的網(wǎng)頁,從獲取的網(wǎng)頁中解析出用于調(diào)用播放器API接口的多種JS函數(shù);初始化播放器,創(chuàng)建第二線程。
[0059]第一線程通過瀏覽器網(wǎng)頁接收到用戶輸入的針對首個節(jié)目的播放指令后,通過JS函數(shù)調(diào)用播放器API接口而按序產(chǎn)生多個操作命令,將播放指令依次產(chǎn)生的多個操作命令加入命令隊列,但不執(zhí)行這些操作命令,而是向網(wǎng)頁立即返回這些操作命令執(zhí)行成功的消息。
[0060]實際上,播放指令可能會依次產(chǎn)生不同的多個操作命令。例如,播放指令可能依次產(chǎn)生OPEN命令、PLAY命令。再如,播放指令可能依次產(chǎn)生INIT命令、OPEN命令和PLAY命令。
[0061]IPTV設(shè)備中的第一線程,通過加載在其中的瀏覽器網(wǎng)頁接收針對節(jié)目的至少一個切換指令。
[0062]較佳地,第一線程接收兩個以上時間間隔小于時間間隔閾值的切換指令。本領(lǐng)域技術(shù)人員可以根據(jù)下述至少一項,預(yù)先確定并設(shè)置時間間隔閾值:經(jīng)驗、歷史數(shù)據(jù)、實驗數(shù)據(jù)、實際情況。例如,將時間間隔閾值設(shè)置為幾秒、十幾秒、或幾十秒等。當(dāng)相鄰兩個切換指令之間的時間間隔小于時間間隔閾值時,可以確認接收到了用戶快速連續(xù)輸入的切換指令??梢岳斫猓脩艋ㄙM了較短的時間來大概了解前一個切換指令涉及的節(jié)目的內(nèi)容,并確定出對該節(jié)目的內(nèi)容不是很感興趣或者并不是期望觀看的節(jié)目,因此輸入后一個切換指令。
[0063]本發(fā)明實施例中的節(jié)目包括直播節(jié)目和/或非直播節(jié)目。
[0064]本發(fā)明的發(fā)明人注意到,由于直播頻道的節(jié)目編排,包括播放節(jié)目的內(nèi)容題材、數(shù)目和先后順序等,通常是由服務(wù)方?jīng)Q定的;用戶通常無法對同一直播頻道的節(jié)目進行切換;因此,用戶通常以切換頻道(即換臺)的方式切換直播節(jié)目。也就是說,針對直播節(jié)目,接收到用戶針對頻道的切換指令時,即確認接收到用戶針對節(jié)目的切換指令。
[0065]針對接收的每個切換指令,第一線程檢測到網(wǎng)頁在接收到該切換指令后通過JS函數(shù)調(diào)用播放器的API接口時,按序產(chǎn)生多個操作命令。
[0066]本領(lǐng)域技術(shù)人員可以理解,一個切換指令產(chǎn)生的操作命令的數(shù)目、具體的操作命令、以及操作命令的先后順序等,都是由服務(wù)方提供的網(wǎng)頁內(nèi)容決定的。因此,當(dāng)服務(wù)方更新網(wǎng)頁內(nèi)容后,切換指令產(chǎn)生的操作命令可能發(fā)生變化;或者,不同服務(wù)方的網(wǎng)頁內(nèi)容對于同一切換指令可能產(chǎn)生不同的操作命令。
[0067]例如,一個切換指令按序產(chǎn)生下述四個操作命令:針對當(dāng)前節(jié)目的STOP命令和CLOSE命令、以及針對待切換節(jié)目的OPEN命令和PLAY命令。
[0068]再如,一個切換指令按序產(chǎn)生下述六個操作命令:針對當(dāng)前節(jié)目的STOP命令、CLOSE命令和TERM命令,以及針對待切換節(jié)目的INIT命令、OPEN命令和PLAY命令。
[0069]第一線程對于每個切換指令,將該切換指令按序產(chǎn)生的多個操作命令,按序加入到命令隊列中。
[°07°] 具體地,由于命令隊列具有FIF0(First In First Out,先入先出)的功能。因此,第一線程對于每個切換指令,將該切換指令首先產(chǎn)生的操作命令加入到命令隊列的隊尾;將命令隊列中的各操作命令整體向隊頭步進一個操作命令的位置后,再將該切換指令產(chǎn)生的下一個操作命令加入到命令隊列的隊尾;采用同樣的方法,將該切換指令依次產(chǎn)生的各操作命令加入到命令隊列中。采用同樣的方法,將多個切換指令各自產(chǎn)生的操作命令按序加入到命令隊列中。
[0071]例如,如圖2b所示的命令隊列是一個待濾除命令鏈過濾前的命令隊列實例;該命令隊列中左起(即從隊頭位置開始)第一個OPEN命令和PLAY命令都產(chǎn)生于針對首個節(jié)目的播放指令;向右(隊尾)查看,第一個STOP命令和CLOSE命令以及第二個OPEN命令和PLAY命令產(chǎn)生于第一個切換指令,指示有“換臺開始”的第一個STOP命令是第一個切換命令所首先產(chǎn)生的操作命令,指示有“第二次播放”的第二個OPEN命令對應(yīng)第一個切換指令;繼續(xù)向右查看,第二個STOP命令和CLOSE命令以及第三個OPEN命令和PLAY命令產(chǎn)生于第二個切換指令。
[0072]較佳地,本發(fā)明實施例中的命令隊列中設(shè)置有多個信息單元;每個信息單元包括:操作命令存儲區(qū)及操作命令的標(biāo)記位;標(biāo)記位默認初始化為保留。較佳地,信息單元還包括操作命令的參數(shù)列表。
[0073]第一線程對于每個切換指令的操作命令,將該操作命令加入到命令隊列的一個信息單元的操作命令存儲區(qū)中,并將該信息單元中該操作命令的標(biāo)記位初始化為保留。若該操作命令攜帶有參數(shù),例如OPEN命令攜帶有節(jié)目的網(wǎng)絡(luò)地址參數(shù),則將該操作命令攜帶的參數(shù)加入到該信息單元的參數(shù)列表中。
[0074]更優(yōu)的,在接收針對節(jié)目的至少一個切換指令的過程中,由第一線程還可以接收至少一個設(shè)置指令。
[0075]針對接收的每個設(shè)置指令,第一線程檢測到網(wǎng)頁在接收到該設(shè)置指令后通過JS函數(shù)調(diào)用播放器的API接口時,產(chǎn)生下述操作命令之一:POS命令、VOL命令、TRACK命令;接收該操作命令作為該設(shè)置指令產(chǎn)生的操作命令。
[0076]設(shè)置指令通常位于播放指令與切換指令之間、或者相鄰切換指令之間,第一線程還可以將各切換指令和設(shè)置指令產(chǎn)生的操作命令按序加入到命令隊列中。
[0077]例如,第一線程按序接收到播放指令、針對視窗位置的設(shè)置指令、針對音量的設(shè)置指令、以及第一個切換指令,按序?qū)⒉シ胖噶町a(chǎn)生的OPEN命令和PLAY命令、針對視窗位置的設(shè)置指令產(chǎn)生的POS命令、針對音量的設(shè)置指令產(chǎn)生的VOL命令、第一個切換指令產(chǎn)生的STOP、CLOSE、OPEN和PLA Y命令加入到命令隊列中;形成如圖2b所示的待濾除命令鏈過濾前的命令隊列實例,即該命令隊列左起(從隊頭開始)第一個OPEN命令和PLAY命令屬于播放指令,第一個POS命令和VOL命令分別屬于兩個設(shè)置指令,第一個STOP命令和CLOSE命令以及第二個OPEN命令和PLAY命令屬于第一個切換指令。
[0078]第一線程將各切換指令產(chǎn)生的操作命令加入命令隊列的過程中,每加入一個操作命令,及時向加載于第一線程中瀏覽器網(wǎng)頁返回執(zhí)行成功的消息,使得第一線程能夠避免受到實際執(zhí)行操作命令的阻塞,使得第一線程能夠繼續(xù)對網(wǎng)頁調(diào)用其它JS函數(shù)等任務(wù)進行響應(yīng),使得網(wǎng)頁及時顯示節(jié)目播放內(nèi)容之外的信息(例如節(jié)目號等),以提升用戶的體驗。
[0079]S202:按序執(zhí)行命令隊列中的操作命令,并循環(huán)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量;對于每次檢測結(jié)果,若該次檢測結(jié)果為大于,則執(zhí)行步驟S203;若該次檢測結(jié)果為不大于,繼續(xù)執(zhí)行本步驟。
[0080]IPTV設(shè)備運行第二線程,由第二線程循環(huán)獲取命令隊列中位于對頭的操作命令并執(zhí)行。
[0081 ]并且,第二線程根據(jù)預(yù)設(shè)的循環(huán)條件,循環(huán)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量。
[0082]本發(fā)明實施例中,待濾除命令鏈?zhǔn)歉鶕?jù)播放命令和切換命令產(chǎn)生的操作命令預(yù)先確定的。待濾除命令鏈包括:操作命令的數(shù)量、操作命令的內(nèi)容、以及操作命令之間的順序。
[0083]例如,若播放命令依次產(chǎn)生OPEN和PLAY命令,切換命令依次產(chǎn)生ST0P、CL0SE、0PEN和PLAY命令,則待濾除命令鏈依次包括:針對在先節(jié)目的CLOSE和STOP命令、以及針對在后節(jié)目的PLAY和OPEN命令。
[0084]再如,若播放命令依次產(chǎn)生INIT、0ΡΕΝ和PLAY命令,切換命令依次產(chǎn)生ST0P、CL0SE、TERM、ΙΝΙΤ、0ΡΕΝ和PLAY命令,則待濾除命令鏈依次包括:針對在先節(jié)目的TERM、CLOSE和STOP命令、以及針對在后節(jié)目的PLAY、0PEN和INIT命令。
[0085]本發(fā)明實施例中的待濾除命令鏈包括但不限于上述例子,本領(lǐng)域技術(shù)人員可以根據(jù)播放命令和切換命令實際產(chǎn)生的操作命令,來確定待濾除命令鏈。
[0086]較佳地,第二線程確定出已執(zhí)行預(yù)設(shè)數(shù)目的操作命令后,確定達到循環(huán)條件,檢測一次命令隊列中當(dāng)前操作命令的數(shù)量,并判斷命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量。
[0087]較佳地,第二線程確定出已達到預(yù)設(shè)的循環(huán)間隔時間后,確定達到循環(huán)條件,檢測一次命令隊列中當(dāng)前操作命令的數(shù)量,并判斷命令隊列中當(dāng)前操作命令的數(shù)量是否大于待濾除命令鏈中操作命令的數(shù)量。進一步,達到循環(huán)間隔時間后,若第二線程仍在執(zhí)行操作命令,則可以待該操作命令執(zhí)行完畢后再進行操作命令的數(shù)量檢測,或者中止執(zhí)行該操作命令后再進行操作命令的數(shù)量檢測,本領(lǐng)域技術(shù)人員可以根據(jù)實際情況進行選擇。
[0088]第二線程對于每次檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于待濾除命令鏈中操作命令的數(shù)量的檢測結(jié)果,若該次檢測結(jié)果為不大于,則第二線程繼續(xù)執(zhí)行本步驟,即第二線程繼續(xù)按序執(zhí)行命令隊列中的操作命令,并繼續(xù)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于待濾除命令鏈中操作命令的數(shù)量。
[0089]容易看出,一方面,在確定命令隊列中是否存在待濾除命令鏈之前,命令隊列中的操作命令可能已經(jīng)被開始執(zhí)行,導(dǎo)致命令隊列中的操作命令(包括操作命令的數(shù)量)發(fā)生變化。另一方面,由于第一線程與第二線程互相獨立工作,用戶可能會間隔一段時間后繼續(xù)輸入切換指令,此時步驟S202與步驟S201在執(zhí)行時間上存在交疊;因此仍有可能會有新的操作命令加入到命令隊列中,導(dǎo)致命令隊列中的操作命令(包括操作命令的數(shù)量)發(fā)生變化。
[0090 ]因此,命令隊列中的隊頭的操作命令可能是OPEN命令,也可能是CLOSE或者STOP等其它操作命令。例如,如圖2d所示的待濾除命令鏈過濾中的命令隊列的一個實例,該命令隊列中左側(cè)(即隊頭位置)的操作命令為CLOSE命令。再如,如圖2e所示的待濾除命令鏈過濾中的命令隊列的一個實例,該命令隊列中左側(cè)(即隊頭位置)的操作命令為STOP命令。
[0091]因此,IPTV設(shè)備中的第二線程需要檢測當(dāng)前時刻命令隊列中的操作命令的數(shù)量,作為命令隊列中當(dāng)前操作命令的數(shù)量。
[0092]IPTV設(shè)備運行第二線程循環(huán)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于待濾除命令鏈中操作命令的數(shù)量;對于每次檢測結(jié)果,若該次檢測結(jié)果為大于,則執(zhí)行步驟S203o
[0093]S203:對命令隊列中的待濾除命令鏈進行過濾。
[0094]具體地,IPVT設(shè)備中的第二線程從命令隊列的隊尾開始指向隊頭,依次獲取操作命令。
[0095]每獲取一個操作命令,若判斷出該操作命令可歸屬于待濾除命令鏈,則將該操作命令標(biāo)記為濾除;每獲取一個待濾除命令鏈,將該待濾除命令鏈中最靠近隊頭的操作命令的位置作為當(dāng)前的邊界位置;直到完成隊頭的操作命令的歸屬判斷和標(biāo)記。
[0096]可以理解,當(dāng)一個操作命令的內(nèi)容、順序都與待濾除命令鏈中的操作命令相符合時,可以判斷出該操作命令可能歸屬于待濾除命令鏈。可能歸屬于待濾除命令鏈的意思在于,若后續(xù)獲取的其它操作命令能夠補全該待濾除命令鏈,說明該待濾除命令鏈完整,該操作命令歸屬于該待濾除命令鏈;若后續(xù)獲取的其它操作命令無法補全該待濾除命令鏈,說明該待濾除命令鏈實際上是不存在的,該操作命令不屬于待濾除命令鏈。
[0097]若命令隊列的隊頭與邊界位置之間、標(biāo)記為濾除的多個操作命令構(gòu)成一個待濾除命令鏈,則刪除命令隊列中標(biāo)記為濾除的操作命令。
[0098]若命令隊列的隊頭與邊界位置之間、標(biāo)記為濾除的多個操作命令未構(gòu)成一個待濾除命令鏈,則由第二線程將未構(gòu)成待濾除命令鏈的操作命令都修改為保留。
[0099]本步驟中對命令隊列中的待濾除命令鏈進行過濾的具體方法將在后續(xù)進行詳細說明,此處不再贅述。
[0100]事實上,對待濾除命令鏈包括CLOSE、STOP、PLAY和OPEN命令的情況,對命令隊列中的待濾除命令鏈進行過濾后,命令隊列中保留了最后一個切換指令產(chǎn)生的OPEN命令和PLAY命令;命令隊列中的其它切換指令產(chǎn)生的OPEN命令和PLAY命令、以及切換指令之間的STOP命令和CLOSE命令都被濾除。
[0101]例如,如圖2c所示的待濾除命令鏈過濾中的命令隊列實例,該命令隊列實例中最靠近命令隊列右側(cè)(即隊尾)的OPEN命令和PLAY命令,是最后一次(第二次)切換命令所產(chǎn)生的;該OPEN命令和PLAY命令都標(biāo)注有“有效命令”表示該OPEN命令和PLAY命令都被保留。
[0102]較佳地,由于執(zhí)行POS命令、VOL命令或TRACK命令基本不耗時,因此將命令隊列中的POS命令、VOL命令和TRACK命令都標(biāo)記為保留。也就是說,命令隊列中保留了全部的POS命令、VOL命令和TRACK命令。
[0103]例如,如圖2d所示的待濾除命令鏈過濾中的命令隊列的一個實例,該命令隊列中左側(cè)(靠近隊頭)的CLOSE、OPEN和PLAY命令屬于第一個切換指令;中間的STOP、CLOSE、OPEN和PLAY命令屬于第二個切換指令;右側(cè)(靠近隊尾)的ST0P、CL0SE、0PEN和PLAY命令屬于第三個切換指令(最后一個切換指令)。標(biāo)注有“有效命令”的操作命令被保留,未標(biāo)注“有效命令”的操作命令被濾除。
[0104]可以理解,將操作命令標(biāo)注為“有效命令”是將操作命令標(biāo)記為保留的具體表現(xiàn)形式之一;不對操作命令標(biāo)注“有效命令”是將操作命令標(biāo)記為濾除的具體表現(xiàn)形式之一,即表明該操作命令為無效命令。
[0105]再如,如圖2e所示的待濾除命令鏈過濾中的命令隊列的一個實例,該命令隊列中左側(cè)(靠近隊頭)的STOP、CLOSE、OPEN和PLAY命令屬于第一個切換指令;中間的STOP、CLOSE、OPEN和PLA Y命令屬于第二個切換指令;右側(cè)(靠近隊尾)的STOP、CLOSE、OPEN和PLA Y命令屬于第三個切換指令(最后一個切換指令)。標(biāo)有“有效命令”的操作命令被保留,未標(biāo)有“有效命令”的操作命令被濾除。
[0106]S204:按序執(zhí)行命令隊列中保留的操作命令,以根據(jù)最后一個切換指令產(chǎn)生的OPEN命令和PLAY命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放。
[0107]較佳地,命令隊列中保留的操作命令,除了包括最后一個切換指令產(chǎn)生的OPEN命令和PLAY命令之外,還包括靠近隊頭的STOP和CLOSE命令或者ST0P、CL0SE、TERM和INIT命令;進一步,命令隊列中保留的操作命令還包括下述命令之一:POS命令、VOL命令、TRACK命令。
[0108]第二線程若從命令隊列中獲取到POS命令,則根據(jù)POS命令攜帶的位置參數(shù),設(shè)置播放節(jié)目數(shù)據(jù)的視窗的位置。
[0109]第二線程若從命令隊列中獲取到VOL命令,則根據(jù)VOL命令攜帶的音量值,設(shè)置節(jié)目數(shù)據(jù)的輸出音量。
[0110]第二線程若從命令隊列中獲取到TRACK命令,則根據(jù)TRACK命令攜帶的音軌參數(shù),設(shè)置音軌用于輸出節(jié)目數(shù)據(jù)中的音頻數(shù)據(jù)。
[0111]第二線程獲取命令隊列中保留的最后一個切換指令產(chǎn)生的OPEN命令,根據(jù)該OPEN命令攜帶的節(jié)目的網(wǎng)絡(luò)地址參數(shù),例如URL,從節(jié)目服務(wù)器獲取相應(yīng)的節(jié)目數(shù)據(jù)。較佳地,獲取的節(jié)目數(shù)據(jù)為流媒體形式的節(jié)目數(shù)據(jù)。
[0112]第二線程獲取命令隊列中保留的最后一個切換指令產(chǎn)生的PLAY命令,根據(jù)該PLAY命令播放對獲取的節(jié)目數(shù)據(jù)進行播放。
[0113]可以理解,本發(fā)明實施例中不對命令隊列中最后一個切換指令之前的全部或者大部分切換指令產(chǎn)生的操作命令進行響應(yīng),而是主要執(zhí)行最后一個切換指令產(chǎn)生的OPEN命令和PLAY命令,節(jié)省了響應(yīng)多個切換指令的耗時,大大加快了用戶所期望的節(jié)目的切換播放速度,提升了節(jié)目切換播放的效率,從而能夠提升用戶的體驗。
[0114]在實際應(yīng)用中,上述步驟S204之后,或步驟S204執(zhí)行過程中,可能會接收用戶后續(xù)輸入的至少一個針對節(jié)目的切換指令。此時,跳轉(zhuǎn)到步驟S201開始執(zhí)行下一個如圖2a所示的節(jié)目切換播放方法的整體流程。
[0115]下面以一個待濾除命令鏈依序包括CLOSE命令、STOP命令、PLAY命令和OPEN命令為例,具體介紹上述步驟S203中對命令隊列中的待濾除命令鏈進行過濾的具體方法,該方法包括:由第二線程將迭代器指向隊尾的信息單元,并周期性過濾待濾除命令鏈。
[0116]其中,一個周期內(nèi)過濾待濾除命令鏈的流程示意圖如圖3所示,包括如下步驟:
[0117]S301:獲取迭代器當(dāng)前指向的信息單元的操作命令,判斷是否獲取到CLOSE命令;若是,則執(zhí)行步驟S302;否則執(zhí)行步驟S307。
[0118]具體地,第一線程獲取迭代器當(dāng)前指向的信息單元中的操作命令后,將獲取的操作命令與預(yù)設(shè)的作為期望命令的CLOSE命令進行比較,判斷獲取的操作命令是否與CLOSE命令一致;若是,則確認獲取到CLOSE命令,執(zhí)行步驟S302;否則,確認未獲取到CLOSE命令,執(zhí)行步驟S307。
[0119]其中,迭代器(iterator)是一種對象,它能夠用來遍歷標(biāo)準(zhǔn)模板庫容器(例如本發(fā)明實施例中的命令隊列)中的部分或全部元素,每個迭代器對象代表容器中的確定的地址。迭代器修改了常規(guī)指針的接口,所謂迭代器是一種概念上的抽象。迭代器有很多不同的能力,它可以把抽象容器和通用算法有機的統(tǒng)一起來。
[0120]迭代器提供一些基本操作符,例如*、++、==、!=、=等。這些操作符涉及的操作和C/C++“操作array元素”時的指針接口一致。不同之處在于,迭代器是個所謂的復(fù)雜的指針,具有遍歷復(fù)雜數(shù)據(jù)結(jié)構(gòu)的能力。
[0121 ] S302:將CLOSE命令的標(biāo)記位設(shè)置為濾除后,獲取迭代器減一后指向的信息單元的操作命令,并判斷是否獲取到STOP命令;若是,則執(zhí)行步驟S303;否則執(zhí)行步驟S308。
[0122]具體地,第一線程將CLOSE命令的標(biāo)記位設(shè)置為濾除,將迭代器減一,即將迭代器指向的位置向隊頭方向移動一個信息單元,并將期望命令修改為STOP命令。
[0123]例如圖2C所示的命令隊列,將迭代器從左起第14個信息單元(PLAY命令所在信息單元)的位置(即隊尾),移動到左起第13個信息單元(OPEN命令所在信息單元)的位置。
[0124]將迭代器減一后,獲取迭代器當(dāng)前指向的信息單元中的操作命令后,將獲取的操作命令與作為期望命令的STOP命令進行比較,判斷獲取的操作命令是否與STOP命令一致;若是,則確認獲取到STOP命令,執(zhí)行步驟S303 ;否則,確認未獲取到STOP命令,執(zhí)行步驟S308o
[0125]S303:將STOP命令的標(biāo)記位設(shè)置為濾除,獲取迭代器減一后指向的信息單元的操作命令,并判斷是否獲取到PLAY命令;若是,則執(zhí)行步驟S304;否則執(zhí)行步驟S309。
[0126]具體地,第一線程將STOP命令的標(biāo)記位設(shè)置為濾除后,將迭代器減一,即將迭代器指向的位置向隊頭方向移動一個信息單元,并將期望命令修改為PLAY命令。
[0127]將迭代器減一后,獲取迭代器當(dāng)前指向的信息單元中的操作命令后,將獲取的操作命令與作為期望命令的STOP命令進行比較,判斷獲取的操作命令是否與PLAY命令一致;若是,則確認獲取到PLAY命令,執(zhí)行步驟S304 ;否則,確認未獲取到PLAY命令,執(zhí)行步驟S309o
[0128]S304:將PLAY命令的標(biāo)記位設(shè)置為濾除,獲取迭代器減一后指向的信息單元的操作命令,并判斷是否獲取到OPEN命令;若是,則執(zhí)行步驟S305;否則執(zhí)行步驟S310。
[0129]具體地,第一線程將PLAY命令的標(biāo)記位設(shè)置為濾除后,將迭代器減一,即將迭代器指向的位置向隊頭方向移動一個信息單元,并將期望命令修改為OPEN命令。
[0130]將迭代器減一后,獲取迭代器當(dāng)前指向的信息單元中的操作命令后,將獲取的操作命令與作為期望命令的OPEN命令進行比較,判斷獲取的操作命令是否與OPEN命令一致;若是,則確認獲取到OPEN命令,執(zhí)行步驟S3 O 5 ;否則,確認未獲取到OPEN命令,執(zhí)行步驟S310o
[0131]S305:將OPEN命令的標(biāo)記位設(shè)置為濾除、且將預(yù)設(shè)的邊界位置更新為該OPEN命令所在的位置后,判斷是否到達命令隊列的隊頭;若是,則執(zhí)行步驟S306;否則將迭代器減一后,執(zhí)行下一個周期的過濾操作命令的流程。
[0132]具體地,邊界位置可以預(yù)先初始化為隊尾的位置。
[0133]第一線程將OPEN命令的標(biāo)記位設(shè)置為濾除,并將預(yù)設(shè)的邊界位置更新為該OPEN命令所在的位置。
[0134]例如,將邊界位置預(yù)先初始化為如圖2c所示的命令隊列中左起第14個信息單元(PLAY命令所在的信息單元)的位置;在上個周期中,將邊界位置更為左起第7個信息單元的位置;在當(dāng)前周期本步驟中,將邊界位置更新為左起第I個信息單元的位置。此時,相當(dāng)于命令隊列中隊頭為OPEN命令的情況。
[0135]之后,判斷迭代器當(dāng)前指向的信息單元的位置是否到達命令隊列的隊頭。
[0136]若判斷出迭代器當(dāng)前指向的信息單元的位置為命令隊列的隊頭,則執(zhí)行步驟S306o
[0137]若判斷出迭代器當(dāng)前指向的信息單元未到達命令隊列的隊頭,則將迭代器減一后,執(zhí)行下一個周期的過濾操作命令的流程,例如跳轉(zhuǎn)到步驟S301。
[0138]S306:刪除標(biāo)記位為濾除的操作命令。
[0139]上述步驟S305中判斷出獲取到的OPEN命令的位置處于命令隊列的隊頭,實際上對應(yīng)的是如上述圖2c中的隊頭即為OPEN命令的情況;此時,邊界位置就是命令隊列的隊頭的位置,因此刪除從邊界位置至隊尾的標(biāo)記位為濾除的操作命令,即為將命令隊列中所有標(biāo)記位為濾除的操作命令刪除。
[0140]S307:判斷是否到達命令隊列的隊頭;若是,則執(zhí)行步驟S311;否則將迭代器減一后,執(zhí)彳丁步驟S301 ο
[0141]上述步驟S301中未獲取到CLOSE命令后,在本步驟中,判斷步驟S301中獲取的操作命令或該操作命令所屬信息單元在命令隊列中的所在位置,是否是命令隊列的隊頭的位置;若是,購?角定出到達命令隊列的隊頭,執(zhí)行步驟S311;否則,確定出未到達命令隊列的隊頭,將迭代器減一后,執(zhí)行步驟S301。
[0142]可以理解,由于命令隊列中通常包含多個切換指令產(chǎn)生的操作命令,每個切換指令產(chǎn)生多個操作命令,可能還包含多個設(shè)置指令產(chǎn)生的操作命令。因此通常是從第二個周期開始,本步驟中才判斷出獲取的操作命令的位置已到達命令隊列的隊頭。
[0143]S308:判斷是否到達命令隊列的隊頭;若是,則執(zhí)行步驟S311;否則執(zhí)行步驟S302。
[0144]上述步驟S302中未獲取STOP命令后,在本步驟中,判斷步驟S302中獲取的操作命令或該操作命令所屬信息單元在命令隊列中的所在位置,是否是命令隊列的隊頭的位置;若是,則確定出到達命令隊列的隊頭,執(zhí)行步驟S311;否則,確定出未到達命令隊列的隊頭,執(zhí)行步驟S302。
[0145]S309:判斷是否到達命令隊列的隊頭;若是,則執(zhí)行步驟S311;否則執(zhí)行步驟S303。
[0146]上述步驟S303中未獲取到PLAY命令后,在本步驟中,判斷步驟S303中獲取的操作命令或該操作命令所屬信息單元在命令隊列中的所在位置,是否是命令隊列的隊頭的位置;若是,購?角定出到達命令隊列的隊頭,執(zhí)行步驟S311;否則,確定出未到達命令隊列的隊頭,執(zhí)行步驟S303。
[0147]S310:判斷是否到達命令隊列的隊頭;若是,則執(zhí)行步驟S306;否則執(zhí)行步驟S304。
[0148]上述步驟S304中未獲取OPEN命令后,在本步驟中,判斷上述步驟S304中獲取的操作命令或該操作命令所屬信息單元在命令隊列中的所在位置,是否是命令隊列的隊頭的位置;若是,購?角定出到達命令隊列的隊頭,執(zhí)行步驟S311;否則,確定出未到達命令隊列的隊頭,執(zhí)行步驟S304。
[0149]S311:將邊界位置與隊頭之間標(biāo)記位為濾除的操作命令的標(biāo)記位都修改為保留,并刪除從邊界位置至隊尾的標(biāo)記位為濾除的操作命令。
[0150]本發(fā)明如圖3所示的實施例中,實際上是按照從命令隊列的隊尾指向隊頭的方向,依次查找出CLOSE命令、STOP命令、PLAY命令和OPEN命令組成待濾除命令鏈,以待濾除命令鏈為單位進行濾除。而對于不完整的待濾除命令鏈予以保留,以供第二線程根據(jù)不完整的待濾除命令鏈中的CLOSE命令、STOP命令和PLAY命令中的至少一個命令,完成對當(dāng)前節(jié)目的操作,例如對當(dāng)前的節(jié)目進行停止播放或者關(guān)閉等。
[0151]因此,第一線程在上述步驟S304和S310未獲取到當(dāng)前周期的OPEN命令且判斷到達隊頭后,在本步驟中,將邊界位置與隊頭之間的CLOSE命令、STOP命令和PLAY命令的標(biāo)記位都從濾除修改為保留。
[0152]或者,第一線程在上述步驟S303和S309未獲取到當(dāng)前周期的PLAY命令且判斷到達隊頭后,在本步驟中,將邊界位置與隊頭之間的CLOSE命令和STOP命令的標(biāo)記位都從濾除修改為保留。
[0153]或者,第一線程在上述步驟S302和S308未獲取到當(dāng)前周期的STOP命令且判斷到達隊頭后,在本步驟中,將邊界位置與隊頭之間的CLOSE命令的標(biāo)記位設(shè)置為保留。
[0154]事實上,由于執(zhí)行POS命令、VOL命令和TRACK命令都基本不耗時;因此,上述整個如圖3所示的周期性過濾命令隊列中的待濾除命令鏈的過程中,命令隊列中的POS命令、VOL命令和TRACK命令的標(biāo)記位一直保持著初始化時的保留的狀態(tài)。因此,命令隊列中的POS命令、VOL命令和TRACK命令都被保留。
[0155]基于上述節(jié)目切換播放方法,本發(fā)明實施例還提供了一種節(jié)目切換播放裝置,該裝置的內(nèi)部結(jié)構(gòu)的框架示意圖如圖4所示,包括:入隊模塊401、執(zhí)行模塊402、檢測模塊403和過濾模塊404。
[0156]其中,入隊模塊401用于接收針對節(jié)目的至少一個切換指令,將各切換指令產(chǎn)生的操作命令按序加入到命令隊列中。
[0157]執(zhí)行模塊402用于按序執(zhí)行命令隊列中的操作命令。
[0158]檢測模塊403用于循環(huán)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量。
[0159]過濾模塊404用于對于檢測模塊403的每次檢測結(jié)果,若該次檢測結(jié)果為大于,則對命令隊列中的待濾除命令鏈進行過濾。
[0160]執(zhí)行模塊403還用于按序執(zhí)行命令隊列中保留的操作命令,以根據(jù)最后一個切換指令產(chǎn)生的OPEN命令和PLAY命令,以獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放。
[0161]具體地,過濾模塊404用于從命令隊列的隊尾開始指向隊頭,依次獲取操作命令;每獲取一個操作命令,若判斷出該操作命令可歸屬于待濾除命令鏈,則將該操作命令標(biāo)記為濾除;每獲取一個待濾除命令鏈,將該待濾除命令鏈中最靠近隊頭的操作命令的位置作為當(dāng)前的邊界位置;直到完成隊頭的操作命令的歸屬判斷和標(biāo)記;若隊頭與邊界位置之間、標(biāo)記為濾除的多個操作命令構(gòu)成一個待濾除命令鏈,則刪除命令隊列中標(biāo)記為濾除的操作命令。
[0162]較佳地,過濾模塊404還用于若命令隊列的隊頭與邊界位置之間、標(biāo)記為濾除的多個操作命令未構(gòu)成一個待濾除命令鏈,則將未構(gòu)成待濾除命令鏈的操作命令都修改為保由ο
[0163]較佳地,待濾除命令鏈依序包括CLOSE命令、STOP命令、PLAY命令和OPEN命令。
[0164]以及,過濾模塊404具體用于由第二線程將迭代器指向命令隊列的隊尾后,周期性過濾待濾除命令鏈;其中,一個周期內(nèi)過濾待濾除命令鏈包括:從迭代器當(dāng)前指向的位置開始向隊頭依次獲取操作命令,每獲取一個操作命令將迭代器減一,直到獲取到一個待濾除命令鏈;在獲取該待濾除命令鏈時將其操作命令都標(biāo)記為濾除,并將當(dāng)前的邊界位置更新為該OPEN命令所在的位置;判斷是否到達隊頭,若是,則刪除標(biāo)記位為濾除的操作命令;否貝IJ,繼續(xù)下一個周期過濾待濾除命令鏈的流程。
[0165]較佳地,由于檢測模塊403用于運行第二線程循環(huán)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于待濾除命令鏈中操作命令的數(shù)量。
[0166]以及,執(zhí)行模塊402還用于對于檢測模塊403的每次檢測結(jié)果,若該次檢測結(jié)果為不大于,則運行第二線程繼續(xù)按序執(zhí)行命令隊列中的操作命令。
[0167]以及,檢測模塊403還用于對于每次檢測結(jié)果,若該次檢測結(jié)果為不大于,繼續(xù)檢測命令隊列中當(dāng)前操作命令的數(shù)量是否大于待濾除命令鏈中操作命令的數(shù)量。
[0168]進一步,入隊模塊401還用于由第一線程接收至少一個設(shè)置指令,并由第一線程將各切換指令和設(shè)置指令產(chǎn)生的操作命令按序加入到命令隊列中;其中,設(shè)置指令產(chǎn)生的操作命令包括下述一項:POS命令、VOL命令、TRACK命令。
[0169]進一步,執(zhí)行模塊402還用于由第二線程執(zhí)行下述至少一項操作:根據(jù)POS命令攜帶的位置參數(shù),設(shè)置播放節(jié)目數(shù)據(jù)的視窗的位置;根據(jù)VOL命令攜帶的音量值,設(shè)置節(jié)目數(shù)據(jù)的輸出音量;根據(jù)TRACK命令攜帶的音軌參數(shù),設(shè)置音軌用于輸出節(jié)目數(shù)據(jù)中的音頻數(shù)據(jù)。
[0170]上述入隊模塊401、執(zhí)行模塊402、檢測模塊403和過濾模塊404功能的實現(xiàn)方法,可以參考如上述圖2a和圖3所示的流程步驟的具體內(nèi)容,此處不再贅述。
[0171]本發(fā)明實施例中,將接收的至少一個切換指令產(chǎn)生的操作命令按序加入到命令隊列中;當(dāng)檢測出命令隊列中操作命令的數(shù)量超過預(yù)設(shè)的待濾除命令鏈中的操作命令時,確認命令隊列中很可能加入了多個切換指令產(chǎn)生的操作命令;對命令隊列中的待濾除命令鏈進行過濾,濾除了其它切換指令所產(chǎn)生的操作命令和最后一個切換指令所產(chǎn)生的部分操作命令;根據(jù)保留的最后一個切換指令的OPEN命令和PLAY命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放;大大減少了實際執(zhí)行的操作命令,在滿足用戶觀看感興趣的節(jié)目的情況下,大大縮短了連續(xù)切換播放節(jié)目的延時,能夠提升用戶體驗。
[0172]而且,本發(fā)明實施例中,進行了線程分工,第二線程專門負責(zé)過濾和執(zhí)行命令隊列中的操作命令,第一線程負責(zé)執(zhí)行其它工作包括網(wǎng)頁刷新,即使第二線程發(fā)生阻塞也不會影響第一線程執(zhí)行的工作,可以維持網(wǎng)頁的刷新,保證網(wǎng)頁上及時顯示待切換的節(jié)目的信息等需要顯示的信息供用戶參考,能夠進一步提升用戶的體驗。
[0173]本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明包括涉及用于執(zhí)行本申請中所述操作中的一項或多項的設(shè)備。這些設(shè)備可以為所需的目的而專門設(shè)計和制造,或者也可以包括通用計算機中的已知設(shè)備。這些設(shè)備具有存儲在其內(nèi)的計算機程序,這些計算機程序選擇性地激活或重構(gòu)。這樣的計算機程序可以被存儲在設(shè)備(例如,計算機)可讀介質(zhì)中或者存儲在適于存儲電子指令并分別耦聯(lián)到總線的任何類型的介質(zhì)中,所述計算機可讀介質(zhì)包括但不限于任何類型的盤(包括軟盤、硬盤、光盤、CD-ROM、和磁光盤)、R0M(Read-0nly Memory,只讀存儲器)、RAM (Random Access Memory,隨即存儲器)、EPROM(Erasable ProgrammableRead-Only Memory,可擦寫可編程只讀存儲器)、EEPR0M(E1 ectricalIy ErasableProgrammable Read-Only Memory,電可擦可編程只讀存儲器)、閃存、磁性卡片或光線卡片。也就是,可讀介質(zhì)包括由設(shè)備(例如,計算機)以能夠讀的形式存儲或傳輸信息的任何介質(zhì)。
[0174]本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以用計算機程序指令來實現(xiàn)這些結(jié)構(gòu)圖和/或框圖和/或流圖中的每個框以及這些結(jié)構(gòu)圖和/或框圖和/或流圖中的框的組合。本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以將這些計算機程序指令提供給通用計算機、專業(yè)計算機或其他可編程數(shù)據(jù)處理方法的處理器來實現(xiàn),從而通過計算機或其他可編程數(shù)據(jù)處理方法的處理器來執(zhí)行本發(fā)明公開的結(jié)構(gòu)圖和/或框圖和/或流圖的框或多個框中指定的方案。
[0175]本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明中已經(jīng)討論過的各種操作、方法、流程中的步驟、措施、方案可以被交替、更改、組合或刪除。進一步地,具有本發(fā)明中已經(jīng)討論過的各種操作、方法、流程中的其他步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。進一步地,現(xiàn)有技術(shù)中的具有與本發(fā)明中公開的各種操作、方法、流程中的步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。
[0176]以上所述僅是本發(fā)明的部分實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
【主權(quán)項】
1.一種節(jié)目切換播放方法,其特征在于,包括: 接收針對節(jié)目的至少一個切換指令,將各切換指令產(chǎn)生的操作命令按序加入到命令隊列中; 按序執(zhí)行所述命令隊列中的操作命令,并循環(huán)檢測所述命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量; 對于每次檢測結(jié)果,若該次檢測結(jié)果為大于,則對所述命令隊列中的待濾除命令鏈進行過濾,按序執(zhí)行所述命令隊列中保留的操作命令,以根據(jù)最后一個切換指令產(chǎn)生的節(jié)目打開命令和播放開始命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述對所述命令隊列中的待濾除命令鏈進行過濾,具體包括: 從所述命令隊列的隊尾開始指向隊頭,依次獲取操作命令; 每獲取一個操作命令,若判斷出該操作命令可歸屬于待濾除命令鏈,則將該操作命令標(biāo)記為濾除;每獲取一個待濾除命令鏈,將該待濾除命令鏈中最靠近隊頭的操作命令的位置作為當(dāng)前的邊界位置;直到完成隊頭的操作命令的歸屬判斷和標(biāo)記; 若所述隊頭與邊界位置之間、標(biāo)記為濾除的多個操作命令構(gòu)成一個待濾除命令鏈,則刪除所述命令隊列中標(biāo)記為濾除的操作命令。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,還包括: 若所述隊頭與邊界位置之間、標(biāo)記為濾除的多個操作命令未構(gòu)成一個待濾除命令鏈,則將所述未構(gòu)成待濾除命令鏈的操作命令都修改為保留。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述待濾除命令鏈依序包括節(jié)目關(guān)閉命令、播放停止命令、播放開始命令和節(jié)目打開命令;以及 所述對所述命令隊列中的待濾除命令鏈進行過濾,具體包括: 將迭代器指向所述命令隊列的隊尾后,周期性過濾待濾除命令鏈;其中,一個周期內(nèi)過濾待濾除命令鏈包括: 從所述迭代器當(dāng)前指向的位置開始向隊頭依次獲取操作命令,每獲取一個操作命令將所述迭代器減一,直到獲取到一個待濾除命令鏈;在獲取該待濾除命令鏈時將其操作命令都標(biāo)記為濾除,并將當(dāng)前的邊界位置更新為該節(jié)目打開命令所在的位置;判斷是否到達隊頭,若是,則刪除標(biāo)記位為濾除的操作命令;否則,繼續(xù)下一個周期過濾待濾除命令鏈的流程。5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述檢測所述命令隊列中當(dāng)前操作命令的數(shù)量是否大于所述待濾除命令鏈中操作命令的數(shù)量后,還包括: 若該次檢測結(jié)果為不大于,則繼續(xù)按序執(zhí)行所述命令隊列中的操作命令,并繼續(xù)檢測所述命令隊列中當(dāng)前操作命令的數(shù)量是否大于待濾除命令鏈中操作命令的數(shù)量。6.根據(jù)權(quán)利要求1-4任一項所述的方法,其特征在于,在所述接收針對節(jié)目的至少一個切換指令的過程中,還包括: 接收至少一個設(shè)置指令;以及 在所述將各切換指令產(chǎn)生的操作命令按序加入到命令隊列的過程中,具體包括: 將各切換指令和設(shè)置指令產(chǎn)生的操作命令按序加入到命令隊列中;其中,所述設(shè)置指令產(chǎn)生的操作命令包括下述一項:視窗位置設(shè)置命令、音量設(shè)置命令、音軌設(shè)置命令。7.根據(jù)權(quán)利要求6所述的方法,其特征在于,還包括: 執(zhí)行下述至少一項操作: 根據(jù)所述視窗位置設(shè)置命令攜帶的位置參數(shù),設(shè)置播放所述節(jié)目數(shù)據(jù)的視窗的位置; 根據(jù)所述音量設(shè)置命令攜帶的音量值,設(shè)置所述節(jié)目數(shù)據(jù)的輸出音量; 根據(jù)所述音軌設(shè)置命令攜帶的音軌參數(shù),設(shè)置音軌用于輸出所述節(jié)目數(shù)據(jù)中的音頻數(shù)據(jù)。8.一種節(jié)目切換播放裝置,其特征在于,包括: 入隊模塊,用于接收針對節(jié)目的至少一個切換指令,將各切換指令產(chǎn)生的操作命令按序加入到命令隊列中; 執(zhí)行模塊,用于按序執(zhí)行所述命令隊列中的操作命令; 檢測模塊,用于循環(huán)檢測所述命令隊列中當(dāng)前操作命令的數(shù)量是否大于預(yù)設(shè)的待濾除命令鏈中操作命令的數(shù)量; 過濾模塊,用于對于所述檢測模塊的每次檢測結(jié)果,若該次檢測結(jié)果為大于,則對所述命令隊列中的待濾除命令鏈進行過濾; 所述執(zhí)行模塊還用于按序執(zhí)行所述命令隊列中保留的操作命令,以根據(jù)最后一個切換指令產(chǎn)生的節(jié)目打開命令和播放開始命令獲取相應(yīng)的節(jié)目數(shù)據(jù)進行播放。9.根據(jù)權(quán)利要求8所述的裝置,其特征在于, 所述過濾模塊具體用于從所述命令隊列的隊尾開始指向隊頭,依次獲取操作命令;每獲取一個操作命令,若判斷出該操作命令可歸屬于待濾除命令鏈,則將該操作命令標(biāo)記為濾除;每獲取一個待濾除命令鏈,將該待濾除命令鏈中最靠近隊頭的操作命令的位置作為當(dāng)前的邊界位置;直到完成隊頭的操作命令的歸屬判斷和標(biāo)記;若所述隊頭與邊界位置之間、標(biāo)記為濾除的多個操作命令構(gòu)成一個待濾除命令鏈,則刪除所述命令隊列中標(biāo)記為濾除的操作命令。10.根據(jù)權(quán)利要求9所述的裝置,其特征在于, 所述過濾模塊還用于若所述隊頭與邊界位置之間、標(biāo)記為濾除的多個操作命令未構(gòu)成一個待濾除命令鏈,則將所述未構(gòu)成待濾除命令鏈的操作命令都修改為保留。
【文檔編號】H04N21/443GK105847958SQ201610334829
【公開日】2016年8月10日
【申請日】2016年5月19日
【發(fā)明人】王雄才
【申請人】青島海信寬帶多媒體技術(shù)有限公司