瀏覽量:18次
Silverlight本身提供了多媒體播放控件,但并沒有封裝好,可以直接使用的控件。在網(wǎng)上搜索了一些,都不是很適用,有些過于復(fù)雜要引用一大堆dll,感覺很臃腫,有些樣式風(fēng)格不適合。silverlight只提供了MediaElement,并不像以前html那樣現(xiàn)成的直接使用那么方便,所以就自己封裝一下,做一個(gè)滿足基本功能的簡(jiǎn)單播放器。通過本篇隨筆認(rèn)識(shí)一下Blend強(qiáng)大的修改控件樣式魔力,和實(shí)現(xiàn)一個(gè)簡(jiǎn)單的播放器。
功能點(diǎn):
1、播放、暫停及顯示當(dāng)前播放狀態(tài)
2、實(shí)時(shí)顯示已播放時(shí)間
3、播放進(jìn)度條,并能拖動(dòng)播放位置
4、全屏按鈕及雙擊播放畫面入或退出全屏
5、調(diào)整音量
6、播放列表
播放器的基本功能點(diǎn)就是需求,將需求分解,羅列出實(shí)現(xiàn)難點(diǎn)和功能要點(diǎn),評(píng)估工作量及風(fēng)險(xiǎn)。
一、認(rèn)識(shí)MediaElement控件
public MediaElementState CurrentState { get; }MediaElement 的當(dāng)前狀態(tài)。狀態(tài)可以為下列值之一(如在 MediaElementState 枚舉中所定義):Buffering、Closed、Opening、Paused、Playing 或 Stopped。默認(rèn)值為 Closed。
public bool AutoPlay { get; set; }如果自動(dòng)播放,則為 true;否則為 false。默認(rèn)值為 true。如果設(shè)置 Source 屬性前將此屬性設(shè)置為 true,則設(shè)置Source屬性時(shí)自動(dòng)播放視頻。
public Uri Source { get; set; }獲取或設(shè)置 MediaElement 上的媒體來源。即指定一個(gè)視頻的統(tǒng)一資源標(biāo)識(shí)符 (URI) 字符串。
public double Volume { get; set; }獲取或設(shè)置媒體的音量大小。
//當(dāng)媒體流已被驗(yàn)證和打開且已讀取文件頭時(shí)發(fā)生。在該自定義控件中主要通過該事件獲取視頻的總時(shí)長(zhǎng)。
public event RoutedEventHandler MediaOpenedvoid mediaElement_MediaOpened(object sender, RoutedEventArgs e){this.playTools.TotaPlayTime = (int)this.mediaElement.NaturalDuration.TimeSpan.TotalSeconds;}//當(dāng) MediaElement 不再播放音頻或視頻時(shí)發(fā)生。在該自定義控件中主要通過該事件設(shè)置MediaElement為Stop,并判斷是否循環(huán)播放而進(jìn)行繼續(xù)循環(huán)播放。public event RoutedEventHandler MediaEndedvoid mediaElement_MediaEnded(object sender, RoutedEventArgs e){this.mediaElement.Stop();if (this.IsReplay){this.mediaElement.Play();}}//當(dāng) CurrentState 屬性的值更改時(shí)發(fā)生。在該自定義控件中主要通過該事件顯示當(dāng)前視頻播放狀態(tài)信息。public event RoutedEventHandler CurrentStateChangedif (this.mediaElement.CurrentState == MediaElementState.Buffering){this.playTools.CurrentMessage = this.mediaElement.CurrentState + "" + Math.Round(this.mediaElement.BufferingProgress * 100, 0).ToString() + "%";}//在存在與媒體 Source 關(guān)聯(lián)的錯(cuò)誤時(shí)發(fā)生。MediaFailed 事件可在下列條件下發(fā)生:1、未找到文件。2、無效的(無法識(shí)別的或不支持的)媒體格式。3、播放期間未知的媒體錯(cuò)誤。//在該自定義控件中主要通過該事件顯示錯(cuò)誤信息。public event EventHandler MediaFailedvoid mediaElement_MediaFailed(object sender, ExceptionRoutedEventArgs e){this.playTools.CurrentMessage = e.ErrorException.Message;}//該事件是播放時(shí)發(fā)生,用于獲取當(dāng)前已播放時(shí)間CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);void CompositionTarget_Rendering(object sender, EventArgs e){int currentTime = (int)this.mediaElement.Position.TotalSeconds;this.playTools.CurrentPlayTime = currentTime;}
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡(luò)媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點(diǎn),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請(qǐng)您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們?cè)诖_認(rèn)后,會(huì)立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776