基于swing開(kāi)發(fā)彈幕播放器
前言
跳過(guò)廢話,直接看正文
近些年來(lái),彈幕這種實(shí)時(shí)視頻評(píng)論越來(lái)越火爆,國(guó)內(nèi)幾乎所有的視頻網(wǎng)站在播放器中開(kāi)始加入了彈幕的功能。彈幕已經(jīng)成了很多人觀看視頻時(shí)不可缺少的一部分,我也是其中之一。
只是有時(shí)候因?yàn)榫W(wǎng)絡(luò)問(wèn)題、在線視頻資源缺失等原因,人們通常會(huì)在本地觀看離線視頻,這時(shí)候要想看彈幕就有些麻煩了。經(jīng)過(guò)搜索,我發(fā)現(xiàn)確實(shí)有一些軟件能夠?qū)崿F(xiàn)在觀看離線視頻與彈幕的功能,比較出名的有BiliLocal以及DanDanPlayer這兩個(gè),在本質(zhì)上,他們都是本地視頻播放器,并通過(guò)在線搜索從各個(gè)彈幕網(wǎng)站下載彈幕資源并嵌入視頻進(jìn)行播放,都做的相當(dāng)不錯(cuò),只是在操作上有些麻煩,且都限制用戶必須使用該播放器。
因此,我就用swing寫(xiě)了這個(gè)小工具,它不是視頻播放器,而是專門(mén)用來(lái)播放彈幕文件的彈幕播放器,能夠與視頻播放器一起配合為用戶提供離線觀看視頻以及彈幕的功能。
當(dāng)然,這多少還是有重造車輪之嫌,畢竟嵌入彈幕的視頻播放器也能夠達(dá)到相同的效果,且集成的很好。只是對(duì)于程序員來(lái)說(shuō),用自己寫(xiě)的工具會(huì)更爽一些吧。這個(gè)東西寫(xiě)起來(lái)也就一兩天的時(shí)間,就當(dāng)做對(duì)swing編程的學(xué)習(xí)過(guò)程了。
正文
目錄
•開(kāi)發(fā)環(huán)境
•軟件架構(gòu)
•項(xiàng)目展示
•一些問(wèn)題
開(kāi)發(fā)環(huán)境
•操作系統(tǒng):windows7
•語(yǔ)言:Java
•界面工具包:Swing
•開(kāi)發(fā)工具:IntellIj IDEA 2016.2.4
•版本管理:git
•運(yùn)行環(huán)境:windows7、8、10
軟件架構(gòu)
軟件需要支持下面幾種功能:
(1)根據(jù)url下載彈幕網(wǎng)站的彈幕文件
(2)加載離線彈幕文件并播放
(3)彈幕窗口置頂且背景透明
(4)基本的播放器控制功能(時(shí)間軸、暫停、播放)
我個(gè)人因?yàn)閷?shí)習(xí)經(jīng)歷以及實(shí)驗(yàn)室項(xiàng)目的原因,參與開(kāi)發(fā)了幾個(gè)網(wǎng)站項(xiàng)目,因此對(duì)MVC框架比較熟悉,但是后來(lái)簡(jiǎn)單接觸了下MVP模式,雖然是基于MVC的簡(jiǎn)單修改,但是個(gè)人覺(jué)得就代碼解耦而言,MVP比MVC做得更好,因此就采用了MVP架構(gòu)模式。當(dāng)然,因?yàn)檫@是個(gè)小項(xiàng)目,為了節(jié)省時(shí)間,沒(méi)有嚴(yán)格地按照MVP的架構(gòu)來(lái)設(shè)計(jì),(略去了Presenter 與View之間的接口層、減少了Presenter的數(shù)量等),但對(duì)此項(xiàng)目而言影響不大。
在此列出整個(gè)項(xiàng)目的文件結(jié)構(gòu)圖:
項(xiàng)目展示
彈幕控制器:
彈幕主窗口:
對(duì)此項(xiàng)目的源碼感興趣的朋友可以直接看我的git倉(cāng)庫(kù)
一些問(wèn)題
我對(duì)swing還不太熟悉,因此在開(kāi)發(fā)過(guò)程中遇到了一些問(wèn)題,有些已經(jīng)解決,有些還沒(méi)有解決,現(xiàn)在列出一些比較關(guān)鍵的供大家參考:
• 彈幕主窗口要實(shí)現(xiàn)背景透明但文字不透明的效果
這個(gè)在windows下可以調(diào)用AWTUtilities中的相關(guān)函數(shù)實(shí)現(xiàn),具體代碼如下所示:
public class TransparentWindow extends JFrame { public TransparentWindow(int width, int height) { this.setSize(width, height); this.setUndecorated(true); AWTUtilities.setWindowOpaque(this, false); } }
但這個(gè)方法在windows中可以正常工作,在Linux中可能就不行了,具體是怎樣的效果要看linux使用的圖形桌面環(huán)境(GNOME下背景是透明的,但是文字飄過(guò)后會(huì)留下痕跡,重繪也不行。)
• 爬取彈幕網(wǎng)站的彈幕文件
因?yàn)闆](méi)有統(tǒng)一的標(biāo)準(zhǔn),每個(gè)網(wǎng)站的彈幕文件格式也不一樣,需要自己定義一個(gè)格式,然后將不同來(lái)源的彈幕文件轉(zhuǎn)換到這個(gè)格式即可
此外,在第一次寫(xiě)爬方法時(shí),我發(fā)現(xiàn)下載下來(lái)的xml文件是亂碼,后來(lái)才知道原來(lái)是經(jīng)過(guò)deflate算法壓縮的,需要進(jìn)行解壓縮,關(guān)鍵代碼如下所示(使用apache的httpclient庫(kù)獲取HttpEntity):
private static HttpEntity decompressingEntityIfNecessary(HttpEntity entity) { HttpEntity retEntity = entity; if (entity != null && entity.getContentEncoding() != null) { if ("gzip".equalsIgnoreCase(entity.getContentEncoding().getValue())) { retEntity = new GzipDecompressingEntity(entity); } else if ("deflate".equalsIgnoreCase(entity.getContentEncoding().getValue())) { retEntity = new DeflateDecompressingEntity(entity); } } return retEntity; }
• 時(shí)間軸控制
這個(gè)還是第一次寫(xiě),使用Timer來(lái)實(shí)現(xiàn),遇到不少坑,最終效果還湊活。具體可以參考項(xiàng)目中的TimePanel.Java文件
• 未解決的奔潰問(wèn)題
程序在windows10上正常運(yùn)行,但在windows7下運(yùn)行1分鐘左右后會(huì)報(bào)APPCRASH
故障模塊名稱: ltc_game64-116096.dll
故障模塊版本: 1.0.0.1
故障模塊時(shí)間戳: 57cf505f
異常代碼: c000041d
具體原因不明,有了解的朋友希望能夠指點(diǎn)一下,感激不盡。
后記
彈幕這種東西在將來(lái)或許能夠規(guī)范化,成為一種與字幕類似的視頻資源。這樣每個(gè)視頻都有對(duì)應(yīng)的彈幕資源庫(kù),各種播放器也就能夠從不同的彈幕資源庫(kù)中加載并播放了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Data?JPA實(shí)現(xiàn)查詢結(jié)果返回map或自定義的實(shí)體類
這篇文章主要介紹了Spring?Data?JPA實(shí)現(xiàn)查詢結(jié)果返回map或自定義的實(shí)體類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12SpringBoot application.yml和bootstrap.yml的區(qū)別
本文主要介紹了SpringBoot application.yml和bootstrap.yml的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Springboot使用POI實(shí)現(xiàn)導(dǎo)出Excel文件示例
本篇文章主要介紹了Springboot使用POI實(shí)現(xiàn)導(dǎo)出Excel文件示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-02-02Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理(總結(jié))
這篇文章主要介紹了Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05SpringBoot3中數(shù)據(jù)庫(kù)集成實(shí)踐詳解
項(xiàng)目工程中,集成數(shù)據(jù)庫(kù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的增曬改查管理,是最基礎(chǔ)的能力,所以下面小編就來(lái)和大家講講SpringBoot3如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)集成,需要的可以參考下2023-08-08