找回密码
 立即注册
查看: 390|回复: 0

Unity AVPro Video使用

[复制链接]
发表于 2022-3-29 09:55 | 显示全部楼层 |阅读模式
一、概述

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。


参考


  • 官方文档

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-17 04:50 , Processed in 0.090875 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表