一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 基于swing開發(fā)彈幕播放器

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

2020-11-08 17:35clayanddev Java教程

這篇文章主要為大家詳細介紹了基于swing實現彈幕播放器的開發(fā)過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

跳過廢話,直接看正文

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

只是有時候因為網絡問題、在線視頻資源缺失等原因,人們通常會在本地觀看離線視頻,這時候要想看彈幕就有些麻煩了。經過搜索,我發(fā)現確實有一些軟件能夠實現在觀看離線視頻與彈幕的功能,比較出名的有BiliLocal以及DanDanPlayer這兩個,在本質上,他們都是本地視頻播放器,并通過在線搜索從各個彈幕網站下載彈幕資源并嵌入視頻進行播放,都做的相當不錯,只是在操作上有些麻煩,且都限制用戶必須使用該播放器。

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

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

正文

目錄 

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

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

 •操作系統(tǒng):windows7
 •語言:Java
 •界面工具包:Swing
 •開發(fā)工具:IntellIj IDEA 2016.2.4
 •版本管理:git
 •運行環(huán)境:windows7、8、10 

軟件架構

軟件需要支持下面幾種功能:

(1)根據url下載彈幕網站的彈幕文件
(2)加載離線彈幕文件并播放
(3)彈幕窗口置頂且背景透明
(4)基本的播放器控制功能(時間軸、暫停、播放)

我個人因為實習經歷以及實驗室項目的原因,參與開發(fā)了幾個網站項目,因此對MVC框架比較熟悉,但是后來簡單接觸了下MVP模式,雖然是基于MVC的簡單修改,但是個人覺得就代碼解耦而言,MVP比MVC做得更好,因此就采用了MVP架構模式。當然,因為這是個小項目,為了節(jié)省時間,沒有嚴格地按照MVP的架構來設計,(略去了Presenter 與View之間的接口層、減少了Presenter的數量等),但對此項目而言影響不大。

在此列出整個項目的文件結構圖:

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

項目展示

彈幕控制器:

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

彈幕主窗口:

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

對此項目的源碼感興趣的朋友可以直接看我的git倉庫

一些問題

我對swing還不太熟悉,因此在開發(fā)過程中遇到了一些問題,有些已經解決,有些還沒有解決,現在列出一些比較關鍵的供大家參考:

 • 彈幕主窗口要實現背景透明但文字不透明的效果 

這個在windows下可以調用AWTUtilities中的相關函數實現,具體代碼如下所示:

?
1
2
3
4
5
6
7
8
public class TransparentWindow extends JFrame {
 
public TransparentWindow(int width, int height) {
  this.setSize(width, height);
  this.setUndecorated(true);
  AWTUtilities.setWindowOpaque(this, false);
 }
}

但這個方法在windows中可以正常工作,在Linux中可能就不行了,具體是怎樣的效果要看linux使用的圖形桌面環(huán)境(GNOME下背景是透明的,但是文字飄過后會留下痕跡,重繪也不行。)

 • 爬取彈幕網站的彈幕文件 

因為沒有統(tǒng)一的標準,每個網站的彈幕文件格式也不一樣,需要自己定義一個格式,然后將不同來源的彈幕文件轉換到這個格式即可

此外,在第一次寫爬方法時,我發(fā)現下載下來的xml文件是亂碼,后來才知道原來是經過deflate算法壓縮的,需要進行解壓縮,關鍵代碼如下所示(使用apache的httpclient庫獲取HttpEntity):

?
1
2
3
4
5
6
7
8
9
10
11
12
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;
}

 • 時間軸控制

這個還是第一次寫,使用Timer來實現,遇到不少坑,最終效果還湊活。具體可以參考項目中的TimePanel.Java文件

 • 未解決的奔潰問題

程序在windows10上正常運行,但在windows7下運行1分鐘左右后會報APPCRASH

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

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

后記

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91短视频版高清在线观看免费 | 天天色综合三 | 亚洲AV永久无码精品澳门 | 亚洲AV永久无码精品老司机蜜桃 | 男人的视频网站 | 青草青草视频2免费观看 | 咪咪爱小说 | 白丝校花被扒开双腿喷水小说 | 亚洲欧美在线免费 | 粉嫩尤物在线456 | 91麻豆精品国产自产在线观看 | 亚洲天堂三区 | 青青草原国产一区二区 | 99久久中文字幕伊人 | 日本丰满大乳乳奶 | 波多野结衣在线中文 | 麻豆视频免费在线观看 | 波多野结衣52部合集在线观看 | 免费成年人在线视频 | 成人小视频在线观看 | 国产美女亚洲精品久久久综合91 | 欧美3d怪物交videos网站 | 四虎黄色影视库 | 美女张开双腿让男人捅 | 五月色婷婷网在线观看 | 91婷婷射 | 2021国产精品成人免费视频 | 青青青国产手机在线播放 | 亚洲国产欧美在线人成 | lilisha李丽莎喷水大胆在线 | 问一问免费咨询 | 欧美成人乱弄视频 | 免费视频片在线观看大片 | 99久久精品国产综合一区 | 亚洲系列国产精品制服丝袜第 | 欧美精品国产一区二区三区 | 精品久久久久久亚洲精品 | 天美网站传媒入口网址 | 日本在线视频网 | 国产成人在线视频 | 国产在线视频福利 |