2013-10-05 3 views
0

Мне нужно скачать видео, которое я только что записал, на моем ПК. Мне удалось сделать это с картинками, но для видео я просто получаю пустой файл.Canon EDSDK: как скачать записанное видео?

Я незарегистрированный обработчик события объекта

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 («Сохранить на карте памяти удаленной камеры»), потому что вы не можете сохранить его прямо на ПК, как вы можете, с помощью изображений.

Смежные вопросы