如何将媒体组合呈现到现有文件

时间:2018-07-20 16:38:44

标签: c# uwp

我想用UWP media composition编辑视频文件,然后将其保存回现有文件。但是,当我选择相同的文件时,渲染将不起作用,因为数据流已损坏。

作为一种解决方法,我将视频渲染到一个临时文件,然后将其移动到现有位置:

// Create temp file
var tempFolder = ApplicationData.Current.TemporaryFolder;
StorageFile tempFile = await tempFolder.CreateFileAsync(Guid.NewGuid().ToString(), CreationCollisionOption.ReplaceExisting);

// Render video to temp file so stream get not corrupted
mediaComposition.RenderToFileAsync(tempFile, MediaTrimmingPreference.Precise);

// If rendering completed move temp file to existing video
await tempFile.MoveAndReplaceAsync(existingFile);

我的解决方法工作正常,除了临时文件夹位于我的本地磁盘上,并且当我编辑外部磁盘上的大视频文件时,我的本地磁盘上的存储空间可能用完了。

还有另一种可能性可以用RenderToFileAsync()覆盖现有文件吗?

更新

如注释中所建议,我使用以下代码将文件大小设置为零,但随后得到了FileNotFoundException

var stream = await file.OpenAsync(FileAccessMode.ReadWrite);
stream.Size = 0;
stream.Dispose();

0 个答案:

没有答案