提示:选中右侧目录,可快速找到所需内容
一、AVProVideo实用功能:
- WebGL播放视频(Unity对WebGL播放视频支持不够)
- Unity播放PC端和安卓端文件夹内的视频(Mac、IOS、tvOS、Windows Phone、UWP、PS4平台)
- 输出播放视频的序列帧
- 将视频渲染在3D物体(3D Mesh)上
- 360度圆形/方形环绕视频(类似开眼大溪地)
- 180度环绕视频(一半的世界看视频,另一半没有)
- 透明视频(类似AR蝴蝶)
- ...
上方配置方法,参考文档P36。
二、AVProVideo注意事项
AVProVideo not supported Internet Explorer 11(anyversion) , instead use the Microsoft Edge browser。(来自说明文档)
二、AVProVideo快速配置
创建StreamingAssets文件夹。
1、播放全屏视频
a、将FullscreenVideo预制体拖到场景(这上面带的DisplayIMGUI)
b、设置视频路径
c、完成
2、播放可设置大小、位置的视频
a、层级面板右键新建:AVPro Video-Media Player
b、层级面板新建Canvas和EventSystem,Canvas下新建UI-AVPro Video uGUI(这上面带的DisplayUGUI)
c、将MediaPlayer拖入AVPro Video
d、现在调整 AVPro Video 即可调整视频大小、方位
三、属性讲解
参考文档P41
1、MediaPlayer 脚本 :
Main
Auto Open:必须先打开,才能AutoStart播放。
Playback Rate:播放速度
Persistent:将DontDestroyOnLoad应用于对象,以便其在场景/关卡加载中不被销毁
Audio
Volume:音量大小
Muted:视频是否要静音
Event
下方讲解
Platform Specific
这些允许您为每个平台设置不同的属性,包括设置不同的文件路径。
2、DisplayIMGUI 脚本
这是快速配置全屏视频所带的脚本。
Display in Editor:是否在编辑器中显示矩形(Game界面的AVProVideo的图标)
Color:视频的颜色,包含透明通道
Scale Mode:
- StretchToFill:伸缩视频填充满整个GUI(能显示整个视频,但变形了)
- ScaleAndCrop:保持原有视频形式,在GUI中显示(视频为原大小,这个模式视频显示的不全)
- ScaleToFit:使得视频适应GUI(能显示整个视频,没变形,但上下可能有黑边)
FullScreen:是否忽视x、y、高度、宽度的影响,使用全屏。
x:离最左侧的距离
y:离上侧距离
Width:视频宽度比例
Height:视频高度比例
3、DisplayUGUI 脚本
DefaultTexture:当视频还未播放时展示的默认图片(需要取消勾选NoDefaultTexture)
NoDefaultTexture:是否显示默认图片(DefaultTexture)
四、主要API
1、信息接口
MediaPlayer mp;
mp.Info.GetVideoWidth();
可获取:
- GetDurationMs:返回视频长度(以毫秒为单位)
- GetVideoWidth:返回视频宽度(以像素为单位)
- GetVideoHeight:视频高度
- GetVideoFrameRate:返回媒体的帧速率(视频每秒的帧数)
- GetVideoDisplayRate:返回当前达到的显示速率,以每秒帧数为单位(当前视频在播放中的每秒帧数)
- HasVideo:如果media有视频track,则返回true
- HasAudio:有音频轨道,返回true
- IsPlaybackStalled:检查播放是否处于停止状态
- ... ...
2、控制接口
MediaPlayer mp;
mp.Control.Pause();
可实现:
- SetLooping(bool bLooping):设置视频是否循环
- CloseVideo():关闭视频,释放内存
- Play()
- Pause()
- Stop()
- Rewind():重播
- Seek(float timeMs):设置进度
- MuteAudio(bool bMute):设置是否静音
- SetVolume(float volume):设置音量大小
- float GetVolume():获得音量大小
- float GetCurrentTimeMs():获得当前播放进度(以毫秒为单位)
- bool IsMuted:获得是否静音
- bool IsLooping:获得视频是否循环播放
- bool CanPlay:获得视频能否播放
- bool IsPlaying:获得是否正在播放视频
- bool IsPaused:获得是否暂停
- ... ...
3、Texture接口
MediaPlayer mp;
Texture videoTexture = mp.TextureProducer.GetTexture();
4、Events
在下方视频播放回调展示。
五、功能实现:
Origin:播放视频 及 设置不同平台播放对应的视频
默认/PC端播放:
public MediaPlayer mediaPlayer;
void Start()
{
//PC端
mediaPlayer.m_VideoPath = "vedioURL";
mediaPlayer.OpenVideoFromFile(
MediaPlayer.FileLocation.AbsolutePathOrURL,
"视频路径",
false);//加载视频。false,取消自动播放
mediaPlayer.Control.Play();//播放视频
}
设置安卓端的播放:
public MediaPlayer mediaPlayer;
void Start()
{
//安卓端
mediaPlayer.PlatformOptionsAndroid.path = "vedioURL";
mediaPlayer.OpenVideoFromFile(
MediaPlayer.FileLocation.AbsolutePathOrURL,
mediaPlayer.PlatformOptionsAndroid.path,
false);//加载视频
mediaPlayer.Control.Play();//播放视频
}
1、播放 URL 视频或 本地文件夹 视频
面板配置方法
a、SourcePath:Absolute Path Or URL
b、播放URL时填入:“http://myserver.com/myvideo.mp4”or“rtsp://myserver.com:8080/mystream.rtsp”
播放本地视频时填入:
- C:/MyFolder/AnotherFolder/MyVideo.mp4(Windows)
- /Users/Mike/downloads/MyVideo.mp4(Mac/Linux)
- /Storage/SD/Videos/MyVideo.mp4(Android external SDCARD)
- /Storage/emulated/0/MyFolder/MyVideo.mp4(Android local file system)
- /mnt/sdcard/MyFolder/MyVideo.mp4(Android Oculus Go)
c、勾选AutoOpen、AutoPlay
2、播放跟Assets、Library同级的视频
面板配置方法
a、在Assets外(或Assets外新建的文件夹中)放上你的视频
b、SourcePath:Relative To Project Folder,Browse选择视频
c、AutoOpen、AutoPlay
3、播放StreamingAssets视频
面板配置方法
a、SourcePath:Relative To Streaming Assets Folder
b、Browse选择 StreamingAssets 文件夹相应视频
c、勾选AutoOpen、AutoPlay
4、播放Assets内视频
视频必须不在StreamingAssets文件夹。
1)面板配置方法
a、Assets内新建文件夹,放入你的视频
b、SourcePath:Relative To Data Folder,Browse相应视频
c、AutoOpen、AutoPlay
5、视频播放进度回调
//可以通过上面按键绑定,也可通过下面代码绑定监听。
//_mediaPlayer.Events.AddListener(Skode_OnVideoEvent);
public void Skode_OnVideoEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode er)
{
switch (et)
{
case MediaPlayerEvent.EventType.MetaDataReady:
Debug.Log("视频数据准备完成。当元数据(宽度,持续时间等)可用时触发");
break;
case MediaPlayerEvent.EventType.ReadyToPlay:
Debug.Log("加载视频并准备播放时触发");
break;
case MediaPlayerEvent.EventType.Started:
Debug.Log("播放开始时触发");
break;
case MediaPlayerEvent.EventType.FirstFrameReady:
Debug.Log("渲染第一帧时触发");
break;
case MediaPlayerEvent.EventType.FinishedPlaying:
Debug.Log("当非循环视频播放完毕时触发");
break;
case MediaPlayerEvent.EventType.Closing:
Debug.Log("媒体关闭时触发");
break;
case MediaPlayerEvent.EventType.Error:
Debug.Log("发生错误时触发");
break;
case MediaPlayerEvent.EventType.SubtitleChange:
Debug.Log("字幕更改时触发");
break;
case MediaPlayerEvent.EventType.Stalled:
Debug.Log("媒体停顿/暂停?时触发(例如,当媒体流失去连接时)-当前仅在Windows平台上受支持");
break;
case MediaPlayerEvent.EventType.Unstalled:
Debug.Log("当介质从停止状态恢复时触发(例如,重新建立丢失的连接时)");
break;
case MediaPlayerEvent.EventType.ResolutionChanged:
Debug.Log("当视频的分辨率改变(包括负载)时触发");
break;
case MediaPlayerEvent.EventType.StartedSeeking:
Debug.Log("寻找开始时触发");
break;
case MediaPlayerEvent.EventType.FinishedSeeking:
Debug.Log("搜索完成时触发");
break;
case MediaPlayerEvent.EventType.StartedBuffering:
Debug.Log("缓冲开始时触发");
break;
case MediaPlayerEvent.EventType.FinishedBuffering:
Debug.Log("缓冲完成后触发");
break;
case MediaPlayerEvent.EventType.PropertiesChanged:
Debug.Log("当任何属性(例如,立体声包装改变)时触发-必须手动触发");
break;
case MediaPlayerEvent.EventType.PlaylistItemChanged:
Debug.Log("在播放列表中播放新项目时触发");
break;
case MediaPlayerEvent.EventType.PlaylistFinished:
Debug.Log("播放列表结束时触发");
break;
}
Debug.Log("Event: " + et.ToString());
}