日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Silverlight3中使用SSME重现Big Buck Bunny播放器

發(fā)布時間:2023/12/8 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Silverlight3中使用SSME重现Big Buck Bunny播放器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在上一講中(在Silverlight中使用SmoothStreamingMediaElement創(chuàng)建Smooth Streaming播放器 )我向大家詳細(xì)介紹了在Silverlight3中如何使用SmoothStreamingMediaElement(SSME)控件編寫一個支持Smooth Streaming視頻流的播放器,正如你所看到的,那個播放器非常簡陋,除了沒有亮麗的外觀外,功能也很簡單,當(dāng)然,你可以繼續(xù)在界面上添加一些控件元素來豐富播放器的功能,例如前進(jìn)、后退、左右聲道、全屏等等,其實這些功能普通的MediaElement控件就已經(jīng)全部支持了,你只需要自己編寫簡單的邏輯加以控制就OK了,也比較簡單。本文要討論的重點并不是如何添加這些功能,而是如何實現(xiàn)Big Buck Bunny播放器中實時跟蹤Smooth Streaming視頻流播放狀態(tài)的浮動面板,下面是我們要模仿的效果:

??  大家可以看到播放器上有三個浮動的面板,分別顯示了當(dāng)前視頻播放時的幀率、比特率,以及可以自定義視頻播放時的比特率。我們已經(jīng)了解了Smooth Streaming技術(shù)的原理,它可以根據(jù)客戶端請求的帶寬動態(tài)傳輸不同質(zhì)量的視頻,當(dāng)網(wǎng)路狀態(tài)良好時播放的視頻質(zhì)量較高,當(dāng)網(wǎng)絡(luò)狀態(tài)較差時播放的視頻質(zhì)量就比較差,從而保證了視頻播放的流暢性。官方網(wǎng)站上有專門介紹Smooth Streaming技術(shù)的相關(guān)資料,同時你也可以在微軟的msdn上找到有關(guān)SSME控件的一些內(nèi)容,在開始這些之前你需要下載Smooth Streaming SDK。這些步驟我在前面的兩篇文章中都已經(jīng)詳細(xì)介紹過,感興趣的讀者可以參考下。

http://www.cnblogs.com/jaxu/archive/2010/01/08/1642143.html

http://www.cnblogs.com/jaxu/archive/2010/01/21/1653314.html

  SDK中包含的內(nèi)容只適合做演示,并不包含示例播放器的源代碼,如果你打算重構(gòu)該播放器,只能自己動手去模仿了,但其實我們有一些捷徑可以走。還記得我在前一篇文章中向大家介紹的Reflector反編譯工具嗎?里面的SilverlightBrowser插件,我們可以對SDK中的示例播放器進(jìn)行反編譯,以查看它是如何實現(xiàn)那三個浮動面板的。

  在對反編譯后的代碼進(jìn)行研究后發(fā)現(xiàn),幀率和比特率的跟蹤面板其實都是Silverlight自定義控件,這樣我們只要在我們的工程中引入相應(yīng)的dll文件,就可以直接使用它們。至于比特率設(shè)置面板,其實就是兩個Silder控件,通過Value_Changed事件來對Smooth Streaming播放進(jìn)行控制。下面是我反編譯并經(jīng)過整理后的代碼,大家可以先下載下來研究一下。使用的時候客戶端引用xap時的參數(shù)可以參照skd中的示例。

SmoothStreamingTest.rar

  這里有一個問題,那就是代碼中的mainPlayer是一個自定義控件,而且從反編譯的情況來看,要想重構(gòu)基本不可能(結(jié)構(gòu)比較復(fù)雜,類很多,重構(gòu)的代價太大)。其實這個自定義控件中不外乎用到了SSME,既然這樣的話,我們不如直接將其替換成SSME,然后將代碼稍微改動一下就可以了。整個代碼應(yīng)該很簡單,因為都是基于反編譯的結(jié)果,自己只需要將一些有用的代碼整理一下就行了。我在這里稍做一下解釋。

  1. MainPage.xaml和App.xaml文件中有一些需要的樣式要添加到你工程中對應(yīng)的文件里。

  2. MainPage.xaml文件里有關(guān)三個面板的布局代碼需要添加到你工程中相應(yīng)的地方。

  3. 后臺代碼可以直接用我提供的。包括一些私有成員變量的定義,UpdateControlReferences方法,FindVisualElementFrom方法,LimitMaxBitrateSlider_ValueChanged事件,OnTimerCompleted事件,和對SmoothPlayer_MediaOpened事件的補(bǔ)充。

  基本上就是這幾塊,其它的部分都是在前一篇文章中講解SSME的用法時用過的,沒有做任何更改。程序的結(jié)構(gòu)就是首先定義了一個動畫,用來控制幀率跟蹤面板和比特率跟蹤面板里路徑的變化,當(dāng)視頻被成功打開后初始化三個面板的相關(guān)參數(shù)讓面板中的內(nèi)容顯示出來,然后執(zhí)行動畫,當(dāng)動畫執(zhí)行完成后根據(jù)SSME當(dāng)前的播放狀態(tài)更新面板的值同時修改面板中的路徑,然后重新執(zhí)行動畫。基本過程就是這樣的。下面是我給出的代碼。

SmoothStreamingPlayer.rar

  以下是成功運(yùn)行后的截圖:

?  當(dāng)然,你可以自己添加一個ToogleButton用來控制顯示或隱藏面板,這個可以直接控制OverlaySpacingGrid控件的Visibility屬性即可。

  有一個問題你可能需要注意一下,那就是當(dāng)你發(fā)現(xiàn)你在播放視頻的時候比特率的跟蹤信息一直顯示的是最下面一檔,而且Now Downloading Bite Rate面板中的進(jìn)度條也一直處在最左邊的位置,這時你可能需要重新查看一下你的SSME的尺寸和你所轉(zhuǎn)換的Smooth Streaming視頻文件的尺寸了,你可以在轉(zhuǎn)換視頻的時候手動調(diào)整一下視頻文件的尺寸(大小和你的SSME控件的大小相一致),然后再重新嘗試。這是我在應(yīng)用的過程中所碰到的一個問題,我當(dāng)時所寫的一個視頻播放器是嵌入在一個Silverlight插件里面的,所占的地方比較小,于是就出現(xiàn)了上面所述的問題,明明可以看到視頻的質(zhì)量明顯發(fā)生了變化,但是比特率的跟蹤信息就是不變,弄了很長時間,剛開始一直以為是代碼本身的問題,后來偶然修改了一下視頻源文件的尺寸就解決了。寫在這里提醒大家一下。當(dāng)然,如果你在使用的過程中沒有遇到這種問題就不需要去調(diào)整大小了。

  對于Smooth Streaming的技術(shù)目前尚處于摸索階段,實際應(yīng)用的例子基本上都來自于官網(wǎng)的Big Buck Bunny播放器,目前我們已經(jīng)可以成功地在自己的機(jī)器上借助于IIS7架設(shè)Smooth Streaming服務(wù)器了,然后通過SSME在Silverlight3中快速地創(chuàng)建Smooth Streaming視頻播放器,在本文中,我們通過研究官網(wǎng)提供的例子,也學(xué)會了如何給SSME添加播放跟蹤信息。

轉(zhuǎn)載于:https://www.cnblogs.com/jaxu/archive/2010/02/02/1661580.html

總結(jié)

以上是生活随笔為你收集整理的在Silverlight3中使用SSME重现Big Buck Bunny播放器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。