本發(fā)明涉及彈幕推送技術,具體涉及一種彈幕排版方法及排版系統(tǒng)。
背景技術:
彈幕是指一種在觀看視頻時,大量以字幕形式呈現(xiàn)的評論與視頻同在一個畫面的現(xiàn)象。在視頻上方大量飄過的評論如密集炮彈一般,故得名彈幕。彈幕會隨著視頻的播放實時在視頻上呈現(xiàn),這樣觀看者在觀看該視頻時能夠看到其他觀看者和自己發(fā)送的彈幕。
技術實現(xiàn)要素:
本發(fā)明提供一種彈幕排版方法及排版系統(tǒng),易于彈幕觀看,提高用戶體驗。
為實現(xiàn)上述目的,本發(fā)明提供一種彈幕排版方法,其特點是,該方法包含:
視頻對應上傳的彈幕組成該視頻對應的彈幕列表;
視頻播放時,取出彈幕列表中設定為當前時間段播放的當前彈幕進行渲染;
空間檢測,若當前彈幕預設的顯示路徑未被占用,則在視頻中加載顯示該當前彈幕。
上述當前彈幕為頂部彈幕,則從彈幕顯示空間的最上方向下開始檢測;若彈幕顯示空間中存在具有當前彈幕高度的空間,則將該當前彈幕安排在該空間進行顯示。
上述當前彈幕為底部彈幕,則從彈幕顯示空間的最下方向上開始檢測;若彈幕顯示空間中存在具有當前彈幕高度的空間,則將該當前彈幕安排在這塊空間進行顯示。
上述當前彈幕為滾動彈幕或逆向彈幕,從彈幕顯示空間由上至下開始檢測;
若彈幕顯示空間中存在具有該當前彈幕高度的空間,則將當前彈幕安排在該空間進行顯示;
若彈幕顯示空間中具有該彈幕高度的空間已經(jīng)被占據(jù),就進行碰撞檢測,若檢測當前彈幕不會與占用其顯示路徑的占用彈幕發(fā)生碰撞,即顯示當前彈幕,否則繼續(xù)向下進行碰撞檢測。
上述碰撞檢測包含:若占據(jù)當前彈幕的顯示路徑的占用彈幕離開彈幕顯示空間的邊界時,當前彈幕還未到達占用彈幕所離開的彈幕顯示空間的邊界,則判定不會發(fā)生碰撞,當前彈幕即以勻速運動在彈幕顯示空間顯示。
由上至下檢測完彈幕顯示空間后,仍沒有當前彈幕顯示的空間,即將當前彈幕安排在正在渲染的彈幕列表最后一條彈幕后在進行空間判斷。
上述彈幕包含:開始時間、持續(xù)時間、內(nèi)容、模式和字號大小的信息。
視頻播放時,每經(jīng)過第一預設時間即判斷彈幕列表中是否有當前時間段需要顯示的彈幕;預設時間為一幀視頻。
視頻播放時,每經(jīng)過第二預設時間即判斷正在渲染的彈幕列表中是否有彈幕已超出其顯示時間段,若彈幕已經(jīng)超出其顯示時間段則將其移出正在渲染的彈幕列表。
一種彈幕排版系統(tǒng),其特點是,該系統(tǒng)包含:
彈幕編制模塊,其將針對特定視頻上傳的彈幕按時間順序組成該視頻對應的彈幕列表;
彈幕渲染模塊,其對當前時間段需要顯示的當前彈幕列成列表并進行渲染;
顯示空間判斷模塊,其判斷當前彈幕的顯示路徑是否被占用,若否則顯示該當前彈幕,若是則進行碰撞檢測;碰撞檢測結(jié)果為不會碰撞則顯示當前彈幕。
本發(fā)明一種彈幕排版方法及排版系統(tǒng)和現(xiàn)有技術相比,其優(yōu)點在于,本發(fā)明通過判斷彈幕顯示空間,合理安排彈幕的顯示排布,易于用戶觀看彈幕,提高用戶體驗。
附圖說明
圖1為本發(fā)明一種彈幕排版方法的流程圖。
具體實施方式
以下結(jié)合附圖,進一步說明本發(fā)明的具體實施例。
如圖1所示,為一種彈幕排版方法的實施例,該方法具體包含以下步驟:
S1、服務器接收用戶針對特定視頻對應上傳的彈幕,將該些彈幕按時間順序組成該視頻對應的有序彈幕列表。每條彈幕包含:開始時間、持續(xù)時間、內(nèi)容、模式和字號大小的信息。
彈幕模式分為四種:滾動彈幕、逆向彈幕、頂部彈幕和底部彈幕。其中滾動彈幕為從右向左自上而下多行排列勻速滾動;逆向彈幕為從左向右自上而下多行排列勻速滾動;頂部彈幕為自上而下多行排列靜止;底部彈幕為自下而上多行排列靜止;四種模式的彈幕都勻速滾動或靜止一段時間后移除彈幕。滾動彈幕、逆向彈幕、頂部彈幕和底部彈幕的排版空間相互獨立。
S2、用戶端播放視頻時,服務器取出該視頻對應的有序彈幕列表,并對有序彈幕列表中設定為當前時間段播放的當前彈幕進行渲染。
具體的,服務器在視頻播放的每一幀(通常每一幀為1/60秒)都進行一次判斷,判斷有序彈幕列表中是否有預設為當前時間段進行顯示的當前彈幕,若是則取出該當前彈幕進行渲染,若否則跳轉(zhuǎn)回S2,繼續(xù)判斷。
S3、彈幕預渲染。首先,將當前彈幕預渲染到內(nèi)存,得到渲染后的寬高,若超出彈幕顯示空間的寬高,則直接丟棄,若未超出彈幕顯示空間的寬搞,則判定該彈幕可顯示,并對該彈幕進行渲染,進行空間檢測后加入到彈幕顯示空間。彈幕顯示空間是指在例如瀏覽器頁面或播放軟件等視頻播放界面中一塊用于顯示彈幕的x*y像素的矩形區(qū)域,其中x*y不是一個固定值。若需顯示的當前彈幕的字體大小超過該彈幕顯示空間的長寬范圍,則系統(tǒng)判定不對該彈幕進行渲染和顯示。
S4、彈幕空間檢測,若當前彈幕預設的顯示路徑未被占用,則在視頻中加載顯示該當前彈幕。 具體有以下情況:
1)若當前彈幕為頂部彈幕,則從彈幕顯示空間的最上方向下開始檢測;若彈幕顯示空間中存在具有當前彈幕高度的空間,則將該當前彈幕安排在該空間,將該當前彈幕加入正在渲染的彈幕列表中最先進行顯示的位置(列表尾部),并隨后在彈幕顯示空間進行顯示。
2)若當前彈幕為底部彈幕,則從彈幕顯示空間的最下方向上開始檢測;若彈幕顯示空間中存在具有當前彈幕高度的空間,則將該當前彈幕安排在這塊空間,將該當前彈幕加入正在渲染的彈幕列表中最先進行顯示的位置(列表尾部),并隨后在彈幕顯示空間進行顯示。
3)若當前彈幕為滾動彈幕或逆向彈幕,從彈幕顯示空間由上至下開始檢測。若彈幕顯示空間中存在具有該當前彈幕高度的空間,則將當前彈幕安排在該空間進行顯示。
4)若上述頂部彈幕、底部彈幕滾動彈幕或逆向彈幕的彈幕顯示空間中具有該彈幕高度的空間已經(jīng)被占用,就進行碰撞檢測,若檢測當前彈幕不會與占用其顯示路徑的占用彈幕發(fā)生碰撞,即顯示當前彈幕,否則繼續(xù)向下進行碰撞檢測。其中,碰撞檢測具體包含以下流程:
步驟a、設占據(jù)當前彈幕的顯示路徑的占用彈幕自開始碰撞檢測起離開屏幕(占用彈幕整體離開屏幕邊線)的時間t1,當前彈幕自開始碰撞檢測起到達屏幕中央(當前彈幕的中線與屏幕中線重合)的時間t2;判斷t1是否大于t2。
若是,滿足t1>t2,占據(jù)當前彈幕的顯示路徑的占用彈幕離開彈幕顯示空間的邊界時,當前彈幕還未到達占用彈幕所離開的彈幕顯示空間的邊界,則判定不會發(fā)生碰撞,即占用彈幕在離開彈幕顯示空間之前都不會與當前彈幕的內(nèi)容造成重疊現(xiàn)象,碰撞檢測完成,對當前彈幕進行渲染后以勻速運動在彈幕顯示空間顯示當前彈幕。
若否,t1<t2,則跳轉(zhuǎn)到步驟b。
步驟b、若由上至下檢測完彈幕顯示空間后,彈幕一直由于判定為可能碰撞,仍沒有當前彈幕顯示的空間,沒有位置可供顯示,即將當前彈幕安排在正在渲染的彈幕列表最后一條彈幕后再進行空間判斷。跳轉(zhuǎn)到步驟c。
步驟c、如果最后一條彈幕之后仍然沒有當前彈幕顯示的空間,彈幕會造成碰撞,即判斷彈幕是否為必要顯示的彈幕。
若是,該當前彈幕為必要顯示的彈幕,則忽略之前的檢測,從彈幕容器最上方的位置開始重新進行碰撞檢測,直到有位置插入容器為止。,這種做法會造成彈幕碰撞,即內(nèi)容會覆蓋在之前的彈幕上,但也保持原有的規(guī)律。
若否,該當前彈幕為非必要顯示的彈幕,則從彈幕渲染列表中移除該彈幕。
進一步的,視頻播放時,每經(jīng)過一幀(1/60秒)都進行一個判斷:如果正在渲染的彈幕列表中的彈幕已經(jīng)超出其顯示時間,則移除該彈幕,并將其移出正在渲染的彈幕列表。
本發(fā)明還公開了一種彈幕排版系統(tǒng),該系統(tǒng)包含:彈幕編制模塊、連接彈幕編制模塊輸出端的彈幕渲染模塊和連接彈幕渲染模塊輸出端的顯示空間判斷模塊;顯示空間判斷模塊輸出端連接外接的彈幕輸出控制系統(tǒng)。
彈幕編制模塊用于將針對特定視頻上傳的彈幕按時間順序組成該視頻對應的彈幕列表。
彈幕渲染模塊用于對當前時間段需要顯示的當前彈幕列成列表并進行渲染。
顯示空間判斷模塊用于實行上述彈幕排版方法中S4彈幕空間檢測的方法流程。判斷當前彈幕的顯示路徑是否被占用,若否則下達顯示該當前彈幕的指令,若是則進行碰撞檢測;碰撞檢測結(jié)果為不會碰撞則下達顯示當前彈幕的指令,若判定會發(fā)生碰撞則移除該彈幕。
盡管本發(fā)明的內(nèi)容已經(jīng)通過上述優(yōu)選實施例作了詳細介紹,但應當認識到上述的描述不應被認為是對本發(fā)明的限制。在本領域技術人員閱讀了上述內(nèi)容后,對于本發(fā)明的多種修改和替代都將是顯而易見的。因此,本發(fā)明的保護范圍應由所附的權(quán)利要求來限定。