基于UDP的歌词同步系统
1 系統功能說明
1.1系統簡介
歌詞在線同步系統,主要實現的是播放歌曲,然后能夠通過UDP通信,從服務端加載歌詞,并根據歌曲播放進度同步顯示歌詞。
1.2系統主要功能
實現播放子系統,其功能如下:
1.播放終端能夠播放歌曲,并根據歌曲的信息從后臺下載歌詞
2. 歌詞顯示應當與歌曲播放同步
1.3系統開發環境
編譯器:Spring tool suite
運行環境:JDK1.8導入整個項目,先運行server.java,再運行client.java即可啟動項目
2 系統設計
2.1系統總體設計
本系統采用的是CS結構,系統的功能結構如下:
(1)服務端:采用UDP協議,接收客戶端傳來的數據,進行處理,比如查詢歌詞信息,查詢到歌詞信息以后返回給客戶端,如果查詢不到結果,則返回相應的提示信息。
(2)客戶端:和用戶交互,接收用戶的操作輸入,并將數據發送給服務端處理,獲取返回結果展示在界面上,比如用戶點擊歌曲播放,客戶端獲取歌曲信息,發送給服務端,并且接收服務端返回的歌詞,同步顯示在界面上。
2.2界面設計
客戶端歌曲查詢界面:
歌詞同步界面:
加載圖片失敗:
歌詞加載失敗:
2.3 網絡通信
(1)網絡通信采用的是UDP通信模型,因為客戶端需要向服務端請求歌曲的專輯圖片,歌 詞,以及歌曲的歌手,專輯等信息,所以在請求消息中需要設置標志字段,用于區分服 務。
(2)客戶端發送的數據格式、服務端接收的數據格式:
songName#requestContent#currentTime
各個字段的含義:
songName:歌曲名字
requestContent:請求內容(包括歌曲基本信息songInfo、專輯圖片songImage、歌詞內容 lrc)
currentTime:歌曲播放的進度時間
(3)圖片是采用字節流的方式傳輸的,從服務端讀取圖片,然后通過DatagramPacket 發送 給客戶端,客戶端把接收到的字節流轉換成圖片文件,存到臨時圖片文件中,同時顯示 到歌詞展示界面。
2.4 數據存儲
服務端和客戶端發送的消息都是采用字節流的方式,它們的格式和存儲方式如下:
(1)服務端和客戶端的資源存儲目錄如下:
music/client-music 目錄下存放的是客戶端的歌曲,歌詞,界面背景圖片資源等
music/server-music 目錄下存放的是服務端的歌詞,專輯圖片資源等
(2)服務端存儲的是歌詞文件,歌曲專輯圖片文件;
其中歌詞文件采用.lrc文件,其基本格式如樣例如下:
而專輯圖片則采用.png的格式存儲。
(3)客戶端存儲的是歌曲文件信息,格式為.mp3,還有就是背景圖片,按鈕圖片,臨時圖片資源等
其在項目中的存儲格式樣例如下:
2.5 多線程
(1)在服務端使用了多線程處理,服務端分為兩個類,一個是Server類,一個是服務端線 程類UDPThread類。
Server類:
用于接受客戶端發送來的packet數據包,然后把數據包交給子線程處理,使用了兩 個DatagramSocket,一個接受數據,一個發送數據。
UDPThread 類:
根據客戶端發送的數據包,判斷請求數據的類型,比如歌詞,圖片資源等,然后查 找對應的資源,轉換成字節流發送給客戶端。
2.6同步與并發
同步:客戶端實現了同步,當讀取服務端歌詞的線程接收到服務端發來的歌詞文件的時候,需要先寫入本地歌詞文件中,而此時,本地歌詞讀取線程可能也會同時讀取該歌詞文件,所以需要歌詞文件的寫入需要加上同步鎖。
并發:服務端采用了多線程,所以支持多個客戶端同時開啟,從服務端獲取歌詞,實現了并發。
3 系統錯誤與調試
3.1 常見異常及處理方法
(1)異常:客戶端掃描本地文件夾的歌曲文件,如果文件夾名不存在,產生空指針異常
處理方法:判斷文件對象是否為空,處理代碼如下:
(2)異常:服務端查詢的歌詞文件或者圖片文件不存在,會產生空指針異常
處理方法:
服務端判斷讀的文件是否為空,如果為空,則發送無該歌詞文件或者圖片的消息給客戶 端(處理代碼如下):
3.2 系統實現過程中遇到的錯誤及其解決方法
(1)遇到的問題:在讀取mp3歌曲文件里歌曲信息的時候,采用jaudiotagger jar包讀取,但是讀取到的中文都是亂碼,采用了UTF-8,GBK轉碼都仍然是亂碼。
解決辦法:自己寫代碼讀取MP3歌曲信息,在mp3文件的最后128個字節包含了歌曲的基本信息,讀取后轉換成GBK格式,成功解決了亂碼問題。
(2)遇到的問題:在歌詞同步的時候,最后一句歌詞不能同步
解決辦法:歌詞獲取的判斷方法是根據歌曲時間在兩句歌詞之間來判斷的,因為在判斷最后一句歌詞的時候,后面沒有歌詞信息了,所以無法同步最后一句歌詞,解決辦法是加上一個判斷語句,判斷當前是否是最后一行歌詞,如果是,則直接返回最后一句歌詞。
總結
以上是生活随笔為你收集整理的基于UDP的歌词同步系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVE-2013-4694 WinAmp
- 下一篇: Windows下迁移谷歌浏览器个人资料路