YouTube C# API — как возобновить неудачную загрузку

Я пытаюсь загрузить большие видеофайлы на YouTube через API С# с помощью ResumableUploader.

Код выглядит следующим образом:

            var settings = new YouTubeRequestSettings(Configuration.YouTubeApplicationName, Configuration.YouTubeApplicationKey, Configuration.YouTubeUsername, Configuration.YouTubePassword);
            settings.Timeout = int.MaxValue;

            var newVideo = new Video();

            newVideo.Title = title.Trim();
            newVideo.Tags.Add(new MediaCategory("Games", YouTubeNameTable.CategorySchema));
            newVideo.Keywords = keywords;
            newVideo.Description = description;
            newVideo.YouTubeEntry.Private = false;
            newVideo.Tags.Add(new MediaCategory("StarCraft2, Replay", YouTubeNameTable.DeveloperTagSchema));
            var contentType = MediaFileSource.GetContentTypeForFileName(filePathToUpload);
            newVideo.YouTubeEntry.MediaSource = new MediaFileSource(filePathToUpload, contentType);

            var link = new AtomLink("http://uploads.gdata.youtube.com/resumable/feeds/api/users/default/uploads");
            link.Rel = ResumableUploader.CreateMediaRelation;
            newVideo.YouTubeEntry.Links.Add(link);

            var resumableUploader = new ResumableUploader(256); //chunksize 256 kilobyte
            resumableUploader.AsyncOperationCompleted += resumableUploader_AsyncOperationCompleted;
            resumableUploader.AsyncOperationProgress += resumableUploader_AsyncOperationProgress;

            var youTubeAuthenticator = new ClientLoginAuthenticator(Configuration.YouTubeApplicationName, ServiceNames.YouTube, Configuration.YouTubeUsername, Configuration.YouTubePassword);
            youTubeAuthenticator.DeveloperKey = Configuration.YouTubeApplicationKey;

           resumableUploader.InsertAsync(youTubeAuthenticator, newVideo.YouTubeEntry, new object());

Я пытаюсь получить идентификатор видео, когда асинхронная операция завершена следующим образом:

    private static void resumableUploader_AsyncOperationCompleted(object sender, AsyncOperationCompletedEventArgs e)
{
    try
    {
        var settings = new YouTubeRequestSettings(Configuration.YouTubeApplicationName, Configuration.YouTubeApplicationKey, Configuration.YouTubeUsername, Configuration.YouTubePassword);
        var request = new YouTubeRequest(settings);
        Video v = request.ParseVideo(e.ResponseStream);        

    }
    catch (Exception ex)
    {
        //Upload has been disturbed.
    }  

}

Проблема в. Иногда возникают проблемы с загрузкой, шаткое соединение или что-то в этом роде. При возникновении ошибки вызывается AsyncOperationCompleted.

Теперь вопрос. Как возобновить загрузку? Я могу получить текущую позицию через событие AsyncOperationProgress. Но как мне продолжить загрузку?


person Emil C    schedule 27.11.2013    source источник


Ответы (1)


Я знаю, что это старый вопрос, но я нашел его, пытаясь сделать то же самое с V3 API YouTube. Это похоже на код из более ранней версии API, поэтому мой вопрос, задающий то же самое для V3 API, может помочь при обновлении.

Я вставил свой старый код, если кто-то борется с этим, но я перехожу на новую версию и заменяю весь этот код. Объект youtube_upload — это мой собственный свернутый класс, а не часть API. Я также сейчас использую ReSharper и следую их соглашениям об именах.

//Grab the rendered YouTube video ready for upload
string content_type = MediaFileSource.GetContentTypeForFileName(youtube_upload.YouTubeFileName);
MediaFileSource media_file_source = new MediaFileSource(youtube_upload.YouTubeFileName, content_type);

//Generate a media stream and move to the currently uploaded position within it
media_stream_resume = media_file_source.GetDataStream();
media_stream_resume.Seek(youtube_upload.CurrentPosition, SeekOrigin.Begin);

youtube_uploading_id = youtube_upload.YouTubeID;        

//Attempt to resume the upload
resumable_uploader.ResumeAsync(youtube_authenticator, youtube_upload.ResumeUri,
  youtube_upload.httpVerb, media_stream_resume, content_type, youtube_upload);

youtube_upload.ErrorText = Constants.YouTubeStatusResuming;
youtube_upload.SaveYouTube();  
person Mick    schedule 24.01.2014