一、概述
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.png2.2 播放视频
image.png在创建播放组件并添加资源后,理论上视频就可以正常播放了。但视频的播放只是按帧采样视频,并未指定采样到的纹理如何显示。AVPro Video提供了DisplayUGUI和ApplyToMesh两个组件,分别将纹理显示在UI和Mesh中。
指定资源路径时有Reference和Path两种方式。Reference就是2.1中提到的MediaReference。Path则是相对路径,AVPro Vidseo提供了以下资源搜索目录:
image.png2.3 投射到UI & Mesh
image.pngMesh中显示Video的操作类似:创建带有Mesh的对象,添加ApplyToMesh组件,赋值MediaPalyer组件。
三、拓展
3.1 播放信息
/// 获取视频时长
double duration = mediaPlayer.Info.GetDuration();
// 获取当前播放时刻
double time = mediaPlayer.Control.GetCurrentTime();
// 获取视频可选时间范围
TimeRanges seekRanges = mediaPlayer.Control.GetSeekableTimes();
// 视频播放跳转到24s
mediaPlayer.Control.Seek(24.0);
// 视频播放跳转到最靠近24s的关键帧
mediaPlayer.Control.SeekFast(24.0);
// 视频帧数
int durationFrames = mediaPlayer.Info.GetDurationFrames();
// 等同于durationFrames - 1
int 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// 手动添加Item
private 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
网友评论