美文网首页
Unity AVPro 插件使用

Unity AVPro 插件使用

作者: SilenceTT | 来源:发表于2022-06-22 14:05 被阅读0次

    一、概述

    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();
    
    // 视频播放跳转到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

    参考

    转载自Unity AVPro Video使用 - 知乎 (zhihu.com)

    相关文章

      网友评论

          本文标题:Unity AVPro 插件使用

          本文链接:https://www.haomeiwen.com/subject/qzquvrtx.html