該組合物保存爲XML文件,其中包含大約該組合物的元數據諸如源媒體文件,剪輯,重疊的佈置中,並且施加到所述組合物的效果類似如下:
<?xml version="1.0" encoding="UTF-8"?>
<Composition>
<Clips>
<MediaClip ExpectedOriginalDuration="5816533125" Path="C:\Users\username\AppData\Local\Packages\Microsoft.SDKSamples.MediaEditingSample.CS_8wekyb3d8bbwe\LocalState\temp.mp4"/>
</Clips>
</Composition>
夾子信息我們從XML文件獲取的不是媒體源的剪輯,它們是定義原始源路徑的元數據。似乎只有從媒體文件創建的剪輯才能成功添加到合成中。因此,解決方案是通過MediaComposition.RenderToFileAsync將第二個加載的合成物渲染到媒體文件,然後從該文件創建一個新剪輯。最後,將新剪輯添加到第一個加載的合成中以完成合並。更新後的代碼如下。
StorageFile timelineCMPOutputFile = await ApplicationData.Current.LocalFolder.GetFileAsync("timelineCMPOutputFile");
StorageFile timelineCMPOutputFile2 = await ApplicationData.Current.LocalFolder.GetFileAsync("timelineCMPOutputFile2");
var composition = await MediaComposition.LoadAsync(timelineCMPOutputFile);
var composition2 = await MediaComposition.LoadAsync(timelineCMPOutputFile2);
//TODO: Warn user to select the oldest first.
try
{
await composition2.RenderToFileAsync(await ApplicationData.Current.LocalFolder.CreateFileAsync("temp.mp4", CreationCollisionOption.ReplaceExisting));
StorageFile tempfile = await ApplicationData.Current.LocalFolder.GetFileAsync("temp.mp4");
MediaClip firstClip = await MediaClip.CreateFromFileAsync(tempfile);
composition.Clips.Add(firstClip); /// Exception throws here.
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message.ToString());
}
var action = composition.SaveAsync(timelineCMPOutputFile);
// Combine two video files together into one
謝謝你謝謝! – Kinani