版本:Unity 6 (6000.0)
语言英语
  • C#

MediaEncoder.AddFrame

建议更改

提交成功!

感谢您帮助我们提升 Unity 文档的质量。虽然我们无法接受所有的提交,但我们确实会阅读来自我们用户的所有建议更改,并在合适的地方进行更新。

关闭

提交失败

出于某种原因,您建议的更改无法提交。请过几分钟<a>重试</a>。感谢您花时间帮助我们提升 Unity 文档质量。

关闭

取消

声明

public bool AddFrame(Texture2D texture);

声明

public bool AddFrame(Texture2D texture, Media.MediaTime time);

参数

texture 包含要写入当前帧轨道的像素的纹理。
time 新帧的时间戳。

返回

布尔值 如果操作成功,则为 True。否则为 False。

描述

将一个帧附加到文件的视频轨道。

保持视频帧和音频采样的数量对齐,以便尽可能地同步每个轨道。例如,在一个 30FPS 视频和 48KHz 音频的文件中,每个添加的视频帧后面应该跟一个 1600 个样本帧的音频缓冲区。

有关时间戳的说明

添加帧时,可以选择指定与该帧关联的时间戳。要使用该时间戳,它必须有效(参见 MediaTime.IsValid)。

当没有提供时间戳时,将使用指定视频帧速率(参见 VideoTrackAttributes.frameRate)来附加该帧以计算帧间时间差。有几种情况下必须指定时间戳:

1. 当创建视频轨道时没有有效速率(参见 VideoTrackAttributes.frameRate)。在这种情况下,所有 添加的帧都必须给出一个时间戳,因为没有预定义的帧间时间差。
2.当最后一帧和追加的帧的时间差与预期不符时。例如,在 Unity 中录制,并且游戏循环持续时间长于预期,帧间时间差将不再是常数。在此情况下,必须指定与追加的帧关联的时间戳。这样,在播放录制的电影时,它将与在录制期间所看到的画面一致。生成的电影将具有可变帧率 (VFR),因为每帧之间的时间差并不完全相同。

对于具有预定义速率的轨道,可以混合有时间戳和无时间戳的两种变体,只要时间值最终单调增加即可。以这种方式添加的帧不必在时间上等距。添加时间戳早于最后一帧时间戳的帧无效。


声明

public bool AddFrame(int width, int height, int rowBytes, TextureFormat format, NativeArray<byte> data);

声明

public bool AddFrame(int width, int height, int rowBytes, TextureFormat format, NativeArray<byte> data, Media.MediaTime time);

参数

width 图像宽度。
height 图像高度。
rowBytes 一行像素中的字节数。在行包含填充时很有用。如果没有填充,可以将其设置为 0。
format 像素格式。当前仅支持 TextureFormat.RGBA32。
data 包含图像的字节数。
time 新帧的时间戳。

返回

布尔值 如果操作成功,则为 True。否则为 False。

描述

将原始缓冲区的帧附加到文件视频轨道。

此版本 AddFrame 有助于节省图像复制,前提是源数据不在 Texture2D 中。例如,当像素数据来自 AsyncGPUReadbackRequest 时。有关更多详细信息,请参阅 MediaEncoder.AddFrame 的其他重载中有关音频/视频对齐的注释,该重载将采用 Texture2D

有关 time 参数的更多信息,请参阅本方法其他重载中的有关时间戳的注释