2013-10-05 18 views
0

我需要在PC上下載我剛錄製的視頻。我設法用圖片來做,但對於視頻,我只是得到一個空文件。佳能EDSDK:如何下載錄製的視頻?

我registred對象的事件處理程序

err = EDSDK.EdsSetObjectEventHandler(cameraDev, EDSDK.ObjectEvent_All, objectEventHandler, new IntPtr(0)); 

然後,我開始記錄:

public void StartRecording(int sec) 
{ 
    // set the timer, surement à mettre dans les config, plutot 
    System.Timers.Timer aTimer = new System.Timers.Timer(sec * 1000); 
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
    GC.KeepAlive(aTimer);    

    err = EDSDK.EdsSetPropertyData(cameraDev, EDSDK.PropID_Record, 0, 4, 4); 
    aTimer.Start(); 
} 

private void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    StopRecording(); 
} 


public void StopRecording() 
{   
    err = EDSDK.EdsSetPropertyData(cameraDev, EDSDK.PropID_Record, 0, 4, 0); 
} 

對象的事件處理程序:

public uint objectEventHandler(uint inEvent, IntPtr inRef, IntPtr inContext) 
{ 
    switch (inEvent) 
    { 
     case EDSDK.ObjectEvent_DirItemCreated: 
       DownloadImage(inRef, inContext); 
      break;     
    } 
    return 0; 
} 

最後,downolad

void DownloadImage(IntPtr DirectoryRef, IntPtr inContext) 
{    
    IntPtr stream = IntPtr.Zero; 
    IntPtr data = IntPtr.Zero; 

    EDSDK.EdsDirectoryItemInfo dirItemInfo; 
    uint err; 

    try 
    { 
     err = EDSDK.EdsGetDirectoryItemInfo(DirectoryRef, out dirItemInfo); 
     err = EDSDK.EdsCreateFileStream(dirItemInfo.szFileName, 
      EDSDK.EdsFileCreateDisposition.CreateAlways, EDSDK.EdsAccess.ReadWrite, out stream); 

     // does not work 
     err = EDSDK.EdsSetProgressCallback(stream, progressFunc, EDSDK.EdsProgressOption.Periodically, inContext); 

     // Fill the stream with the resulting image 
     err = EDSDK.EdsDownload(DirectoryRef, dirItemInfo.Size, stream); 

     if (err == EDSDK.EDS_ERR_OK) 
     { 
      err = EDSDK.EdsDownloadComplete(DirectoryRef); 
     } 
     else 
     { 
      err = EDSDK.EdsDownloadCancel(DirectoryRef); 
     } 
     if ((stream == null) == false) 
     { 
      err = EDSDK.EdsRelease(stream); 
      stream = IntPtr.Zero; 
     }     
    } 
    catch (Exception ex) 
    { 
     throw new Exception(String.Format("EDSDK Error : {0}", ex.Message)); 
    } 
    EDSDK.EdsRelease(stream); 
} 

在調試模式,方法EDSDK.EdsDownload永遠不會結束,但沒有異常,或者返回代碼...

請幫助!

回答

0

您是否確保將kEdsPropID_SaveTo設置爲1(「保存在遠程相機的存儲卡上」),因爲您無法像使用圖像一樣直接將其保存到PC。