1

Ich habe versucht, alle zu suchen, um herauszufinden, Antwort hat keine Lösung gefunden. Ich bekomme Ausnahme beim Hochladen von Video auf Youtube-Kanal von youtube data v3. Ich habe Schlüssel für die installierte Anwendung erstellt. Sogar der Videotitel und seine Details werden hochgeladen. Das einzige Problem ist, dass ich die AusnahmeYoutube Daten api v3 Video Upload Fehler

Aufgabe wird abgebrochen. Bitte sehen Sie Stack Trace am Ende für weitere Informationen.

hier ist mein Code

private async Task Run() 
    { 
     UserCredential credential; 
     using (var stream = new FileStream("client_secret_766914936775-1ak2tk5e3u0krlbuu9rdip1sfa9u8k44.apps.googleusercontent.com.json", FileMode.Open, FileAccess.Read)) 
     { 
      credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       // This OAuth 2.0 access scope allows an application to upload files to the 
       // authenticated user's YouTube channel, but doesn't allow other types of access. 
       new[] { YouTubeService.Scope.YoutubeUpload }, 
       "techno.1", 
       CancellationToken.None 
      ); 
     } 

     YouTubeService youtubeService = new YouTubeService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = "techno ", 

     }); 



     var video = new Video(); 
     video.Snippet = new VideoSnippet(); 
     video.Snippet.Title = "Default Video Title"; 
     video.Snippet.Description = "Default Video Description"; 
     video.Snippet.Tags = new string[] { "tag1", "tag2" }; 
     video.Snippet.CategoryId = "22"; // See https://developers.google.com/youtube/v3/docs/videoCategories/list 
     video.Status = new VideoStatus(); 
     video.Status.PrivacyStatus = "unlisted"; // or "private" or "public" 
     var filePath = @"abc.mp4"; // Replace with path to actual movie file. 

     using (var fileStream = new FileStream(filePath, FileMode.Open)) 
     { 
      var videosInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", fileStream, "video/*"); 
      videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged; 
      videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived; 

      await videosInsertRequest.UploadAsync(); 
     } 
    } 

    private void videosInsertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress) 
    { 
     switch (progress.Status) 
     { 
      case UploadStatus.Uploading: 
       Console.WriteLine("{0} bytes sent.", progress.BytesSent); 
       break; 

      case UploadStatus.Failed: 
       Console.WriteLine("An error prevented the upload from completing.\n{0}", progress.Exception); 
       break; 
     } 
    } 

    private void videosInsertRequest_ResponseReceived(Video video) 
    { 
     Console.WriteLine("Video id '{0}' was successfully uploaded.", video.Id); 
    } 
} 

Ich erhalte uploadStatus.Failed videosInsertRequest_ProgressChange Methode.

Ich habe bereits versucht, diesen Code zu verwenden

youtubeService.HttpClient.Timeout = TimeSpan.FromMinutes (60);

aber Timeout-Eigenschaft ist nicht verfügbar. es wird nur bekommen.

An error prevented the upload from completing. System.Threading.Tasks.TaskCanceledException: A task was canceled.
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResult() at Google.Apis.Upload.ResumableUpload 1.d__94.MoveNext() in C:\Apiary\v1.20\google-api-dotnet-client\Src\Support\GoogleApis\Apis[Media]\Upload\ResumableUpload.cs:line 652 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResult() at Google.Apis.Upload.ResumableUpload 1.d__91.MoveNext() in C:\Apiary\v1.20\google-api-dotnet-client\Src\Support\GoogleApis\Apis[Media]\Upload\ResumableUpload.cs:line 581 Error: A task was canceled.

+0

Sie können den anderen Vorschlag in diesem [SO-Thread] (http://stackoverflow.com/a/27744211/5832311) versuchen, die JSON-Datei herunterzuladen. Benennen Sie den Namen der JSON-Datei in 'client_secrets.json' um und speichern Sie sie in bin/Debug ot bin/Release als das gleiche * .exe als Verzeichnis. Möglicherweise war Ihre Netzwerkgeschwindigkeit auch langsam, wie in dieser [verwandten Ausgabe] beschrieben (https://github.com/youtube/api-samples/issues/7). – abielita

+0

Ich habe versucht mit dem Umbenennen und Platzieren dieser Dateien in bin/Release aber nicht funktioniert. –

Antwort

0

Fünfzehn Minuten sind viel zu lang für den Timeout-Wert. Ich benutze eine Minute.

Es sieht so aus, als ob das eigentliche Problem darin besteht, dass Sie den zurückgegebenen Fehler nicht behandeln und den Upload fortsetzen. Siehe das Beispielprogramm "ResumeableUpload.CS.Sample" unter https://github.com/google/google-api-dotnet-client-samples Das Beispielprogramm zeigt, wie Sie den Upload nach einem Fehler in der gleichen Instanz fortsetzen und wie Sie einen Upload fortsetzen, wenn das Programm neu gestartet wird.

Mit einem kürzeren Timeout und dem Code zum Fortsetzen des Uploads werden Ihre Uploads in Zeiten, in denen der Upload-Server ausgelastet ist, viel schneller ausgeführt.

+0

ja du hast Recht. Aber ich möchte mehrere Threads für den Upload zur gleichen Zeit ausführen. Können Sie mir sagen, welche Eigenschaften von uploaduri in IUploadSessionData ich für mehrere Prozesse in db speichern muss? –

+0

Ich möchte nicht alle Eigenschaften von Upload Uri in der Datenbank für Lebenslauf –

+0

speichern Sie sollten sich das Beispielprogramm in GitHub anschauen. Ich speichere **. UploadUri.AbsoluteUri ** und den vollständigen Pfadnamen der hochgeladenen Datei. –

0

Endlich arbeitete sie

youtubeService.HttpClient.Timeout = TimeSpan.FromMinutes(15.00); 

ich Span in falschem Weg gab.

Verwandte Themen