使用Unity自帶的VideoPlayer來播放視頻
一、準(zhǔn)備視頻
Unity3D常用視頻格式:.mov、.mpg、.mpeg、.mp4、.avi、.asf
如果都不識(shí)別,試試轉(zhuǎn)換成ogv格式。轉(zhuǎn)換完成之后,將視頻素材文件拖入U(xiǎn)nity Assets文件夾內(nèi)。
二、創(chuàng)建UI及添加組件
- 創(chuàng)建RenderTexture資源,設(shè)置分辨率,跟視頻分辨率一致
- 創(chuàng)建RawImage對(duì)象
- 添加AudioSource組件
- 添加VideoPlayer組件
當(dāng)前版本:
?
具體實(shí)現(xiàn):
1、右鍵Assets文件夾或任意文件夾→Create→Render Texture紋理渲染
?
設(shè)置視頻的分辨率
?
2、Hierarchy面板右鍵創(chuàng)建UI→Raw Image
然后把創(chuàng)建出來的Render Texture拖拽給Raw Image的Texture選項(xiàng)
?
結(jié)果如下圖:
?
3、給Raw Image掛上Audio Source組件
4、給Raw Image添加組件Video Player,同時(shí),修改Video Player組件屬性:
- 把視頻文件拖拽到Video Player的Video Clip選項(xiàng)中;
- 把Render Texture再次拖拽到TargetTexture選項(xiàng)中;
- 設(shè)置音頻輸出格式
5、然后可以調(diào)整Raw Image在屏幕中的大小來對(duì)應(yīng)游戲窗口中的大小
?
三、VideoPlayer 常用屬性、方法、事件
-
屬性:
- Source:視頻來源 ??
- - Video Clip:放入下載好的視頻 ??
- - URL:可以放入網(wǎng)上下載好的視頻鏈接/下載好的視頻的存儲(chǔ)路徑【沒試過】
- Play On Awake:腳本載入時(shí)自動(dòng)播放
- Wait For First Frame:決定是否在第一幀加載完成后才播放,只有在Play On Awake被勾選是才有效
- Loop:循環(huán)
- Playback Speed:播放速度
- RenderMode:渲染模式 ??
- - Camera Far Plane:攝像機(jī)的遠(yuǎn)平面上,用于背景播放器 ??
- - Camera Near Plane:攝像機(jī)的近平面上,用作前景播放器 ??
- - Render Texture:畫面保存在Render Texture上,用來UGUI的播放器 ??
- - Material Override:視頻畫面復(fù)制給所選Render的Material。需要選擇具有Render組件的物體,可以選擇賦值的材質(zhì)屬性??芍谱?60全景視頻和VR視頻。
- Aspect Ratio:自適應(yīng)分辨率的方式
- Audio Output Mode:音頻輸出方式 ??
- - Audio Source:音頻樣本發(fā)送到選定音頻源,允許應(yīng)用 Unity 的音頻處理。 ?
- - Direct:音頻樣本繞過 Unity 的音頻處理,直接發(fā)送到音頻輸出硬件。
- Source:視頻來源 ??
-
事件:
- errorReceived: 錯(cuò)誤監(jiān)聽到時(shí)被執(zhí)行
- frameDropped :有丟幀發(fā)生時(shí)被執(zhí)行
- frameReady :新的一幀準(zhǔn)備好時(shí)被執(zhí)行
- loopPointReached :播放結(jié)束或播放到循環(huán)的點(diǎn)時(shí)被執(zhí)行
- prepareCompleted :視頻準(zhǔn)備完成時(shí)被執(zhí)行
- seekCompleted :查詢幀操作完成時(shí)被執(zhí)行
- started:在Play方法調(diào)用之后立刻調(diào)用
四、腳本控制
public class WUIStartVideoPanel : MonoBehaviour
{
public VideoPlayer mVideoPlayer;
public Button mBtn_Skip;
public WUIStartVideoPanel()
{
// 清除Raw Image的殘留幀
mVideoPlayer.targetTexture.Release();
// 監(jiān)聽視頻播放結(jié)束
mVideoPlayer.loopPointReached += EndReached;
mBtn_Skip.onClick.AddListener(OnSkipBtnClick);
}
private void EndReached(VideoPlayer source)
{
// 隱藏當(dāng)前腳本對(duì)象
gameObject.SetActive(false);
}
// 外部調(diào)用播放
public void PlayVideo()
{
mVideoPlayer.Play();
}
// 跳過視頻
private void OnSkipBtnClick()
{
mVideoPlayer.Stop();
EndReached(mVideoPlayer);
}
}
五、畫面殘留問題
要注意一點(diǎn):Unity播放一次視頻后,再次播放開始的一瞬間會(huì)顯示上次播放結(jié)束的畫面。
1、問題原因:
主要因?yàn)橛肦enderTexture取渲染播放的,當(dāng)視頻播放完成之后,會(huì)在將最后一幀的畫面定格在RenderTexture上。
2、解決辦法:
- 實(shí)時(shí)創(chuàng)建RenderTexture,避免了預(yù)先創(chuàng)建殘留先前播放畫面的問題。
- VideoPlayer組件提供一個(gè)方法,VideoPlayer.targetTexture.Release()方法,釋放RenderTexture。
- 在播放之前或者播放完之后,釋放RenderTexture上的資源,調(diào)用方法。
RenderTexure rt; rt.Release();
在此,我使用了解決辦法2。代碼見上面。
參考文章:
Unity VideoPlayer 播放視頻_GA博客的博客-CSDN博客_unity videoplayer
Unity 使用RenderTexture播放視頻畫面殘留問題_2080.的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-801436.html
Unity自帶VideoPlayer播放視頻總是閃上一個(gè)視頻的畫面的問題 - 簡(jiǎn)書 (jianshu.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-801436.html
到了這里,關(guān)于Unity視頻播放之Video Player的簡(jiǎn)單使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!