在Silverlight3中使用SSME重现Big Buck Bunny播放器
?? 大家可以看到播放器上有三個浮動的面板,分別顯示了當前視頻播放時的幀率、比特率,以及可以自定義視頻播放時的比特率。我們已經了解了Smooth Streaming技術的原理,它可以根據客戶端請求的帶寬動態傳輸不同質量的視頻,當網路狀態良好時播放的視頻質量較高,當網絡狀態較差時播放的視頻質量就比較差,從而保證了視頻播放的流暢性。官方網站上有專門介紹Smooth Streaming技術的相關資料,同時你也可以在微軟的msdn上找到有關SSME控件的一些內容,在開始這些之前你需要下載Smooth Streaming SDK。這些步驟我在前面的兩篇文章中都已經詳細介紹過,感興趣的讀者可以參考下。
http://www.cnblogs.com/jaxu/archive/2010/01/08/1642143.html
http://www.cnblogs.com/jaxu/archive/2010/01/21/1653314.html
SDK中包含的內容只適合做演示,并不包含示例播放器的源代碼,如果你打算重構該播放器,只能自己動手去模仿了,但其實我們有一些捷徑可以走。還記得我在前一篇文章中向大家介紹的Reflector反編譯工具嗎?里面的SilverlightBrowser插件,我們可以對SDK中的示例播放器進行反編譯,以查看它是如何實現那三個浮動面板的。
在對反編譯后的代碼進行研究后發現,幀率和比特率的跟蹤面板其實都是Silverlight自定義控件,這樣我們只要在我們的工程中引入相應的dll文件,就可以直接使用它們。至于比特率設置面板,其實就是兩個Silder控件,通過Value_Changed事件來對Smooth Streaming播放進行控制。下面是我反編譯并經過整理后的代碼,大家可以先下載下來研究一下。使用的時候客戶端引用xap時的參數可以參照skd中的示例。
SmoothStreamingTest.rar
這里有一個問題,那就是代碼中的mainPlayer是一個自定義控件,而且從反編譯的情況來看,要想重構基本不可能(結構比較復雜,類很多,重構的代價太大)。其實這個自定義控件中不外乎用到了SSME,既然這樣的話,我們不如直接將其替換成SSME,然后將代碼稍微改動一下就可以了。整個代碼應該很簡單,因為都是基于反編譯的結果,自己只需要將一些有用的代碼整理一下就行了。我在這里稍做一下解釋。
1. MainPage.xaml和App.xaml文件中有一些需要的樣式要添加到你工程中對應的文件里。
2. MainPage.xaml文件里有關三個面板的布局代碼需要添加到你工程中相應的地方。
3. 后臺代碼可以直接用我提供的。包括一些私有成員變量的定義,UpdateControlReferences方法,FindVisualElementFrom方法,LimitMaxBitrateSlider_ValueChanged事件,OnTimerCompleted事件,和對SmoothPlayer_MediaOpened事件的補充。
基本上就是這幾塊,其它的部分都是在前一篇文章中講解SSME的用法時用過的,沒有做任何更改。程序的結構就是首先定義了一個動畫,用來控制幀率跟蹤面板和比特率跟蹤面板里路徑的變化,當視頻被成功打開后初始化三個面板的相關參數讓面板中的內容顯示出來,然后執行動畫,當動畫執行完成后根據SSME當前的播放狀態更新面板的值同時修改面板中的路徑,然后重新執行動畫。基本過程就是這樣的。下面是我給出的代碼。
SmoothStreamingPlayer.rar
以下是成功運行后的截圖:
? 當然,你可以自己添加一個ToogleButton用來控制顯示或隱藏面板,這個可以直接控制OverlaySpacingGrid控件的Visibility屬性即可。
有一個問題你可能需要注意一下,那就是當你發現你在播放視頻的時候比特率的跟蹤信息一直顯示的是最下面一檔,而且Now Downloading Bite Rate面板中的進度條也一直處在最左邊的位置,這時你可能需要重新查看一下你的SSME的尺寸和你所轉換的Smooth Streaming視頻文件的尺寸了,你可以在轉換視頻的時候手動調整一下視頻文件的尺寸(大小和你的SSME控件的大小相一致),然后再重新嘗試。這是我在應用的過程中所碰到的一個問題,我當時所寫的一個視頻播放器是嵌入在一個Silverlight插件里面的,所占的地方比較小,于是就出現了上面所述的問題,明明可以看到視頻的質量明顯發生了變化,但是比特率的跟蹤信息就是不變,弄了很長時間,剛開始一直以為是代碼本身的問題,后來偶然修改了一下視頻源文件的尺寸就解決了。寫在這里提醒大家一下。當然,如果你在使用的過程中沒有遇到這種問題就不需要去調整大小了。
對于Smooth Streaming的技術目前尚處于摸索階段,實際應用的例子基本上都來自于官網的Big Buck Bunny播放器,目前我們已經可以成功地在自己的機器上借助于IIS7架設Smooth Streaming服務器了,然后通過SSME在Silverlight3中快速地創建Smooth Streaming視頻播放器,在本文中,我們通過研究官網提供的例子,也學會了如何給SSME添加播放跟蹤信息。
轉載于:https://www.cnblogs.com/jaxu/archive/2010/02/02/1661580.html
總結
以上是生活随笔為你收集整理的在Silverlight3中使用SSME重现Big Buck Bunny播放器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜狐html5,手机搜狐率先发力Html
- 下一篇: [DDR]2 - Initializat