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