項目介紹
本雲音樂平台是一款可以在線播放音樂的音樂平台。主要實現了在線音樂的播放和歌單的顯示,歌詞的傳輸和顯示,桌面歌詞,根據關鍵字搜素音樂歌單歌手和專輯和本地播放等功能。用戶也可以創建自己的歌單,為自己創建的歌單插入自己選擇的圖片。該流媒體子系統采用C/S(Client/Server)架構,vlc解碼、live555傳輸,以及C++編程語言,對子系統需求和功能進行了設計與實現。本文主要針對軟件系統設計方案結合此音樂播放器進行分析。
軟件架構風格描述
軟件架構既要考慮滿足數量眾多的各種系統功能需求, 也需要完成諸如系統的易用性、系統的可維護性等非功能性的設計目標, 還要遵從各種行業標准和政策法規。 不過並不是每一個項目我們都需要從頭開始進行完全創新性的設計,更多的是通過研究借鑒優秀的設計方案,來逐步改進我們的設計。換句話說,大多數的設計工作都是通過復用(Reuse)相似項目的解決方案,或者采用一些優秀設計方案的方法,這讓看起來非常有挑戰性的軟件架構設計工作變得有例可循。
但是,軟件架構又是至關重要的:
首先,軟件架構模型有助於項目成員從整體上理解整個系統
其次,給復用提供了一個高層視圖,既可以輔助決定從其他系統中復用設計或組件,也給我們構建的軟件架構模型未來的復用提供了更多可能性
再次,軟件架構模型為整個項目的構建過程提供了一個藍圖,貫穿於整個項目的生命周期
最后,軟件架構模型有助於理清系統演化的內在邏輯、有助於跟蹤分析軟件架構上的依賴關系、有助於項目管理決策和項目風險管理等
系統軟件架構
通過前期的需求捕獲,建立了用況模型,然后進行了健壯性分析,繪制了通信、交互圖,最后得到了類模型。本音樂平台系統采用C/S架構,主要設計兩個服務器:RTSP Media Server(流媒體服務器)用於實現流媒體在線播放,Server(數據庫服務器)用於管理客戶端數據和處理客戶端的數據請求。
接口API
由於采用C/S架構,客戶端可向服務器請求數據,API是客戶端和服務器之間交流的接口。系統中主要的接口如下:
接口名稱 | 請求方式 | 請求參數 | 響應信息 | 備注 |
用戶登錄 | POST | 用戶名,密碼 | 用戶基本信息,是否登錄成功 | |
用戶注冊 | POST | 用戶名,密碼 | 用戶名是否可用,注冊是否成功 | 用戶名不能重復 |
新建歌單 | POST | 用戶名,歌單名 | F/T | 同一個用戶的歌單名不能重復 |
獲取歌單信息 | GET | 用戶名,歌單名 | 歌單內歌曲名、專輯、歌手 | |
刪除歌單 | DELETE | 用戶名,歌單名 | F/T | |
獲取歌手的專輯 | GET | 歌手名 | 專輯列表 | |
獲取專輯內歌曲 | GET | 專輯名 | 歌曲列表 | |
播放歌曲 | POST | 歌曲名 | 歌曲路徑信息,音頻流 | 歌曲信息來自數據庫服務器 音頻流來自流媒體服務器 |
獲取歌詞 | GET | 歌曲名 | 歌詞文件 | 根據歌詞文件內時序信息顯示歌詞 |
搜索 | POST | 搜索內容 | 搜索結果 | 搜索可以多種內容: 1.搜索內容為歌曲名,返回專輯名、歌手信息 2.搜索內容為歌手名,歌手及其專輯列表 3.搜索內容為專輯名,返回專輯及其歌曲列表 |
重命名歌單 | POST | 原始歌單名,新歌單名 | 是否成功 |
項目實現視圖
下圖為客戶端源代碼文件目錄結構,分為四個部分。其中,
- helper用來與數據庫服務器和流媒體服務器進行交互,獲取必要的信息
- musicControl用來控制音樂播放的進度和時間,如暫停、下一曲等
- ui用來與用戶進行交互,顯示交互界面
- application是總體的音樂播放器實現
下圖為數據庫服務器源代碼文件目錄結構。存在四個實體類,分別是music、album、singer、musictable。musicbroker是一個控制類,用來控制數據庫的增刪查改等操作。這里數據庫服務器相當於一個小型的MVC架構。
軟件系統概念原型
軟件架構模型是通過一組關鍵視圖來描述的,同一個軟件架構,由於選取的視角(Perspective)和抽象層次不同可以得到不同的視圖,這樣一組關鍵視圖搭配起來可以完整地描述一個邏輯自洽的軟件架構模型。一般來說,我們常用的幾種視圖有分解視圖、依賴視圖、泛化視圖、執行視圖、實現視圖、部署視圖和工作任務分配視圖。
項目分解視圖
依賴視圖
執行視圖
數據庫服務器泛化視圖
數據庫服務器中有一個控制類,對整體的實體類和數據庫進行增刪查改的工作。MusicTable是包含Music列表的實體類。
數據庫設計
歌迷
變量名 | 類型 | 唯一 | 含義 |
userName | string | 是 | 用戶名 |
password | string | 是 | 密碼 |
music表
變量名 | 類型 | 唯一 | 含義 |
m_name | string | 是 | 歌曲名 |
m_startDate | string | 是 | 時間 |
m_singerName | string | 是 | 歌手 |
m_album | string | 是 | 所在專輯 |
Album表
變量名 | 類型 | 唯一 | 含義 |
m_name | string | 是 | 專輯名 |
m_startDate | string | 否 | 時間 |
m_singerName | string | 否 | 歌手名 |
_musics | Music | 否 | 歌曲列表 |
Singer表
變量名 | 類型 | 唯一 | 含義 |
m_name | string | 是 | 歌手名 |
m_category | string | 否 | 歌手類別 |
_albums | Album | 否 | 專輯列表 |
管理員
變量名 | 類型 | 唯一 | 含義 |
AdName | string | 是 | 管理員賬號 |
password | string | 是 | 密碼 |
軟件系統運行環境
運行系統:linux
平台:QtCreater
數據庫:sqlite3 數據庫
概念原型核心工作機制
軟件架構代表了軟件系統的整體設計結構,它應該是所有這些視圖的集合。但我們不會將不同角度的這些視圖整合起來,因為不便於閱讀和更新。不過我們會有意識地將不同角度的視圖之間的映射關系和重疊部分了然於胸,從而深刻理解軟件架構內在的一致性和完整性,這就是系統概念原型。
概念是人對能代表某種事物或發展過程的特點及意義所形成的思維結論。概念原型是一種虛擬的、理想化的軟件產品形式。就像“程序=算法+數據結構”一樣,“概念原型=用例+數據模型”
本系統中用戶主要通過播放歌曲,創建歌單等操作與客戶端進行交互,客戶端通過向服務器請求數據與數據模型交互,進而帶動整個系統工作。