DomDomm 发表于 2022-3-29 09:55

Unity AVPro Video使用

一、概述

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

流媒体协议



二、基础使用

2.1 创建视频资源

AVPro Video可以直接对原始引用也可以对原始视频进行封装处理。MediaReference资源是对原始视频资源的封装,可以指定本地视频文件,也可以给定url。也可以针对不同平台,使用不同的资源。


2.2 播放视频



在创建播放组件并添加资源后,理论上视频就可以正常播放了。但视频的播放只是按帧采样视频,并未指定采样到的纹理如何显示。AVPro Video提供了DisplayUGUI和ApplyToMesh两个组件,分别将纹理显示在UI和Mesh中。
指定资源路径时有Reference和Path两种方式。Reference就是2.1中提到的MediaReference。Path则是相对路径,AVPro Vidseo提供了以下资源搜索目录:


2.3 投射到UI & Mesh



Mesh中显示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组件处理过渡效果。


播放内容在Playlist Items中定义,指定资源路径与播放模式。常用的设置为Loop选项。若未勾选Loop,则组件会按照列表资源进行播放


// 手动添加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。


参考


[*]官方文档
页: [1]
查看完整版本: Unity AVPro Video使用