AVProVideo丨AVProVideo 从零学习

大家好,我是SKODE。

小提示:选中左侧目录,可快速找到所需内容

本系列博客地址:传送门

 

一、AVProVideo实用功能:

  • WebGL播放视频(Unity对WebGL播放视频支持不够)
  • Unity播放PC端和安卓端文件夹内的视频(Mac、IOS、tvOS、Windows Phone、UWP、PS4平台)
  • 输出播放视频的序列帧
  • 将视频渲染在3D物体(3D Mesh)上
  • 360度圆形/方形环绕视频(类似开眼大溪地)
  • 180度环绕视频(一半的世界看视频,另一半没有)
  • 透明视频(类似AR蝴蝶)
  • ...

参考自SDK文档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 即可调整视频大小、方位

e、完成

 

 

三、属性讲解

参考文档P41

1、MediaPlayer 脚本 :

Main

Auto Open:必须先打开,才能AutoStart播放。

Playback Rate:播放速度

Persistent:将DontDestroyOnLoad应用于对象,以便其在场景/关卡加载中不被销毁

Audio

Volume:音量大小

Muted:视频是否要静音

Event

下方讲解

Platform Specific

这些允许您为每个平台设置不同的属性,包括设置不同的文件路径。

 

2、DisplayIMGUI 脚本

这是快速配置全屏视频所带的脚本。

AVProVideo丨AVProVideo 从零学习_第1张图片

Display in Editor:是否在编辑器中显示矩形(Game界面的AVProVideo的图标)

Color:视频的颜色,包含透明通道

Scale Mode:

  • StretchToFill:伸缩视频填充满整个GUI(能显示整个视频,但变形了)
  • ScaleAndCrop:保持原有视频形式,在GUI中显示(视频为原大小,这个模式视频显示的不全)
  • ScaleToFit:使得视频适应GUI(能显示整个视频,没变形,但上下可能有黑边)

FullScreen:是否忽视x、y、高度、宽度的影响,使用全屏。

x:离最左侧的距离

y:离上侧距离

Width:视频宽度比例

Height:视频高度比例

 

3、DisplayUGUI 脚本

AVProVideo丨AVProVideo 从零学习_第2张图片

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、视频播放进度回调

AVProVideo丨AVProVideo 从零学习_第3张图片

//可以通过上面按键绑定,也可通过下面代码绑定监听。
//_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());
    }

 

 

一起进步

我是SKODE

你可能感兴趣的:(#,AvProVideo)