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

MediaEncoder

UnityEditor.Media 中的类

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们确实会阅读用户提出的每一项更改建议,并在适用时进行更新。

关闭

提交失败

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

关闭

取消

描述

将图像和音频样本编码为音频或电影文件。

构造此类的实例将创建一个编码器,该编码器将创建一个带有指定音轨的音频、视频或音频/视频文件。

交替调用 AddFrame() 和 AddSamples() 方法,以使每个音轨的帧和样本保持一致。

将所有想要添加的帧和样本添加到文件后,调用 Dispose() 以正确结束每个音轨并关闭文件。

using UnityEditor.Media;
using UnityEngine;
using Unity.Collections;
using System.IO;

public class Recorder { static public void RecordMovie() { var videoAttr = new VideoTrackAttributes { frameRate = new MediaRational(50), width = 320, height = 200, includeAlpha = false };

var audioAttr = new AudioTrackAttributes { sampleRate = new MediaRational(48000), channelCount = 2, language = "fr" };

int sampleFramesPerVideoFrame = audioAttr.channelCount * audioAttr.sampleRate.numerator / videoAttr.frameRate.numerator;

var encodedFilePath = Path.Combine(Path.GetTempPath(), "my_movie.mp4");

Texture2D tex = new Texture2D((int)videoAttr.width, (int)videoAttr.height, TextureFormat.RGBA32, false);

using (var encoder = new MediaEncoder(encodedFilePath, videoAttr, audioAttr)) using (var audioBuffer = new NativeArray<float>(sampleFramesPerVideoFrame, Allocator.Temp)) { for (int i = 0; i < 100; ++i) { // Fill 'tex' with the video content to be encoded into the file for this frame. // ... encoder.AddFrame(tex);

// Fill 'audioBuffer' with the audio content to be encoded into the file for this frame. // ... encoder.AddSamples(audioBuffer); } } } }

构造函数

MediaEncoder创建具有不同音轨排列的新编码器。

公共方法

AddFrame将帧附加到文件的视频音轨。
AddSamples将样本帧附加到指定的音频音轨。
Dispose完成写入所有音轨并关闭正在写入的文件。