unity中的音频相关_笔记

1,在unity中视频播放一般都会出现在那里?

1.游戏开始时通过视频来交代游戏背景

2.剧情触发时通过视频来表现剧情发展

播放需求

1.全屏视频:VideoPlayer渲染模式为 摄像机相关模式

2.Ul播放视频:VideoPlayer渲染模式为 渲染纹理模式

3.全景视频:渲染纹理模式+天空盒材质球

VideoPlayer的详细介绍:

截图:

1,Video Player代码相关

注意:使用VideoPlayer组件需要引用命名空间UnityEngine.Video

1.将一个 VideoPlayer 附加到主摄像机。 它会自动瞄准摄像机背板,无需更改 videoPlayer.targetCamera。

2.参数相关设置

是否自动播放videoPlayer.playOnAwake = false;

渲染模式videoPlayer.renderMode = VideoRenderMode.CameraFarPlane;

设置目标 渲染贴图videoPlayer.targetTexture = texture;

设置目标摄像机videoPlayer.targetCamera

透明度videoPlayer.targetCameraAlpha = 0.5f;

视频源videoPlayer.source = VideoSource.VideoClip;videoPlayer.clip = clip;

是否循环videoPlayer.isLooping = false;

视频总时长print(videoPlayer.length);//单位为s

当前时长,播放了多久print(videoPlayer.time);//单位为s

总帧数print(videoPlayer.frameCount);

当前帧print(videoPlayer.frame);

事件相关准备完成事件videoPlayer.prepareCompleted += (v) =>{print("准备完成");isOver = true;};

开始事件videoPlayer.started += (v) =>{print("当执行player播放方法后 会调用的事件");};

结尾时调用事件videoPlayer.loopPointReached += (v) =>{print("视频播放到结尾处时会调用的事件");};

Source 视频源:

1,Video Clip 视频剪辑 可以直接将视频剪辑拖入此处或者选择视频剪辑进行关联

2,URL 视频路径 选择视频的路径,可以是远程视频路径 也可以之后通过代码直接关联视频资源路径

Play On Awake 场景启动时就播放视频 如果希望自己控制播放时机,请取消该选项

Wait For First Frame 如果勾选该选项,Unity将等待视频第一帧准备好显示,如果取消勾选,可能会丢弃前几帧使视频时间与游戏保持同步

Render Mode 渲染方式

Camera Far Plane 在摄像机的远平面上渲染:Camera 定义接受视频的摄像机;;Alpha 视频的全局透明度;3D Layout

Camera Near Plane 在摄像机的近平面上渲染

Render Texture 将视频渲染到渲染纹理中:Target Texture 用于渲染图像的渲染纹理

Material Override 通过游戏对象渲染器的材质将视频渲染到游戏对象的选定纹理属性中:Renderer 用于渲染图像的渲染器 如果为None,则使用Video Player依附对象的上的渲染器

API Only 不预先设置渲染到哪里,通过代码来设置视频渲染到哪里 通过Video Player中的 texture

性进行设置

Audio Output Mode 输出视频源的音频设置

None 不播放音频

Audio Source 发送给指定的音频源对象,允许Unity的音频处理;Audio Source 用于播放音频轨道的音频源

Direct 直接绕过Unity音频处理,发送给音频输出硬件输出:Mute 静音;Volume 音量

API Only 通过代码将音频样本发送到关联的 AudioSampleProvider听诊器

视频剪辑的设置:

sRGB 是否开启sRGB sRGB是微软联合惠普、三菱、爱普生等厂商联合开发的通用色彩标准 它的主要作用就是避免在不同设备出现色差 一般默认让它勾选即可

Transcode 是否开启转码

Dimensions 控制源文件内容的大小调整方式

Codec 选择用于转码的解编码器

Spatial Quality 此设置决定视频图像在转码过程中是否压缩大小,缩小意味着它们占用的存储空间更少。但是,调整图像大小也会导致在播放期间出现模糊。

Keep Alpha 保留Alpha透明通道并在转码期间将其编码 仅对具有Alpha通道的源显示此属性 注意:Android平台的原生 VP8 支持中不包括透明度支持,这意味着必须启用转码,以便 Unity 使用其内部 Alpha 表示方法。

视频格式和编解码器

视频文件的本质:就是一堆数据

视频文件本质上就是一个"数据容器"它不仅可以包含视频数据本身它还包括1.音频2.字幕3.轨道信息(轨道还可以有多个,比如不同语言的字幕,不同语言的音频等等其它内容

不同格式的视频文件,比如.mp4、.mov、.avi、.webm等他们表示视频文件中的数据是使用某种容器格式排列的

(图像、音频、字幕等等)的集合)不同格式的视频区别就是存读数据的方式方法不同而已

视频的编码器和解码器

为了节省带宽和存储空间,视频中每个轨道(不同的音频,字幕募等等信息)都使用"编解码器"进行编码和解码。编码器负责压缩数据,解码器负责解压数据。通过他们对视频数据进行压缩和解压。常见的视频编解码格式为H.264。常见的音频编解码格式为AAC

也就是说"视频的编码器 负责将视频数据 进行压缩节约空间;视频的解码器 负责将视频数据 进行解压 解压后才能用于播放

他们本质上就是压缩和解压数据的一种规则。所以我们在播放视频时,要用合适的解码器(规则)来解压视频

硬件解码

目前大多数的设备都有专用于解码视频的硬件。一般是由GPU(图形处理器,显卡的核心硬件)来进行硬件解码的的

使用GPU进行硬件解码可以降低CPU的工作负荷,降低功耗一节省电量,节省性能。

这种硬件加速可通过本机自定义API实现,这些API因平台而异。Unity帮助我们进行了封装,提供了通用的API供我们使用。Unity也会自己帮助我们判断来进行硬件解码。

硬件解码优缺点

优点:效率高,降低功耗

缺点:无法支持所有视频格式文件,画质不是特别清晰

软件解码

软件解码相当于就是Unity自己利用CPU进行计算来进行解码。此软件解码方案使用VP8视频编解码器和Vorbis音频编解码品

如果平台的硬件解码方式在分辨率、多个音频轨道或Alpha通道支持方面带来了不必要的限制,则软件解码将非常有用

但是软件解码会增加CPU的工作负荷,Unity也提供了基于软件的视频解码

软件解码优缺点

优点:能够解码所有视频格式文件,画质更加清晰

缺点:增加CPU工作负荷,更耗电,解码时会造成明显卡顿

硬件和软件解码对比

硬件解码就是有个专门的一个计算机硬件设备帮我们进行解码计算,一般是GPU来进行硬件解码

软件解码就是软件自己通过代码规则来进行解码,本质上就是通过CPU去计算处理解码

所以硬件解码理论上来说效率和速度都比软件解码快。Unity两种方式都有提供,但具体使用的哪种要根据平台而定

unity中的视频兼容性

视频兼容性的含义

所谓的兼容性就是指硬件之间、软件之间或是软硬件组合系统之间的相互协调工作的程度

对于视频文件的兼容性可以理解为当游戏在不同的操作系统上运行时,该操作系统环境是否支持该视频的播放

Unity编辑器中的是否兼容对应平台,主要由两个因素决定

1.视频文件格式

2.视频文件使用的编解码器

关键因素一:文件格式

一般我们在Windows(微软的操作系统)上使用Unity开发游戏)或者在macOS(苹果的操作系统)上开发游戏

所以我们主要看这两个平台上支持的格式Windows和macOS都支持的格式

.dv、.m4v、.mov、.mp4、mpg、mpeg、.ogv、vp8、Webm

建议选择最常见的.mp4,

关键因素二:编解码器

就算使用了都支持的文件格式,但是如果制作视频时使用的编解码器在平台上不受支持,也会导致视频不能正常使用或者引起Unity报错

建议大家使用H.264编解码器制作视频。它是大多数平台支持的最佳视频编解码器,提供最佳的跨平台台兼容性

如果想了解更多Windows和macOS操作系统支持的编解码品器

Windows: https://docs.microsoft.com/en-us/windows/win332/medfound/supported-media-formats-in-media-foundaticon

macos: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/OSX_Technology_Overview/MMediaLayer/MediaLayer.htm

SPEC

目标平台的兼容性问题

视频与Unity编辑器平台兼容,与目标平台不兼容

视频和Windows或者MacOS操作系统兼容,但是与要发发布游戏的IOS或者

Android平台不兼容

解决方案:Unity视频剪辑导入器提供了转码功能,当我们发布应用时可以进行转码来解决该问题

Unity自带转码功能,可以将视频编解码器转码为H.264、H.265、VP8。。所谓的转码,就是将视频原本的编解码规则变为其它的标准佳

视频与Unity编辑器平台不兼容,与目标平台兼容

视频和Windows或者MacOS操作系统不兼容,但是与要发布游戏的IOS或者Android平台兼容

解决方案:一般这种情况下,我们是更希望使用兼容发布平台的格式和遍解码器的,所以我们可以将这些资源放置在StreamingAssets文件夹中。在使用视频时,我们根据所在的平台选择性使用对应内容

简单记忆目标平台兼容性问题

最保险的组合就是mp4格式+h.264编解码器

如果游戏想要发布的平台很多,那么编解码器可以使用VP8

H.265是新的编码协议,也即是H.264的升级版

H.265标准保留H.264原来的某些技术,同时对一些相关的技术加以人改进

新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置

可使用h.265编解码器的平台

macos 11.13+

windows windows 10

JOS 11.0+

Android 5.0+

所有我们主要了解安卓和苹果手机对兼容性的要求即可

Android: https://developer.android.com/guide/topics/media/media-formats#recommendations

IOS: https://www.apple.com/iphone/compare/

在Unity中使用全景视频

1.导入等距圆柱投影布局的视频文件

2.用Video Player以Render Texture渲染纹理播放视频

3.设置接受渲染纹理的天空盒材质,天空盒材质的着色器使用 Skybox>Panoramic

4.设置场景以使用天空盒材质

注意:尽量使用较高分辨率率的全景视频(4K或8K),这样效果更好

但是对于一些老设备或者移动设备可能最多只能使用2K分辨率,具体根据实际情况而定

使用全景视频时的注意事项

1.Render Texture渲染纹理的Size和视频尺寸一样,可以在视频预览窗口选择Source Info查看分辨率

2.将渲染纹理的Depth Buffer设置为No depth buffer

3.天空盒材质中

3-1等距圆柱投影布局,将Mapping设置为Latitude Longitude Layout

根据视频时180视图还是360视图选择 360 degree或者180 degree

3-2立方体贴图,将Mapping设置为6 Frames Layout

4.如果视频时VR视频

分为了左右双眼,我们需要将天空盒材质的3D Layout设置为Side by Side

如果左右侧内容在视频中上下分部,3D Layout设置为Over Under

相关推荐
mxwin1 小时前
Unity URP SRP Batcher 完全指南 URP/HDRP 下的核心批处理机制,大幅降低 CPU 开销
unity·游戏引擎·shader·单一职责原则
千里马学框架1 小时前
干货分享:车载音频audio调试开发之dumpsys CarAudioService剖析
android·音视频·面试题·audio·系统开发·车载audio·framework工程师
深蓝海拓1 小时前
西门子S7-1500PLC的PEEK/POKE学习笔记
笔记·学习
南境十里·墨染春水2 小时前
C++ 笔记:std::bind 函数模板详解
前端·c++·笔记
Oll Correct2 小时前
实验十三:IPv4子网划分与基础路由配置实验——基于Cisco Packet Tracer的跨网段通信验证
网络·笔记
ljt27249606612 小时前
Compose笔记(七十五)--withFrameNanos
笔记·android jetpack
雪可问春风2 小时前
insightface进行视频中人脸识别
c++·音视频
ai产品老杨2 小时前
源码级开放与二次开发:基于 Spring Boot 的 AI 视频管理平台架构与 API 深度解析
spring boot·架构·音视频
Fleshy数模2 小时前
基于 dlib 与 OpenCV 的人脸检测实战:图片与视频场景全解析
人工智能·opencv·音视频