前言:想要寫(xiě)出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇媒體播放范文,相信會(huì)為您的寫(xiě)作帶來(lái)幫助,發(fā)現(xiàn)更多的寫(xiě)作思路和靈感。
【關(guān)鍵詞】多媒體;API函數(shù);VB;播放器
1.引言
多媒體技術(shù)是一種把文本(Text)、圖形(Graphics)、圖像(Images)、動(dòng)畫(huà)(Animation)和聲音(Sound)等形式的信息結(jié)合在一起,并通過(guò)計(jì)算機(jī)進(jìn)行綜合處理和控制,能支持完成一系列交互式操作的信息技術(shù)。多媒體技術(shù)的發(fā)展改變了計(jì)算機(jī)的使用領(lǐng)域,使計(jì)算機(jī)由辦公室、實(shí)驗(yàn)室中的專(zhuān)用品變成了信息社會(huì)的普通工具,廣泛應(yīng)用于工業(yè)生產(chǎn)管理、學(xué)校教育、公共信息咨詢(xún)、商業(yè)廣告、軍事指揮與訓(xùn)練,甚至家庭生活與娛樂(lè)等領(lǐng)域。
多媒體播放器的設(shè)計(jì)是一門(mén)集計(jì)算機(jī)技術(shù)和數(shù)字多媒體技術(shù)于一體的綜合設(shè)計(jì)。隨著中國(guó)計(jì)算機(jī)技術(shù)、寬帶網(wǎng)絡(luò)技術(shù)的發(fā)展,越來(lái)越多的人開(kāi)始重視多媒體播放器的發(fā)展與應(yīng)用。
2.系統(tǒng)的規(guī)劃與研究
播放器的開(kāi)發(fā)階段有設(shè)計(jì)、編碼和測(cè)試3個(gè)基本活動(dòng)組成,其中,“設(shè)計(jì)階段”是獲取高質(zhì)量、易維護(hù)系統(tǒng)的一個(gè)最重要環(huán)節(jié)。采用任一種軟件設(shè)計(jì)方法都將產(chǎn)生系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)、系統(tǒng)的數(shù)據(jù)設(shè)計(jì)和系統(tǒng)的過(guò)程設(shè)計(jì),如圖1所示,描述了播放器開(kāi)發(fā)過(guò)程的信息流程。
3.播放器的設(shè)計(jì)與實(shí)現(xiàn)
利用Visual Basic 中的Windows Media Player控件開(kāi)發(fā)Windows下的多媒體應(yīng)用程序是一種方便簡(jiǎn)單的方法。
播放器的主界面,遵照界面簡(jiǎn)潔、操作簡(jiǎn)單、人性化的原則進(jìn)行設(shè)計(jì)。主要包括播放控制主界面的設(shè)計(jì)、視頻顯示區(qū)域的設(shè)計(jì)即可視化界面的設(shè)計(jì)、播放列表界面的設(shè)計(jì)、相關(guān)信息顯示區(qū)域的設(shè)計(jì)等。
媒體播放器主要的功能是播放音頻文件和視頻文件兩種,音頻播放主要實(shí)現(xiàn)對(duì)目前常用的音頻文件進(jìn)行播放,如:mp3、wav、mid、rmi、midi、au等等??梢酝瓿刹シ帕斜韺?dǎo)入和保存、文件打開(kāi)和播放信息顯示等功能。
視頻播放主要實(shí)現(xiàn)對(duì)常用的視頻文件進(jìn)行播放,如:avi、mpeg、rm、rmvb等等??梢詫?shí)現(xiàn)可視化窗口的全屏幕播放和原始大小播放、可視效果切換等功能。
另外,播放器在實(shí)現(xiàn)視頻全屏幕播放后,沒(méi)有用原有的控制對(duì)象標(biāo)志,而是將它在屬性欄中隱藏了。其按鍵功能由播放控制面板命令按鈕來(lái)實(shí)現(xiàn),控制按鈕上顯示功能漢字信息,在命令按鈕事件中,實(shí)質(zhì)上是調(diào)用Windows Media Player控件中屬性的各項(xiàng)功能。圖2為播放器的功能模塊圖。
4.總結(jié)
該設(shè)計(jì)關(guān)鍵采用了VB 6.0環(huán)境中的Windows Media Player控件,可以播放Windows Media Player所支持的文件格式,包括音頻文件、視頻文件、動(dòng)畫(huà)等,如不能播放視頻文件,需要安裝相應(yīng)的解碼器,如Real Codec Pack等。與其它播放播放器相比,該播放器具有支持格式多樣、界面美觀、功能齊全、占用空間小的特點(diǎn)。與現(xiàn)有多媒體資源應(yīng)用狀況緊密結(jié)合,既具有很強(qiáng)的直觀感,又不失一般性。
參考文獻(xiàn)
[1]彭波,孫一林.多媒體技術(shù)應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2006:1-21.
[2]趙子江.多媒體技術(shù)應(yīng)用教程[M].北京:機(jī)械工業(yè)出版社,1957:1-18.206-207.
[3]陳明.多媒體技術(shù)與應(yīng)用[M].北京:清華大學(xué)出版社,2004:5-10.
[4]洪錦魁.精通Visual Basic 6.0中文版[M].北京、廣州、上海:世界圖書(shū)出版社,2000.
[5]劉炳文.Visual Basic圖形與多媒體程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002:5-28.
[6]魏江江,林少景.Visual Basic API編程百例通[M].北京:科學(xué)出版社,2001.
[7]譚浩強(qiáng),薛淑斌,袁玫編著.Visual BASIC程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2000:256-266.
[8]高智勇.Visual BASIC 6.0實(shí)例教程[M].北京:航空工業(yè)出版社,2000.
[9]Michael Halvorson.Visual Basic6學(xué)習(xí)指南[M].北京:機(jī)械工業(yè)出版社,1999.
[10]劉炳文.精通Visual Basic 6.0中文版[M].北京:電子工業(yè)出版社,1999.
關(guān)鍵詞: 流媒體; JSP; Html5; Chrome瀏覽器; 視頻控制
中圖分類(lèi)號(hào):TP37 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)18-0191-03
Design and Implementation of Playing Streaming Media Based On JSP
YANG Zi-xiang,LIN Peng
(Tianjin Open University, Tianjin 300191, China)
Abstract: With the development of Internet, playing web video is more and more on web. However, if playing the video through the HTML5 or the Html tag, then dragging and dropping the video only after the completion of the video completely downloaded before using. Through research and analysis principles of streaming media server of Windows Media Services, and research Http package of Chrome browser, the paper successfully devised playing streaming media with JSP program. By publishing program on Tomcat, users can drag and drop the video during playback, successfully resolving the problem of the HTML5 or the Html tag with not drag.
Key words:Streaming Media; JSP; Html5; Chrome browser; Video Control
1 概述
隨著Internet的發(fā)展,網(wǎng)頁(yè)視頻播放的使用越來(lái)越多。因此,視頻播放的用戶(hù)體驗(yàn)也越來(lái)越實(shí)用;視頻的播放、暫停、定點(diǎn)播放等操作的需求也就越來(lái)越大,而且也更符合用戶(hù)實(shí)際瀏覽視頻的要求。但是,目前如果直接通過(guò)HTML5的或者Html的標(biāo)簽播放視頻的話(huà),視頻的拖拽功能只有在視頻完全下載完成后才能使用。這就會(huì)加大服務(wù)器的壓力,因此越來(lái)越多的用戶(hù)開(kāi)始使用流媒體。
所謂流媒體是指采用流式傳輸?shù)姆绞皆贗nternet播放的媒體格式。流媒體又叫流式媒體,它是指商家用一個(gè)視頻傳送服務(wù)器把節(jié)目當(dāng)成數(shù)據(jù)包發(fā)出,傳送到網(wǎng)絡(luò)上。用戶(hù)通過(guò)解壓設(shè)備對(duì)這些數(shù)據(jù)進(jìn)行解壓后,節(jié)目就會(huì)像發(fā)送前那樣顯示出來(lái)。流媒體的出現(xiàn)極大地方便了人們的工作和生活。目前,使用流媒體的話(huà)都會(huì)通過(guò)流媒體服務(wù)器(比如Windows Media Services等)來(lái)搭建流媒體平臺(tái)[1-4]。
JSP作為一種網(wǎng)頁(yè)開(kāi)發(fā)語(yǔ)言,在網(wǎng)站的開(kāi)發(fā)中使用者的比例很大;因此,使用JSP開(kāi)發(fā)的網(wǎng)站對(duì)視頻播放的需求也會(huì)越來(lái)越多。但是,如果直接通過(guò)JSP后臺(tái)平臺(tái)結(jié)合HTML5的標(biāo)簽進(jìn)行視頻播放的話(huà),就會(huì)出現(xiàn)網(wǎng)頁(yè)中視頻無(wú)法拖拽,從而不能實(shí)現(xiàn)定點(diǎn)播放等功能。所以,通過(guò)JSP語(yǔ)言實(shí)現(xiàn)視頻的流媒體播放對(duì)于JSP網(wǎng)站來(lái)說(shuō),不僅可以省去借助流媒體服務(wù)器的煩惱,而且可以實(shí)現(xiàn)在線(xiàn)視頻播放的隨意控制,從而滿(mǎn)足用戶(hù)的實(shí)際需求。
2 基于流媒體服務(wù)器的網(wǎng)頁(yè)播放探究
流媒體服務(wù)器的使用,解決了視頻播放過(guò)程中,直接訪(fǎng)問(wèn)網(wǎng)絡(luò)視頻資源導(dǎo)致的視頻拖拽問(wèn)題。因此,流媒體服務(wù)器的網(wǎng)頁(yè)視頻資源的訪(fǎng)問(wèn)方式對(duì)于本文的設(shè)計(jì)來(lái)說(shuō),具有很大的價(jià)值。Windows Media Services作為一種流媒體服務(wù)器,是Windows Server服務(wù)器系統(tǒng)中使用頻率很高而且性能很好的流媒體服務(wù)器。本文通過(guò)Chrome瀏覽器訪(fǎng)問(wèn)Windows Media Services中視頻資源的流程研究發(fā)現(xiàn),在視頻拖拽的控制中,Chrome瀏覽器都會(huì)發(fā)送Http請(qǐng)求包;Windows Media Services接收到瀏覽器的請(qǐng)求后,再根據(jù)Http中包含的內(nèi)容返回相應(yīng)的視頻片段。具體的流程如圖1所示。
如圖1中流媒體視頻在Chrome瀏覽器和Windows Media Services流媒體服務(wù)器之間的交互可以看出,無(wú)論視頻的播放還是中間視頻播放控制,都是Chrome發(fā)送Http包進(jìn)行控制;而Windows Media Services流媒體服務(wù)器則是負(fù)責(zé)對(duì)視頻片段的返回。因此,本文使用Chrome瀏覽器訪(fǎng)問(wèn)對(duì)已經(jīng)在Windows Media Services流媒體服務(wù)器中的視頻,通過(guò)Chrome瀏覽器中的Network網(wǎng)絡(luò)工具,對(duì)Http包進(jìn)行抓取。圖2中顯示的是視頻點(diǎn)擊開(kāi)始播放后,即視頻從頭開(kāi)始播放,抓取的Http請(qǐng)求包的頭文件內(nèi)容。圖3和圖4中顯示的則是視頻播放過(guò)程中點(diǎn)擊視頻任意位置后,抓取的Http請(qǐng)求包的頭文件內(nèi)容。
3 基于JSP的在線(xiàn)流媒體播放的實(shí)現(xiàn)
在第二節(jié)中,本文通過(guò)Chrome的Http包的追蹤功能,截取了視頻在播放控制過(guò)程中不同播放位置請(qǐng)求的包。通過(guò)圖2、圖3和圖4的追蹤結(jié)果可以看到他們的Request Headers以及Response Headers中的部分頭文件字段是不同的,具體的信息比較如表1所示。
由表1中可以看到,三個(gè)圖中的Http包中只有Range、Content-Range字段是不同的,其他的字段的內(nèi)容根本就沒(méi)有發(fā)生變化。其中,Range是Request Headers中的字段,Content-Range是Response Headers中的字段。在表1中還可以發(fā)現(xiàn),Content-Range字段的內(nèi)容和Range字段的內(nèi)容有一定的關(guān)系;Content-Range內(nèi)容中“-”前的數(shù)值和Range是一致的。同時(shí),在表1中也可以發(fā)現(xiàn),Content-Range字段和Content-Length字段有一定的關(guān)系;Content-Range內(nèi)容中“/”后的數(shù)值和Content-Length是一致的。我們知道,Http包中的Content-Length的作用主要是記錄文件的長(zhǎng)度,因此可以在服務(wù)器端通過(guò)程序求出文件的大小。
由于Http包中的Request Headers是由瀏覽器進(jìn)行發(fā)出并封裝的,因此本文的程序無(wú)法控制包中的Request Headers內(nèi)容。但是,Http包中的Response Headers是由服務(wù)器封裝后返回給瀏覽器的;因此,本文的程序設(shè)計(jì)將會(huì)根據(jù)Http包中的Request Headers字段內(nèi)容,對(duì)Http包中的Response Headers字段進(jìn)行封裝返回給服務(wù)器。根據(jù)以上的分析,本文通過(guò)JSP進(jìn)行程序設(shè)計(jì)如下:
@RequestMapping(value = { "/videos/{path}" })
public String displayVideo(HttpServletRequest request,
HttpServletResponse response, @PathVariable String path) {
try {String filePath = videoDir + path + ".mp4";
File file = new File(filePath);
if (!file.exists()) {
response.sendError(404);
LOG.error("未找到文件" + file.getCanonicalPath());}
Long fileLength = file.length();
LOG.debug("文件找到了,大小為" + fileLength);
String range = request.getHeader("range");
if (range != null && !range.equals("")) {
LOG.debug("請(qǐng)求的名字是range,內(nèi)容是" + range); }
Long startPos = 0l;
if (range != null && !range.equals("")) {
Pattern pattern = Pattern
.compile("^bytes\\=(\\d+)(?:\\-(\\d+)?)?$");
Matcher matcher = pattern.matcher(range);
LOG.debug(matcher.matches());
startPos = Long.parseLong(matcher.group(1), 10);
LOG.debug("成功截獲range,開(kāi)始位置是" + startPos);
response.setStatus(206);
} else {
response.setStatus(200);
LOG.debug("從頭開(kāi)始傳送");}
InputStream is = new FileInputStream(file);
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
response.addHeader("Content-Range", "bytes " + startPos + "-"
+ (fileLength - 1) + "/" + fileLength);
response.addHeader("Content-Length", fileLength.toString());
response.setCharacterEncoding("UTF-8");
response.setContentType("video/mp4");
response.setHeader("Accept-Ranges", "bytes");
is.skip(startPos);
int length = is.read(buffer);
while (length > 0) {
os.write(buffer, 0, length);
length = is.read(buffer); }
os.flush();
os.close();
is.close();
} catch (Exception err) {
if (err.getClass()
.getName()
.equals("org.apache.catalina.connector.ClientAbortException")) {
LOG.debug("客戶(hù)掛斷了");
} else {
err.printStackTrace();}}
return null; }
在本文的程序設(shè)計(jì)中,瀏覽器的視頻請(qǐng)求URL路徑的后端是通過(guò)JSP中的Spring框架進(jìn)行控制,在路徑中的/videos/{paths}即是視頻路徑存儲(chǔ)在磁盤(pán)的相對(duì)位置;在程序中,視頻的讀取并沒(méi)有經(jīng)過(guò)中間的流媒體服務(wù)器,而是直接讀取在磁盤(pán)中的視頻文件。經(jīng)過(guò)程序在Tomcat7上測(cè)試之后,視頻在播放的過(guò)程中,用戶(hù)可以根據(jù)需求隨意拖拽,解決了Html5中標(biāo)簽不能播放的問(wèn)題。具體的如圖5所示,圖中顯示的是程序后視頻隨意播放截取的Http包。經(jīng)比較,與文中的圖3、圖4中間播放的Http包的內(nèi)容是相似的,實(shí)現(xiàn)了流媒體播放的效果。
4 結(jié)論
本文通過(guò)分析Windows Media Services流媒體服務(wù)器中視頻拖拽播放控制過(guò)程中,Chrome瀏覽器發(fā)送的Http包的信息,得出了瀏覽器播放視頻時(shí)播放控制和Http包中Request Headers、Response Headers頭文件的關(guān)系。并且,本文通過(guò)JSP程序語(yǔ)言的設(shè)計(jì),成功實(shí)現(xiàn)了流媒體服務(wù)器控制視頻播放的原理。本文設(shè)計(jì)的程序到Tomcat后,經(jīng)過(guò)該程序訪(fǎng)問(wèn)的視頻都可以在瀏覽器端隨意拖拽播放視頻,解決了Html5的標(biāo)簽不能直接播放服務(wù)器磁盤(pán)中視頻的弊端,也省去了流媒體服務(wù)器視頻的任務(wù)。
參考文獻(xiàn):
[1] 蔣太杰. Windows Media Services及其在遠(yuǎn)程教育中的應(yīng)用[J]. 指揮技術(shù)學(xué)院學(xué)報(bào), 2001, 12(6): 81-85.
[2] 王雪婷, 于勇. Windows Media Services流媒體技術(shù)與實(shí)現(xiàn)[J]. 信息技術(shù)與信息化, 2006(1): 51-53+64.
1、在“初始化”圖標(biāo)窗口中初始化所用變量,輸入如下:
startframe:=1
endframe:=1
2、“電影”圖標(biāo)的設(shè)置。雙擊此圖標(biāo),出現(xiàn)的屬性窗口設(shè)置如下:
1) Concurrency選項(xiàng)設(shè)置為“Concurrent”,其作用是在運(yùn)行電影圖標(biāo)的同時(shí)運(yùn)行下面的交互圖標(biāo),以激活控制按鈕。
2) Play選項(xiàng)設(shè)置為“Fixed Number of Times”,并在下面的輸入框中輸入1,作為播放的次數(shù)。
3) 在Start Frame中輸入變量“startrame”,在End Frame中輸入變量“endframe”。由于這兩個(gè)變量初值都是1,運(yùn)行時(shí)電影會(huì)靜止在第一幀,播放則由下面的按鈕控制。
3、按鈕響應(yīng)的設(shè)置。分別雙擊交互圖標(biāo)右側(cè)的五個(gè)按鈕響應(yīng)標(biāo)志,在打開(kāi)的屬性窗口中,選中“Perpetual”,Branch選項(xiàng)設(shè)為“Return”,并適當(dāng)調(diào)整五個(gè)按鈕的位置和大小。
4、各種控制的實(shí)現(xiàn)。
1) 在“從頭播放”圖標(biāo)中輸入:
startframe:=1
endframe:=MediaLength@"電影"
MediaPlay(IconID@"電影")
其中系統(tǒng)變量MediaLength作用是返回指定數(shù)字電影的長(zhǎng)度。
2) 在“暫停播放”圖標(biāo)中輸入:
MediaPause (IconID@"電影",True)
函數(shù)MediaPause 用來(lái)暫停一個(gè)媒體文件的播放。
3) 在“繼續(xù)播放”圖標(biāo)中輸入:
startframe:=MediaPosition@"電影"
endframe:=MediaLength@"電影"
MediaPlay(IconID@"電影")
系統(tǒng)變量MediaPosition用來(lái)指示媒體文件播放到的當(dāng)前位置。
4) 在“逐幀向后”圖標(biāo)中輸入:
startframe:=MediaPosition@"電影"
endframe:= MediaPosition@"電影"+1
MediaPlay(IconID@"電影")
5) 在“逐幀向前”圖標(biāo)中輸入:
startframe:=MediaPosition@"電影"
endframe:= MediaPosition@"電影"-1
關(guān)鍵詞:移動(dòng)互聯(lián)網(wǎng) iOS系統(tǒng) 流媒體 軟件設(shè)計(jì)
中圖分類(lèi)號(hào):TN919.8 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2012)12-0116-01
流媒體主要是指在互聯(lián)網(wǎng)中,對(duì)播放的媒體格式采用流式傳輸?shù)姆绞竭M(jìn)行傳播。移動(dòng)流媒體技術(shù)的應(yīng)用,實(shí)現(xiàn)了在移動(dòng)設(shè)備上進(jìn)行視頻播放的功能。隨著互聯(lián)網(wǎng)技術(shù)和智能手機(jī)的盛行,流媒體技術(shù)在智能手機(jī)中的運(yùn)用,滿(mǎn)足了消費(fèi)了移動(dòng)互聯(lián)的需求,此時(shí)的智能手機(jī)在操作系統(tǒng)方面也呈現(xiàn)出多樣化的發(fā)展,其中iPhone OS系統(tǒng)成為最受歡迎的系統(tǒng)之一,其軟件數(shù)量的增長(zhǎng)速度非常快。
1、iPhone OS系統(tǒng)平臺(tái)及開(kāi)發(fā)工具
iPhone OS也稱(chēng)之為iOS,是蘋(píng)果公司專(zhuān)門(mén)為iPhone所開(kāi)發(fā)的一款操作系統(tǒng),在蘋(píng)果系列產(chǎn)品中陸續(xù)套用,該系統(tǒng)最大的優(yōu)勢(shì)在于人機(jī)操作及UI設(shè)計(jì)非常優(yōu)秀,攜帶軟件種類(lèi)比較豐富。
1.1 系統(tǒng)架構(gòu)
iOS系統(tǒng)主要分為四個(gè)部分:核心操作系統(tǒng)層、核心服務(wù)層、媒體曾及可輕觸層。核心操作系統(tǒng)層位于系統(tǒng)架構(gòu)的最底層,包括文件系統(tǒng)、電源管理、內(nèi)存管理及一些操作系統(tǒng)個(gè)任務(wù),能與硬件設(shè)備直接進(jìn)行交互。核心服務(wù)層的作用是輔助訪(fǎng)問(wèn)iPhone OS系統(tǒng)。媒體層的作用是通過(guò)它來(lái)實(shí)現(xiàn)各種媒體文件在應(yīng)用程序中得以使用,可以進(jìn)行視頻和音頻的錄制,繪制圖形及制作簡(jiǎn)單的動(dòng)畫(huà)等??奢p觸層位于最上層,為應(yīng)用程序提供各種有用框架,大部分和用戶(hù)界面相關(guān),實(shí)質(zhì)上就是對(duì)設(shè)備上的觸摸交互操作進(jìn)行控制。
1.2 開(kāi)發(fā)工具
在進(jìn)行iOS系統(tǒng)開(kāi)發(fā)中,蘋(píng)果公司主要采用iPhone SDK開(kāi)發(fā)工具包,在標(biāo)準(zhǔn)C++編程語(yǔ)言基礎(chǔ)上,通過(guò)該軟件翻譯為Objective-C語(yǔ)言,這種語(yǔ)言是蘋(píng)果標(biāo)準(zhǔn)語(yǔ)言,然后編譯為iPhone軟件格式。蘋(píng)果公司為開(kāi)發(fā)人員還提供集成開(kāi)發(fā)環(huán)境Xcode,主要用于iPhone應(yīng)用程序,該開(kāi)發(fā)工具屬于一條龍式的應(yīng)用程序,可以用作構(gòu)建應(yīng)用、代碼編輯及程序調(diào)試等,是一種快捷的方式,該工具也可以進(jìn)行輔助開(kāi)發(fā)影城程序、數(shù)據(jù)庫(kù)、工具、嵌入包及驅(qū)動(dòng)程序等。此外,iOS開(kāi)發(fā)工具中,最重要的一個(gè)工具就是iPhone模擬器,是一種重要的測(cè)試應(yīng)用程序工具。
2、流媒體播放器軟件設(shè)計(jì)
從iPhone,iPad等移動(dòng)設(shè)備的實(shí)際應(yīng)用中,蘋(píng)果公司對(duì)實(shí)現(xiàn)流媒體技術(shù)開(kāi)發(fā)了HTTP Live Streaming協(xié)議。在該協(xié)議中,音頻、視頻文件均有服務(wù)器提供給客戶(hù)端。所以,該軟件系統(tǒng)的結(jié)構(gòu)主要分為服務(wù)器端與客戶(hù)端。
2.1 系統(tǒng)服務(wù)器端設(shè)計(jì)
該協(xié)議技術(shù)的服務(wù)器組成包含兩個(gè)部分:編碼器與流分割器。其主要能使對(duì)輸入的視頻或者音頻媒體內(nèi)容進(jìn)行編碼,封裝為適合的內(nèi)容格式進(jìn)行傳送。編碼器的主要作用是對(duì)輸入的視頻、音頻文件采用H.264標(biāo)準(zhǔn)進(jìn)行編碼,然后采用MPEG-2輸出,流分割器軟件將文件分割為等間隔的片段,保存成.ts文件。分割器完成后,都會(huì)生成一個(gè)新媒體文件,通過(guò)索引文件進(jìn)行地質(zhì)的跟蹤與查找,可以通過(guò)對(duì)分割文件進(jìn)行加密處理。
2.2 系統(tǒng)客戶(hù)端設(shè)計(jì)
通過(guò)iPhone OS平臺(tái)設(shè)計(jì),視頻模塊通過(guò)流媒體播放器對(duì)網(wǎng)站中的資源進(jìn)行播放。通過(guò)流媒體播放器,用戶(hù)能夠之間觀看到網(wǎng)站中的視頻,還可以進(jìn)行分享。其中,視頻模塊主要包含以下頁(yè)面:
(1)熱門(mén)視頻播放列表。直接在主頁(yè)面上點(diǎn)擊“視頻”,系統(tǒng)就會(huì)進(jìn)入到熱門(mén)視頻播放列表,表示當(dāng)前網(wǎng)站最熱門(mén)的視頻,列表將視頻的主要信息呈現(xiàn)出來(lái),橙色字體為視頻標(biāo)題。點(diǎn)擊任意一行即可進(jìn)入視頻介紹頁(yè)面。點(diǎn)擊“返回”即可退回主頁(yè)面。點(diǎn)擊右上角“刷新”,可以對(duì)當(dāng)前頁(yè)面進(jìn)行刷新。
(2)同類(lèi)視頻播放列表。視頻列表對(duì)所有的視頻全部通過(guò)分類(lèi)列出,選中任意類(lèi)別即可進(jìn)入到該類(lèi)視頻播放列表,與熱門(mén)視頻播放列表相同,每一行都對(duì)視頻主要信息進(jìn)行羅列,進(jìn)入視頻播放頁(yè)面及返回上一列表的方法都是相同的。不同的是這部分增設(shè)了分頁(yè)功能,如果視頻數(shù)量過(guò)多,無(wú)法在一頁(yè)顯示,則可以點(diǎn)擊列表最后一行的“更多”進(jìn)行查看。
(3)視頻簡(jiǎn)介頁(yè)面。不管是在熱門(mén)視頻列表或者是分類(lèi)視頻列表中選中任意一個(gè)視頻以后,即可進(jìn)入到簡(jiǎn)介頁(yè)面,橙色字體是視頻的標(biāo)題,黑色字體為視頻內(nèi)容簡(jiǎn)介。點(diǎn)擊右下角“播放”就可以觀賞視頻。如果通過(guò)簡(jiǎn)介對(duì)該視頻沒(méi)有興趣,可以返回上一層,重新選擇,如果喜歡該視頻,并且想與朋友一起分享,可以點(diǎn)擊“分享”,將視頻鏈接到微博中。
(4)視頻播放界面。點(diǎn)擊“播放”就可以對(duì)視頻進(jìn)行觀看,也就進(jìn)入到了視頻播放界面。如果對(duì)正在播放的畫(huà)面進(jìn)行點(diǎn)擊,就可以對(duì)播放運(yùn)行的狀態(tài)進(jìn)行控制,包含暫停、播放、快進(jìn)、快退等,通過(guò)右上角的“完成”實(shí)現(xiàn)對(duì)視頻播放的控制,此外,還可以實(shí)現(xiàn)全屏播放。
(5)視頻分享界面。進(jìn)行視頻分享的時(shí)候,點(diǎn)擊”分享”即可進(jìn)行分享界面??梢赃x擇所要分享到的地址,通過(guò)授權(quán)然后登陸地址以后進(jìn)行分享,視頻就可以分享到該鏈接地址。不管是要分享到何處,所要采取的操作原理都是一樣的,如果不想分享,直接點(diǎn)擊取消就可以返回到視頻簡(jiǎn)介頁(yè)面。
3、結(jié)語(yǔ)
隨著網(wǎng)路技術(shù)的飛速發(fā)展,移動(dòng)通信行業(yè)真正的步入了移動(dòng)信息的時(shí)代,智能手機(jī)的普及,使應(yīng)用軟件呈現(xiàn)出多樣化的發(fā)展趨勢(shì)。流媒體播放器軟件屬于諸多應(yīng)用程序中的一種,盡管與PC產(chǎn)業(yè)還有一定的差距,但其發(fā)展速度驚人,必定會(huì)在不久的將來(lái)迎頭趕上。
參考文獻(xiàn)
[1]施佳子.iPhone平臺(tái)移動(dòng)流媒體播放器的實(shí)現(xiàn)與優(yōu)化[J]. 華中科技大學(xué),2009(1).
[2]葉汝軍,丁建峰.虛擬存儲(chǔ)技術(shù)在流媒體管理系統(tǒng)中的應(yīng)用[J].黑龍江科技信息,2008(25).
關(guān)鍵詞:ActiveX;外部函數(shù);菜單;按鈕;滑塊;播放器
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2008)11-20329-03
1 前言
Authorware作為一種主要面向非程序員的優(yōu)秀的交互式多媒體創(chuàng)作工具,為了滿(mǎn)足一些高級(jí)設(shè)計(jì)人員進(jìn)行復(fù)雜程序創(chuàng)作的需要,Authorware從4.0版本開(kāi)始提供了對(duì)ActiveX控件和外部函數(shù)的支持,由于有許多軟件廠商支持ActiveX技術(shù),所以大多數(shù)功能都能找到相應(yīng)的ActiveX控件。在Authorware中,通過(guò)調(diào)用ActiveX控件來(lái)直接使用現(xiàn)成的程序模塊,可省掉許多繁瑣的編程,而且?guī)缀蹩梢酝瓿扇魏喂ぷ鳌?/p>
目前,媒體播放器越來(lái)越追求個(gè)性化,為了滿(mǎn)足個(gè)性化的需求,我們可以借助圖形圖像處理軟件使播放界面?zhèn)€性化,在Authorware 7.0中利用控件以及外部函數(shù)能設(shè)計(jì)出播放各種媒體的個(gè)性化播放器。在設(shè)計(jì)視頻播放控制時(shí),要注意播放、暫停、繼續(xù)、停止、快進(jìn)、后退等操作的激活條件,進(jìn)度滑塊及音量滑塊能及時(shí)地響應(yīng)交互。在Authorware 7.0中設(shè)計(jì)的媒體播放器運(yùn)行界面如圖1所示。
2 ActiveX控件的應(yīng)用
ActiveX控件通常以動(dòng)態(tài)鏈接庫(kù)的形式存在,其設(shè)計(jì)思想是將一個(gè)程序嵌入到另一個(gè)程序中,這樣就可使它能夠隨意地應(yīng)用到各種場(chǎng)合。ActiveX控件的數(shù)據(jù)輸入和函數(shù)功能執(zhí)行都必須通過(guò)容器,因此ActiveX控件和容器之間必須有一些特定的接口協(xié)議。ActiveX控件必須具備屬性(property)、方法(method)和事件(event),通過(guò)屬性的名稱(chēng)、方法的名稱(chēng)及參數(shù),容器可以存取和改變ActiveX控件的屬性參數(shù)。通過(guò)事件,比如屬性參數(shù)的改變、用戶(hù)按下鼠標(biāo)左鍵等,ActiveX控件通知容器進(jìn)行響應(yīng)相關(guān)操作。
2.1 ActiveX控件的安裝
在開(kāi)發(fā)Authorware的應(yīng)用程序時(shí),如果利用了ActiveX控件,在打包時(shí)要注意兩點(diǎn):(1)在用戶(hù)的應(yīng)用程序中需附帶上所需的支持文件,即在應(yīng)用程序的“Xtras”目錄里附帶上Activex.x32,因?yàn)橹挥羞@樣應(yīng)用程序才能夠正常地執(zhí)行,否則程序中的ActiveX控件是無(wú)法使用的。但是需要注意的是打包程序無(wú)須附帶上Actxpriv.x32,否則會(huì)造成不可預(yù)料的后果,因?yàn)樗饕?fù)責(zé)設(shè)計(jì)時(shí)利用ActiveX控件的界面。(2)要將所需的ActiveX控件相關(guān)文件(*.OCX或*.DLL)復(fù)制到硬盤(pán)相應(yīng)的文件夾中(Windows NT以后的操作系統(tǒng)是%systemroot%\system32),本播放器應(yīng)用程序在設(shè)計(jì)時(shí)需要復(fù)制MSDXM.OCX、COMDLG32.OCX、FM20.DLL、FM20CHS.DLL四個(gè)文件,然后將其在Windows系統(tǒng)中注冊(cè)。
2.2 ActiveX控件的注冊(cè)
設(shè)計(jì)Authorware應(yīng)用程序時(shí),如果要使用Authorware沒(méi)有提供的控件,使用前要先在Windows中進(jìn)行手動(dòng)注冊(cè)。如果我們的程序中使用了控件且要交給用戶(hù)使用,在程序中應(yīng)先檢測(cè)用戶(hù)機(jī)中是否注冊(cè)了該控件,若沒(méi)有就要進(jìn)行自動(dòng)安裝、自動(dòng)注冊(cè)。本播放器使用時(shí)需要檢測(cè)Microsoft Forms 2.0 ScrollBar、Microsoft Common Dialog Control和Windows Media Player三個(gè)控件,以便確定是否要安裝、注冊(cè)。
注冊(cè)的方法有兩種:
(1)手動(dòng)注冊(cè)
方法:先將所需的ActiveX控件相關(guān)文件(如MSDXM.OCX、COMDLG32.OCX、FM20.DLL、FM20CHS.DLL)復(fù)制到硬盤(pán)相應(yīng)的文件夾中(Windows NT以后的操作系統(tǒng)是%systemroot%\system32)。然后手動(dòng)注冊(cè),即單擊Windows的“開(kāi)始”菜單,選擇“運(yùn)行”命令,在打開(kāi)的對(duì)話(huà)框中輸入以下命令: regsvr32.exe,如regsvr32.exe MSDXM.OCX。
regsvr32.exe是Windows自帶的ActiveX注冊(cè)工具,可以在Windows的系統(tǒng)目錄中找到。
(2)自動(dòng)注冊(cè)
方法:利用Authorware 中的Xtra ActiveX 里的函數(shù)來(lái)進(jìn)行注冊(cè)。對(duì)ActiveX控件注冊(cè)的格式如下: ActiveXControlRegister("")。
本播放器應(yīng)用程序使用了三個(gè)控件,圖2是媒體播放器設(shè)計(jì)窗口。
圖標(biāo)FileDialog負(fù)責(zé)打開(kāi)文件,用的是Microsoft Common Dialog Control控件;圖標(biāo)VolumeBar負(fù)責(zé)音量調(diào)節(jié),圖標(biāo)PositionBar負(fù)責(zé)進(jìn)度處理,兩者用的是同一種控件Microsoft Forms 2.0 ScrollBar;圖標(biāo)MediaPlay負(fù)責(zé)媒體播放,用的是Windows Media Player控件。在計(jì)算圖標(biāo)Register中設(shè)置程序進(jìn)行自動(dòng)檢測(cè)、安裝和注冊(cè),程序如下:
――獲取三個(gè)控件的classID
classIDScrollBar:="{DFD181E0-5E2F-11CE-A449-00AA004A803D}"
classIDDialog:="{F9043C85-F6F2-101A-A3C9-08002B2F49FB}"
classIDMediaplay:="{22D6F312-B0F6-11D0-94AB-0080C74C7E95}"
――獲取系統(tǒng)文件夾
WindowsPath:=getosdirectory()
――判斷當(dāng)前系統(tǒng)是否支持控件注冊(cè)
if ActiveXInstalled()=-1 then
――判斷Microsoft Forms 2.0 ScrollBar滾動(dòng)條控件是否已安裝
if ActiveXControlQuery(classIDScrollBar)=0 then
――拷貝FM20.DLL和FM20CHS.DLL兩個(gè)文件到系統(tǒng)目錄
CopyFile(FileLocation^"FM20.DLL",WindowsPath^"\\system32\\FM20.DLL")
CopyFile(FileLocation^"FM20CHS.DLL",WindowsPath^"\\system32\\FM20CHS.DLL")
――注冊(cè)Microsoft Forms 2.0 ScrollBar滾動(dòng)條控件
ActiveXControlRegister(WindowsPath^"\\system32\\FM20.DLL")
end if
――判斷、注冊(cè)Microsoft Common Dialog Control,version 6.0通用對(duì)話(huà)框控件
if ActiveXControlQuery(classIDDialog)=0 then
CopyFile(FileLocation^"COMDLG32.OCX",WindowsPath^"\\system32\\COMDLG32.OCX")
ActiveXControlRegister(WindowsPath^"\\system32\\COMDLG32.OCX")
end if
――判斷、注冊(cè)Windows Media Player 6.4控件
if ActiveXControlQuery(classIDMediaplay)=0 then
CopyFile(FileLocation^"MSDXM.OCX",WindowsPath^"\\system32\\MSDXM.OCX")
ActiveXControlRegister(WindowsPath^"\\system32\\MSDXM.OCX")
end if
end if
3 彈出式菜單
現(xiàn)在許多播放器都有彈出式菜單功能,如在圖1中的MENU按鈕上單擊時(shí)會(huì)出現(xiàn)有“打開(kāi)文件”、“全屏播放”和“退出”三個(gè)子菜單項(xiàng)的菜單,且單擊某個(gè)子菜單項(xiàng)時(shí)執(zhí)行相應(yīng)操作。其設(shè)計(jì)原理是創(chuàng)建菜單、激活菜單、響應(yīng)子菜單項(xiàng)。
3.1 創(chuàng)建菜單
計(jì)算圖標(biāo)BuildMenu中的程序負(fù)責(zé)創(chuàng)建菜單,mCreatePopupMenu()、mAppendMenu( Menu, Flags , MenuID , MenuText )、mMenuHookOn( WindowHandle )函數(shù)都置于外部函數(shù)budmenu.u32中,使用時(shí)需載入到Authorware中,程序如下:
――選擇的菜單項(xiàng)的ID的初值
LastMenuID := -1
――添加一個(gè)filename主菜單項(xiàng)
filemenu := mCreatePopupMenu()
mAppendMenu( filemenu , 0 , 10 , "打開(kāi)文件")
mAppendMenu( filemenu , 0 , 11, "全屏播放")
mAppendMenu(filemenu,2048,0,"")
mAppendMenu( filemenu , 0 , 12 , "退出")
――設(shè)置與Authorware通信的消息鉤子
mMenuHookOn( WindowHandle )
3.2 激活菜單
為了確保交互靈活,按鈕響應(yīng)MenuActivation的響應(yīng)需設(shè)為永久、返回,該響應(yīng)包含的兩個(gè)計(jì)算圖標(biāo)FileMenuTrack和ReturnLastMenuID的順序不可顛倒。
(1)計(jì)算圖標(biāo)FileMenuTrack的程序?yàn)椋?/p>
――激活菜單
mTrackPopupMenu(filemenu,0,ResponseLeft@“MenuActivation”+WindowLeft,ResponseTop@“MenuActivation”+ResponseHeight@“MenuActivation”+WindowTop,0,WindowHandle,0 )
(2)計(jì)算圖標(biāo)ReturnLastMenuID的程序?yàn)椋?/p>
――獲取最后選擇的菜單項(xiàng)的ID
LastMenuID := mGetLastMenuID()
Checked@"MenuActivation" := FALSE
3.3 響應(yīng)子菜單項(xiàng)
根據(jù)獲取的最后選擇的子菜單項(xiàng)的ID 值來(lái)執(zhí)行相應(yīng)的響應(yīng)為永久、返回的條件響應(yīng):LastMenuID=10 、LastMenuID=11和LastMenuID=12,從而實(shí)現(xiàn)文件打開(kāi)、全屏播放和退出。
(1)計(jì)算圖標(biāo)LastMenuID=10的程序?yàn)椋?/p>
――打開(kāi)文件
SetSpriteProperty(@"FileDialog", #dialogtitle, "請(qǐng)選擇一個(gè)視頻文件:")
SetSpriteProperty(@"FileDialog", #BaseURL, FileLocation)
SetSpriteProperty(@"FileDialog", #filter, "視頻文件|*.mpg;*.avi;*.mpeg;*.dat;*.asf")
CallSprite(@"FileDialog", #showopen)
getFile:=GetSpriteProperty(@"FileDialog", #FileName)
SetSpriteProperty(@"MediaPlay", #FileName,getFile)
SetSpriteProperty(@"MediaPlay",#displaysize,4)
CallSprite(@"MediaPlay",#play)
LastMenuID:=-1
(2)計(jì)算圖標(biāo)LastMenuID=11的程序?yàn)椋?/p>
――設(shè)置為全屏播放
SetSpriteProperty(@"MediaPlay",#displaysize,3)
LastMenuID:=-1
3)計(jì)算圖標(biāo)LastMenuID=12的程序?yàn)椋?/p>
――退出
mMenuHookOff()
mDestroyMenu(filemenu)
Quit()
4 按鈕控制
4.1 按鈕激活條件
在設(shè)計(jì)按鈕控制時(shí),要合理設(shè)置播放(從頭開(kāi)始)、暫停、繼續(xù)、停止(回到開(kāi)頭)、快進(jìn)、后退等按鈕的激活條件,文件沒(méi)打開(kāi)所有按鈕應(yīng)不可用,播放時(shí)繼續(xù)按鈕應(yīng)處于隱藏狀態(tài),暫停時(shí)停止按鈕不可用但繼續(xù)按鈕激活,停止時(shí)暫停按鈕不可用且繼續(xù)按鈕隱藏,視頻正常播放結(jié)束時(shí)暫停、停止、快進(jìn)不可用且繼續(xù)隱藏。
4.2 程序設(shè)置
為了實(shí)現(xiàn)上述要求,在設(shè)計(jì)時(shí)每一個(gè)按鈕交互都要從兩方面考慮:激活條件和程序內(nèi)容。
play:激活條件為playfile"",計(jì)算圖標(biāo)內(nèi)容為:
SetSpriteProperty(@"MediaPlay", #CurrentPosition,1)
CallSprite(@"MediaPlay", #Play)
pause:激活條件為(playstate=2)&(CurrentPosition
CallSprite(@"MediaPlay", #Pause)
resume:激活條件為(playstate=1)&(CurrentPosition
CallSprite(@"MediaPlay", #Play)
stop:激活條件為(playstate=2)&(CurrentPosition
SetSpriteProperty(@"MediaPlay", #CurrentPosition,1)
CallSprite(@"MediaPlay", #stop)
fastforward:激活條件為CurrentPosition
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=GetSpriteProperty(@"MediaPlay", #CurrentPosition)
if CurrentPosition
NewPosition:=CurrentPosition+15
else
NewPosition:=Duration
end if
SetSpriteProperty(@"MediaPlay", #CurrentPosition,NewPosition)
CallSprite(@"MediaPlay", #play)
fastreverse:激活條件為CurrentPosition>1,計(jì)算圖標(biāo)內(nèi)容為:
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=GetSpriteProperty(@"MediaPlay", #CurrentPosition)
if CurrentPosition>15 then
NewPosition:=CurrentPosition-15
else
NewPosition:=0
end if
SetSpriteProperty(@"MediaPlay", #CurrentPosition,NewPosition)
CallSprite(@"MediaPlay", #Play)
5 滑塊控制進(jìn)度及音量
5.1 滑塊作用
拖動(dòng)水平滑塊,調(diào)整文件播放進(jìn)度,且滑塊在水平滾動(dòng)條上的位置與文件當(dāng)前進(jìn)度的百分比一致。拖動(dòng)垂直滑塊,調(diào)整音量大小,且滑塊在垂直滾動(dòng)條上的位置與系統(tǒng)音量大小的百分比一致。
5.2 事件響應(yīng)設(shè)置
在兩個(gè)事件響應(yīng)BarSetMaster和BarSetPosition中,響應(yīng)都設(shè)為永久、返回,事件響應(yīng)BarSetMaster的事件設(shè)為發(fā)送“圖標(biāo)VolumeBar”的事件“Change”, 事件響應(yīng)BarSetPosition的事件設(shè)為發(fā)送“圖標(biāo)PositionBar”的事件“Change”。
(1)計(jì)算圖標(biāo)BarSetMaster內(nèi)容為:
volume:=GetSpriteProperty(@"VolumeBar",#value)
baSetVolume("master",100-volume)
(2)計(jì)算圖標(biāo)BarSetPosition內(nèi)容為:
position:=GetSpriteProperty(@"PositionBar",#value)
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=position/100*Duration
SetSpriteProperty(@"MediaPlay", #CurrentPosition,CurrentPosition)
CallSprite(@"MediaPlay", #Play)
PauseFlag:=1
6 結(jié)束語(yǔ)
在Authorware中如果能夠合理地運(yùn)用ActiveX控件和外部函數(shù),個(gè)性化媒體播放器可以設(shè)計(jì)的非常完善,各種功能都能實(shí)現(xiàn),即使是滑塊動(dòng)態(tài)地顯示當(dāng)前進(jìn)度、播放狀態(tài)等也能較好地解決。
參考文獻(xiàn):
[1] 畢廣吉.Authorware多媒體開(kāi)發(fā)程序設(shè)計(jì)與典型實(shí)例[M].北京:人民郵電出版社,2004.
媒體論文 媒體監(jiān)督論文 媒體管理論文 媒體考察報(bào)告 媒體技術(shù) 媒體藝術(shù)論文 紀(jì)律教育問(wèn)題 新時(shí)代教育價(jià)值觀
CSSCI南大期刊 審核時(shí)間1-3個(gè)月
上海市哲學(xué)社會(huì)科學(xué)創(chuàng)新研究基地——上海交通大學(xué)新媒體與社會(huì)研究中心;上海市人民政府決策咨詢(xún)研究基地——謝耘耕工作室