??學(xué)習(xí)了參考文獻(xiàn)1中的示例代碼,也找出了前一篇文章中自己測(cè)試控件但無(wú)法播放視頻的問(wèn)題(沒(méi)有將解碼庫(kù)文件復(fù)制到可執(zhí)行程序所在的codecs文件夾內(nèi)),本文基于A(yíng)Player組件編寫(xiě)簡(jiǎn)單的視頻播放器,主要實(shí)現(xiàn)以下功能:
序號(hào) | 功能 | 說(shuō)明 |
---|---|---|
1 | 自定義logo | 調(diào)用SetCustomLogo函數(shù)設(shè)置未播放視頻時(shí)的顯示圖片,圖片來(lái)自參考文獻(xiàn)2 |
2 | 打開(kāi)文件 | 調(diào)用Open函數(shù)打開(kāi)并播放視頻文件 |
3 | 定時(shí)刷新播放信息 | 參照參考文獻(xiàn)1中的demo,使用定時(shí)器定時(shí)刷新當(dāng)前播放進(jìn)度,調(diào)用GetDuration獲取視頻總時(shí)長(zhǎng),調(diào)用GetPosition獲取當(dāng)前播放時(shí)間,同時(shí)在OnOpenSucceeded中啟動(dòng)定時(shí)器,在OnStateChanged事件中停止定時(shí)器 |
4 | 暫停/播放/停止 | 調(diào)用Pause/Play/Close函數(shù)暫停/播放/停止視頻 |
5 | 設(shè)置音量 | 調(diào)用SetVolume設(shè)置音量,盡在0-100范圍內(nèi)調(diào)節(jié)音量,并未使用APlayer的10倍放大 |
6 | 拖拽時(shí)間條 | 調(diào)用SetPosition函數(shù)在Trackbar的Scroll事件中重新設(shè)置播放時(shí)間 |
7 | 快進(jìn)/快退 | 調(diào)用SetPosition函數(shù)快進(jìn)/快退10秒 |
??最后是程序界面、播放視頻截圖及主要代碼:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-744256.html
public Form1()
{
this.axPlayer1.SetCustomLogo(((Bitmap)Bitmap.FromFile("gundam.jpg")).GetHbitmap().ToInt32());
axPlayer1.OnOpenSucceeded += new EventHandler(OnOpenSucceeded);
axPlayer1.OnStateChanged += new _IPlayerEvents_OnStateChangedEventHandler(OnStateChanged);
}
string TimeToString(TimeSpan span)
{
return span.Hours.ToString("00") + ":" +
span.Minutes.ToString("00") + ":" +
span.Seconds.ToString("00");
}
void OnOpenSucceeded(object sender, EventArgs e)
{
lblProgress.Text= "00:00:00/"+TimeToString(TimeSpan.FromMilliseconds(axPlayer1.GetDuration()));
tbTimeline.Maximum = axPlayer1.GetDuration();
timer1.Start();
}
private void UpdatePlayInfo(object sender, EventArgs e)
{
lblProgress.Text = TimeToString(TimeSpan.FromMilliseconds(axPlayer1.GetPosition()))+"/" + TimeToString(TimeSpan.FromMilliseconds(axPlayer1.GetDuration()));
tbTimeline.Value = axPlayer1.GetPosition() < 0 ? 0 : axPlayer1.GetPosition();
}
private void tbVolumn_ValueChanged(object sender, EventArgs e)
{
axPlayer1.SetVolume(tbVolumn.Value);
}
private void btnForward_Click(object sender, EventArgs e)
{
axPlayer1.SetPosition(axPlayer1.GetPosition() + 10000);
}
private void btnBack_Click(object sender, EventArgs e)
{
int timeLine = axPlayer1.GetPosition() - 10000;
axPlayer1.SetPosition(timeLine < 0 ? 0 : timeLine);
}
private void btnClose_Click(object sender, EventArgs e)
{
axPlayer1.Close();
}
private void btnPlay_Click(object sender, EventArgs e)
{
axPlayer1.Play();
}
private void btnPause_Click(object sender, EventArgs e)
{
axPlayer1.Pause();
}
void OnStateChanged(object sender, _IPlayerEvents_OnStateChangedEvent e)
{
switch (e.nNewState)
{
case 0:
tbTimeline.Value = 0;
lblProgress.Text = "00:00:00/00:00:00" ;
timer1.Stop();
break;
}
}
private void btnOpen_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "mp4|*.mp4|avi|*.avi|rm|*.rm|rmvb|*.rmvb|flv|*.flv|xr|*.xr|所有文件|*.*";
ofd.Multiselect = false;
if (ofd.ShowDialog() == DialogResult.OK)
{
axPlayer1.Open(ofd.FileName);
}
}
}
private void tbTimeline_Scroll(object sender, EventArgs e)
{
axPlayer1.SetPosition(tbTimeline.Value);
lblProgress.Text = TimeToString(TimeSpan.FromMilliseconds(axPlayer1.GetPosition())) + "/" + TimeToString(TimeSpan.FromMilliseconds(axPlayer1.GetDuration()));
}
參考文獻(xiàn):
[1]https://blog.csdn.net/qq_45533937/article/details/115800927
[2]https://www.hpoi.net/hobby/10836文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-744256.html
到了這里,關(guān)于測(cè)試C#調(diào)用Aplayer播放視頻(3:編寫(xiě)簡(jiǎn)易播放器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!