将图像和音频样本编码为音频或电影文件。
构造此类的实例将创建一个编码器,该编码器将创建一个带有指定音轨的音频、视频或音频/视频文件。
交替调用 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 | 完成写入所有音轨并关闭正在写入的文件。 |