一、概述
AVPro Video是项目中常见的视频播放插件,本文使用Unity 2020.3.11f和AVPro Video v2.4.1进行演示。
主要功能
播放本地文件、URL 文件和自适应流格式支持线性和伽玛色彩空间透明度支持(原生和打包)8K 视频支持
平台兼容
Apple
macOS 10.13 and above, 64bit only, Metal only
iOS 11.0 and above, 64bit only, Metal only
tvOS 11.0 and above, Metal only
Microsoft
Windows 7, 8, 8.1, 10 and above (x86 and x86_64)
Universal Windows Platform (UWP) 10 (x86 and x86_64, ARM and ARM64)
Direct3D 11 and 12
Android
Android 4.3.0 (Jelly Bean, API level 18) and above (ARM7, ARM64 and x86)
OpenGLES2 and OpenGLES3
流媒体协议
image.png
二、基础使用
2.1 创建视频资源
AVPro Video可以直接对原始引用也可以对原始视频进行封装处理。MediaReference资源是对原始视频资源的封装,可以指定本地视频文件,也可以给定url。也可以针对不同平台,使用不同的资源。
image.png
2.2 播放视频
image.png
在创建播放组件并添加资源后,理论上视频就可以正常播放了。但视频的播放只是按帧采样视频,并未指定采样到的纹理如何显示。AVPro Video提供了DisplayUGUI和ApplyToMesh两个组件,分别将纹理显示在UI和Mesh中。
指定资源路径时有Reference和Path两种方式。Reference就是2.1中提到的MediaReference。Path则是相对路径,AVPro Vidseo提供了以下资源搜索目录:
image.png
2.3 投射到UI & Mesh
image.png
Mesh中显示Video的操作类似:创建带有Mesh的对象,添加ApplyToMesh组件,赋值MediaPalyer组件。
三、拓展
3.1 播放信息
/// 获取视频时长double duration = mediaPlayer.Info.GetDuration();// 获取当前播放时刻double time = mediaPlayer.Control.GetCurrentTime();// 获取视频可选时间范围TimeRanges seekRanges = mediaPlayer.Control.GetSeekableTimes();// 视频播放跳转到24smediaPlayer.Control.Seek(24.0);// 视频播放跳转到最靠近24s的关键帧mediaPlayer.Control.SeekFast(24.0);// 视频帧数int durationFrames = mediaPlayer.Info.GetDurationFrames();// 等同于durationFrames - 1int maxFrame = mediaPlayer.Info.GetMaxFrameNumber();// 当前播放帧数int frame = mediaPlayer.Control.GetCurrentTimeFrames();// 视频播放跳转到第60帧mediaPlayer.Control.SeekToFrame(60);// 视频播放回退10帧mediaPlayer.Control.SeekToFrameRelative(-10.0);// 视频播放帧率mediaPlayer.PlaybackRate
视频帧率可以为负数,逆向播放。
3.2 缓存
如果平台支持缓存,则可指定从缓存中播放视频。但缓存需要手动添加
// 前平台是否支持缓存mediaPlayer.Cache.IsMediaCachingSupported()// 将媒体添加到缓存mediaPlayer.Cache.AddMediaToCache(url, headers, options);// 清除缓存mediaPlayer.Cache.RemoveMediaFromCache(url);// 停止缓存媒体mediaPlayer.Cache.CancelDownloadOfMediaToCache(url);3.3 Playlist Media Player
有时我们可能需要播放一组视频,PlaylistMediaPlayer组件为我们提供了这一功能。PlaylistMediaPlayer在切换视频时,需要两个MediaPlayer组件处理过渡效果。
image.png
播放内容在Playlist Items中定义,指定资源路径与播放模式。常用的设置为Loop选项。若未勾选Loop,则组件会按照列表资源进行播放
image.png
// 手动添加Itemprivate PlaylistMediaPlayer listComp;void Start(){ listComp = GetComponent<PlaylistMediaPlayer>(); listComp.Stop(); listComp.Playlist.Items.Clear(); MediaItem item = new MediaItem(); item.mediaPath = new MediaPath("AVProVideoSamples/飞天_1080P_.mp4", MediaPathType.RelativeToStreamingAssetsFolder); item.loop = true; listComp.Playlist.Items.Add(item); listComp.Play();}3.4 自带Timeline拓展
添加宏AVPRO_PACKAGE_TIMELINE开启
asmdef文件添加程序集引用(Timeline以Package形式存在)
完成上图两个步骤后,可在Timeline创建视频播放轨道,指定播放MediaReference。
image.png
参考
转载自Unity AVPro Video使用 - 知乎 (zhihu.com) |