2016-09-18 54 views
1

異常消息:添加預加載MediaClips到MediaComposition.Clips拋出System.ArgumentException

拋出異常: 'System.ArgumentException' 在mscorlib.ni.dll

WinRT的信息:元素已在使用

該參數不正確。

代碼:

composition = await MediaComposition.LoadAsync(timelineCMPOutputFile); 
composition2 = await MediaComposition.LoadAsync(timelineCMPOutputFile2); 

//TODO: Warn user to select the oldest first. 
try 
{ 
    for (int i = 0; i < composition2.Clips.Count; i++) 
    { 
     composition.Clips.Add(composition2.Clips[i]); // Exception throws here. 
    } 
} 
catch(Exception ex) 
{ 
    System.Diagnostics.Debug.WriteLine(ex.Message.ToString()); 
} 

var action = composition.SaveAsync(timelineCMPOutputFile); 

基本上我試圖做的是既MediaComposition.Clips合併成一個實例。

回答

1

該組合物保存爲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 
+0

謝謝你謝謝! – Kinani

相關問題