最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于swing開發(fā)彈幕播放器

 更新時(shí)間:2017年06月05日 10:47:42   作者:clayanddev  
這篇文章主要為大家詳細(xì)介紹了基于swing實(shí)現(xiàn)彈幕播放器的開發(fā)過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

跳過廢話,直接看正文

近些年來,彈幕這種實(shí)時(shí)視頻評(píng)論越來越火爆,國(guó)內(nèi)幾乎所有的視頻網(wǎng)站在播放器中開始加入了彈幕的功能。彈幕已經(jīng)成了很多人觀看視頻時(shí)不可缺少的一部分,我也是其中之一。

只是有時(shí)候因?yàn)榫W(wǎng)絡(luò)問題、在線視頻資源缺失等原因,人們通常會(huì)在本地觀看離線視頻,這時(shí)候要想看彈幕就有些麻煩了。經(jīng)過搜索,我發(fā)現(xiàn)確實(shí)有一些軟件能夠?qū)崿F(xiàn)在觀看離線視頻與彈幕的功能,比較出名的有BiliLocal以及DanDanPlayer這兩個(gè),在本質(zhì)上,他們都是本地視頻播放器,并通過在線搜索從各個(gè)彈幕網(wǎng)站下載彈幕資源并嵌入視頻進(jìn)行播放,都做的相當(dāng)不錯(cuò),只是在操作上有些麻煩,且都限制用戶必須使用該播放器。

因此,我就用swing寫了這個(gè)小工具,它不是視頻播放器,而是專門用來播放彈幕文件的彈幕播放器,能夠與視頻播放器一起配合為用戶提供離線觀看視頻以及彈幕的功能。

當(dāng)然,這多少還是有重造車輪之嫌,畢竟嵌入彈幕的視頻播放器也能夠達(dá)到相同的效果,且集成的很好。只是對(duì)于程序員來說,用自己寫的工具會(huì)更爽一些吧。這個(gè)東西寫起來也就一兩天的時(shí)間,就當(dāng)做對(duì)swing編程的學(xué)習(xí)過程了。

正文

目錄 

 •開發(fā)環(huán)境
 •軟件架構(gòu)
 •項(xiàng)目展示
 •一些問題

開發(fā)環(huán)境

 •操作系統(tǒng):windows7
 •語言:Java
 •界面工具包:Swing
 •開發(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)目的原因,參與開發(fā)了幾個(gè)網(wǎng)站項(xiàng)目,因此對(duì)MVC框架比較熟悉,但是后來簡(jiǎn)單接觸了下MVP模式,雖然是基于MVC的簡(jiǎn)單修改,但是個(gè)人覺得就代碼解耦而言,MVP比MVC做得更好,因此就采用了MVP架構(gòu)模式。當(dāng)然,因?yàn)檫@是個(gè)小項(xiàng)目,為了節(jié)省時(shí)間,沒有嚴(yán)格地按照MVP的架構(gòu)來設(shè)計(jì),(略去了Presenter 與View之間的接口層、減少了Presenter的數(shù)量等),但對(duì)此項(xiàng)目而言影響不大。

在此列出整個(gè)項(xiàng)目的文件結(jié)構(gòu)圖:

項(xiàng)目展示

彈幕控制器:

彈幕主窗口:

對(duì)此項(xiàng)目的源碼感興趣的朋友可以直接看我的git倉(cāng)庫(kù)

一些問題

我對(duì)swing還不太熟悉,因此在開發(fā)過程中遇到了一些問題,有些已經(jīng)解決,有些還沒有解決,現(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下背景是透明的,但是文字飄過后會(huì)留下痕跡,重繪也不行。)

 • 爬取彈幕網(wǎng)站的彈幕文件 

因?yàn)闆]有統(tǒng)一的標(biāo)準(zhǔn),每個(gè)網(wǎng)站的彈幕文件格式也不一樣,需要自己定義一個(gè)格式,然后將不同來源的彈幕文件轉(zhuǎn)換到這個(gè)格式即可

此外,在第一次寫爬方法時(shí),我發(fā)現(xiàn)下載下來的xml文件是亂碼,后來才知道原來是經(jīng)過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è)還是第一次寫,使用Timer來實(shí)現(xiàn),遇到不少坑,最終效果還湊活。具體可以參考項(xiàng)目中的TimePanel.Java文件

 • 未解決的奔潰問題 

程序在windows10上正常運(yùn)行,但在windows7下運(yùn)行1分鐘左右后會(huì)報(bào)APPCRASH

故障模塊名稱: ltc_game64-116096.dll
故障模塊版本: 1.0.0.1
故障模塊時(shí)間戳:    57cf505f
異常代碼:   c000041d

具體原因不明,有了解的朋友希望能夠指點(diǎn)一下,感激不盡。

后記

彈幕這種東西在將來或許能夠規(guī)范化,成為一種與字幕類似的視頻資源。這樣每個(gè)視頻都有對(duì)應(yīng)的彈幕資源庫(kù),各種播放器也就能夠從不同的彈幕資源庫(kù)中加載并播放了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中BigDecimal比較大小的3種方法(??compareTo()、??equals()??和??compareTo()??)

    Java中BigDecimal比較大小的3種方法(??compareTo()、??equals()??和??compar

    這篇文章主要給大家介紹了關(guān)于Java中BigDecimal比較大小的3種方法,方法分別是??compareTo()、??equals()??和??compareTo()??,在Java中使用BigDecimal類來進(jìn)行精確的數(shù)值計(jì)算,需要的朋友可以參考下
    2023-11-11
  • java實(shí)現(xiàn)解析Cron時(shí)間表達(dá)式為中文描述

    java實(shí)現(xiàn)解析Cron時(shí)間表達(dá)式為中文描述

    這篇文章主要為大家詳細(xì)介紹了java如何實(shí)現(xiàn)解析Cron時(shí)間表達(dá)式為中文描述,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-11-11
  • Java中ArrayList與LinkedList的使用及區(qū)別詳解

    Java中ArrayList與LinkedList的使用及區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于Java中ArrayList與LinkedList的使用及區(qū)別的相關(guān)資料,ArrayList和LinkedList都是實(shí)現(xiàn)了List接口的容器類,用于存儲(chǔ)一系列的對(duì)象引用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • Mybatis-plus更新字段update_by失敗問題

    Mybatis-plus更新字段update_by失敗問題

    在遇到實(shí)體類字段更新不正確的問題時(shí),首先復(fù)現(xiàn)問題,確定受影響的字段,使用Debug模式查看變量的實(shí)際賦值情況,通過查看執(zhí)行的SQL語句,確認(rèn)SQL是否正確反映了預(yù)期的更新,如出現(xiàn)問題,可以參考Mybatis-plus官網(wǎng)的解決方案
    2024-09-09
  • JavaWeb Maven詳解相關(guān)配置

    JavaWeb Maven詳解相關(guān)配置

    這篇文章主要介紹了使用maven架構(gòu)管理開發(fā)的相關(guān)配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java Socket通信(一)之客戶端程序 發(fā)送和接收數(shù)據(jù)

    Java Socket通信(一)之客戶端程序 發(fā)送和接收數(shù)據(jù)

    對(duì)于Socket通信簡(jiǎn)述,服務(wù)端往Socket的輸出流里面寫東西,客戶端就可以通過Socket的輸入流讀取對(duì)應(yīng)的內(nèi)容,Socket與Socket之間是雙向連通的,所以客戶端也可以往對(duì)應(yīng)的Socket輸出流里面寫東西,然后服務(wù)端對(duì)應(yīng)的Socket的輸入流就可以讀出對(duì)應(yīng)的內(nèi)容
    2016-03-03
  • 深入解析Java編程中面向字節(jié)流的一些應(yīng)用

    深入解析Java編程中面向字節(jié)流的一些應(yīng)用

    這篇文章主要介紹了Java編程中面向字節(jié)流的一些應(yīng)用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Java中上傳圖片壓縮處理的方法示例

    Java中上傳圖片壓縮處理的方法示例

    本篇文章主要介紹了Java中圖片壓縮處理的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java遞歸算法經(jīng)典實(shí)例(經(jīng)典兔子問題)

    Java遞歸算法經(jīng)典實(shí)例(經(jīng)典兔子問題)

    本文主要對(duì)經(jīng)典的兔子案例分析,來進(jìn)一步更好的理解和學(xué)習(xí)java遞歸算法,具有很好的參考價(jià)值,需要的朋友一起來看下吧
    2016-12-12
  • Java圖論進(jìn)階之最小生成樹算法詳解

    Java圖論進(jìn)階之最小生成樹算法詳解

    最小生成樹(Minimum Spanning Tree)就是給定無向圖中,邊權(quán)重最小的生成樹,下面這篇文章主要給大家介紹了關(guān)于Java圖論進(jìn)階之最小生成樹算法的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01

最新評(píng)論

威海市| 定西市| 略阳县| 平安县| 永登县| 庄河市| 安化县| 绥江县| 乌海市| 扶沟县| 贵港市| 浙江省| 河西区| 嘉峪关市| 德庆县| 汉沽区| 咸阳市| 连南| 萝北县| 潞城市| 赤壁市| 汤原县| 山东省| 连江县| 垣曲县| 江都市| 清丰县| 德惠市| 贵州省| 松江区| 巴彦县| 镇安县| 大石桥市| 都昌县| 清水河县| 格尔木市| 惠安县| 荃湾区| 平昌县| 韶关市| 博罗县|