劉利強, 劉朝輝
?
基于Android的視頻播放系統(tǒng)的設(shè)計與實現(xiàn)
劉利強, 劉朝輝
(湖南理工學(xué)院 計算機學(xué)院, 湖南 岳陽 414006)
為了讓人們更有效地利用碎片化時間, 本文設(shè)計開發(fā)了一款移動視頻播放客戶端. 該系統(tǒng)主要為用戶提供本地視頻管理與播放, 網(wǎng)絡(luò)視頻觀看與下載, 以及用戶個人信息管理、好友管理、視頻分享、好友點贊、評論等功能. 相較其他視頻播放器而言, 該系統(tǒng)具有結(jié)構(gòu)完整、功能完備、交互性好、視頻資源管理便捷以及好友實時分享視頻等特點, 并且通過集成Vitamio實現(xiàn)多種視頻格式解碼, 更方便用戶瀏覽各種視頻.
Android; 視頻播放器; 微視頻分享
隨著科技的進步和計算機網(wǎng)絡(luò)的快速發(fā)展, 計算機越來越微型化, 手機也越來越智能化, 而人們更是越來越離不開這些功能強大和使用便捷的智能設(shè)備. 智能設(shè)備的廣泛運用和迅速發(fā)展, 使得各種音頻視頻資源在網(wǎng)絡(luò)上廣泛傳播, 欣賞和傳播音頻視頻資源已經(jīng)漸漸成為人們生活中必不可少的一部分[1, 2]. 現(xiàn)在網(wǎng)絡(luò)上的手機播放器品種繁多, 但是大部分播放器一味追求功能齊全, 外觀過于花哨, 造成了用戶手機資源的巨大浪費, 因此開發(fā)一款好用的手機播放器具有較好的應(yīng)用前景[3, 4].
視頻播放器的主要功能主要包括: 本地視頻的查看、播放、排序、刪除、重命名, 網(wǎng)絡(luò)視頻的播放以及下載, 用戶發(fā)表帶有視頻的動態(tài)消息到好友圈并在朋友圈顯示出來, 好友點贊以及評論, 用戶對個人信息進行管理以及對好友列表進行管理等.
首頁展示用戶所有好友分享的視頻動態(tài), 通過服務(wù)器從數(shù)據(jù)庫中獲取數(shù)據(jù)并通過下拉或上拉刷新視圖. 用戶可對好友視頻動態(tài)進行點贊和評論; 點擊評論圖標(biāo)或者動態(tài)描述文字可以進入該動態(tài)詳情頁; 可瀏覽視頻所有評論; 可以點擊視頻播放按鈕進行在線播放或者點擊全屏按鈕進入播放頁播放; 可以點擊好友頭像進入該好友視頻動態(tài)中心頁查看該好友所有視頻動態(tài); 點擊頂部的菜單按鈕可以發(fā)布視頻動態(tài)到該頁面中.
本地視頻頁展示所有本地視頻. 通過頂部菜單按鈕可對這些視頻資源按名稱、時間、大小進行排序重新顯示; 單擊視頻可進入播放頁面; 點擊視頻右上角的菜單按鈕可對視頻進行打開、移除、重命名、查看詳情等操作.
網(wǎng)絡(luò)視頻頁展示所有服務(wù)器端視頻資源. 通過下拉或上拉刷新視頻資源; 點擊視頻可以轉(zhuǎn)到播放頁在線播放; 點擊視頻右上角下載圖標(biāo)可下載該視頻到本地; 通過頂部菜單按鈕可以刷新該頁面或者進入下載頁面.
視頻播放頁用來播放本地視頻或者網(wǎng)絡(luò)視頻. 該頁由視頻播放控件和控制面板組成. 視頻播放控件可以播放本地視頻以及網(wǎng)絡(luò)視頻, 播放的視頻格式要滿足網(wǎng)絡(luò)上流行的大部份格式; 控制面板由兩部分組成, 上部分可以顯示播放視頻的名字、電源電量、系統(tǒng)時間、音量; 下部分用來控制視頻的播放, 可以點擊返回按鈕返回主界面, 可以點擊播放上一個視頻按鈕或者下一個視頻按鈕來實現(xiàn)播放視頻的切換; 可以通過點擊視頻播放暫停按鈕或者長按屏幕實現(xiàn)視頻播放暫停功能; 可以通過點擊全屏按鈕實現(xiàn)播放視頻的全屏播放和默認(rèn)播放; 點擊屏幕可實現(xiàn)控制面板的顯示隱藏效果.
視頻播放器共分為登錄模塊、主界面模塊、本地視頻模塊、網(wǎng)絡(luò)視頻模塊、個人中心模塊和朋友圈模塊6個模塊, 系統(tǒng)功能結(jié)構(gòu)模塊圖如圖1所示.
圖1 系統(tǒng)功能模塊圖
登錄模塊包括登錄和注冊頁面, 用戶可在此頁面進行登錄或注冊操作, 手機需要聯(lián)網(wǎng). 登錄成功后跳轉(zhuǎn)到主頁面并顯示首頁模塊. 首頁加載好友動態(tài)列表, 并通過下拉或上拉進行刷新. 用戶可對每條動態(tài)點贊或者評論, 也可以點擊視頻在線觀看.
點擊本地視頻按鈕可切換至本地視頻頁面, 用戶可以對本地視頻進行管理以及播放. 網(wǎng)絡(luò)視頻模塊用來顯示服務(wù)器上的所有視頻資源, 用戶可在線觀看以及下載.
個人中心模塊顯示用戶信息并且對好友進行管理.
本地視頻頁面用來展示所有本地視頻, 用戶可對這些視頻進行管理. 頁面用ListView構(gòu)造, 每個Item顯示一條視頻信息, 包括視頻縮略圖、名字、大小、時間、菜單. 頁面截圖如圖2所示.
(1) 布局
用幀布局(FrameLayout)包裹一個用相對布局(RelativteLayout)寫的local_video頁面, 該頁面顯示三個控件ListView、TextView和ProgressBar. 用相對布局為ListView的Item寫一個item_local_video頁面, 頁面顯示視頻的基本信息以及一個菜單按鈕. 頁面控件在LocalVideoAdapter類中初始化并使用. 用菜單頁面實現(xiàn)點擊菜單按鈕彈出菜單.
(2) 加載本地的視頻
在子線程中加載視頻, 用getLocalVideo()方法讀取本地視頻資源, 讀取的視頻放入ArrayList集合中. 寫一個VideoItem類來存儲視頻信息, 包括視頻名稱、大小、時長和在SD卡中的絕對地址.
要在主線程設(shè)置適配器, 用Handler設(shè)置適配器, 部分源碼如下:
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(videoItems!=null&&videoItems.size()>0){
//有數(shù)據(jù)就設(shè)置適配器
videoPagerAdapter=new VideoPagerAdapter(context,videoItems);
listView.setAdapter(videoPagerAdapter);
//把文本隱藏
tv_novideo.setVisibility(View.GONE);
}else {
//沒有數(shù)據(jù)就文本顯示
tv_novideo.setVisibility(View.VISIBLE);
}
//ProgressBar隱藏
pb_loading.setVisibility(View.GONE);
}
};
圖2 本地視頻頁面截圖
(3) 設(shè)置item的點擊事件
點擊視頻Item可以直接進入播放頁播放此視頻. 用Intent類和Bundle類實現(xiàn)不同Activity之間的數(shù)據(jù)傳遞. 視頻菜單點擊事件用來管理該視頻.
網(wǎng)絡(luò)視頻頁面用來展示所有服務(wù)器端視頻, 用戶可對這些視頻進行查看和播放. 頁面用ListView構(gòu)造, 每個Item顯示一條視頻信息, 包括視頻縮略圖、名字、大小、時間、菜單. 頁面截圖如圖3所示.
圖3 網(wǎng)絡(luò)視頻頁面截圖
(1) 布局
用幀布局包裹一個用相對布局寫的net_video頁面, 該頁面顯示三個控件ListView、TextView和ProgressBar. 頁面控件在NetVideoPager類中初始化并使用. 用相對布局為ListView的Item寫一個item_net_video頁面, 頁面顯示視頻的基本信息以及一個菜單按鈕. 頁面控件在NetVideoAdapter類中初始化并使用.
(2) 加載網(wǎng)絡(luò)的視頻
在子線程中加載視頻, 用getNetVideo()方法獲取網(wǎng)絡(luò)視頻資源, 讀取的視頻放入ArrayList集合中. 用VideoItem類來存儲視頻信息, 包括視頻名稱、大小、時長和在服務(wù)器中網(wǎng)絡(luò)中的Uri地址.
(3) 設(shè)置item的點擊事件
點擊視頻Item可以直接進入播放頁播放此視頻. 視頻菜單點擊事件用來管理該視頻.
朋友圈頁面用來實時顯示用戶好友視頻動態(tài), 用戶可以對動態(tài)點贊和評論. 頁面用ListView來構(gòu)造, 從服務(wù)器讀取所有好友動態(tài)數(shù)據(jù)并用適配器加載到該頁面, 每條好友動態(tài)包括頭像圖標(biāo)、用戶名、視頻描述、分享日期、視頻、點贊按鈕、評論按鈕. 朋友圈頁面截圖如圖4所示.
(1) 布局
用幀布局包裹一個用相對布局寫的dynamic_video頁面. 該頁面控件在DynamicVideoPager類里初始化并使用. 用相對布局為ListView的Item寫一個item_dynamic_video頁面, 頁面顯示分享視頻的用戶頭像ImageView、用戶名TextView、視頻描述TextView、分享的視頻VideoView、分享日期TextView、點贊Button以及評論Button. 頁面控件在DynamicVideoAdapter類中初始化并使用.
(2) 加載動態(tài)消息
在子線程中加載動態(tài)消息, 用getDynamicVideo()方法獲取服務(wù)器端數(shù)據(jù)庫里的動態(tài)視頻資源, 讀取的動態(tài)視頻放入ArrayList集合中. 寫DynamicVideoItem類來存儲視頻信息.
(3) 設(shè)置item的點擊事件
點擊動態(tài)視頻Item可以進入動態(tài)視頻詳情頁查看該動態(tài)消息的詳情. 點擊視頻可在線播放, 點擊全屏按鈕可以進入播放頁播放此視頻, 點擊點贊按鈕可以點贊該動態(tài)消息, 點擊評論可以進入動態(tài)視頻詳情頁查看該動態(tài)消息的詳情并評論. 菜單點擊事件用來發(fā)布動態(tài)消息.
圖4 朋友圈頁面截圖
開發(fā)出一款移動端視頻應(yīng)用能夠幫助人們更好利用碎片化時間并向好友分享精彩生活瞬間. 本系統(tǒng)實現(xiàn)了本地視頻管理、網(wǎng)絡(luò)視頻播放及下載、分享本地視頻并點贊、評論等功能, 同時為用戶提供了良好的界面交互體驗. 今后會盡量擴展相應(yīng)的功能, 達(dá)到真正的移動端微視頻分享客戶端.
[1] Zhiwu Zhu, Xu Liu, Xiangyu Li.:[J].Polymers & Polymer Composites, 2014, (221): 45~230
[2] 葉曉靜, 黃俊偉.基于Android系統(tǒng)的多媒體播放器解決方案[J].現(xiàn)代電子技術(shù), 2011
[3] Xin Chen, Songwei Ma, Bingli Guo, etc.[J]. Optical Switching and Networking, 2014(12): 6~22
[4] 姚昱旻, 劉衛(wèi)國. Android的架構(gòu)與應(yīng)用開發(fā)研究[J]. 計算機系統(tǒng)應(yīng)用, 2008
Design and Implementation of Video Player System Based on Android
LIU liqiang, LIU Zhaohui
(College of Computer Science, Hunan Institute of Science and Technology, Yueyang 414006, China)
To make it more efficient to use fragmentation time, it is essential to develop a mobile video playback client. The system is mainly to provide users with local management of video and broadcast, network video to watch and download, as well as the users' personal information management, management, video sharing and thumb up friends, reviews and other functions. Compared with other video player, the system has good structure complete, fully functional, interactive, real-time video resource management convenient and the friends share video etc, and realizes a variety of video formats through integrated Vitamio decoding, more convenient for users to browse all kinds of video.
Android, video player, Micro video shares
2017-09-08
湖南省教育廳科學(xué)研究項目 (16C0721)
劉利強(1972? ), 男, 湖南桃江人, 湖南理工學(xué)院計算機學(xué)院高級實驗師. 主要研究方向: 計算機應(yīng)用
TP311.52
A
1672-5298(2017)04-0020-04