Version: 2022.3

MediaEncoder

class in UnityEditor.Media

切换到手册

描述

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

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

对每个轨道交替调用 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完成写入所有轨道,并关闭正在写入的文件。