【问题标题】:YouTube C# API - How do I resume a failed uploadYouTube C# API - 如何恢复失败的上传
【发布时间】:2013-11-27 22:44:40
【问题描述】:

我正在尝试使用 ResumableUploader 通过 C# API 将大型视频文件上传到 youtube

代码如下所示:

            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());

我尝试在异步操作完成后获取视频 ID,如下所示:

    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 事件获取当前位置。但是如何继续上传?

【问题讨论】:

    标签: c# youtube youtube-api


    【解决方案1】:

    我知道这是一个老问题,但我在尝试使用 YouTube API V3 做同样的事情时发现了它。这看起来像是来自早期版本的 API 的代码,所以 my question 为 API 的 V3 提出同样的问题,如果您升级,可能会有所帮助。

    如果有人为此苦苦挣扎,我已经粘贴了一些我的旧代码,但我正在切换到新版本并替换所有这些代码。 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();  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-23
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 2012-05-21
      相关资源
      最近更新 更多