gpt4 book ai didi

c# - YouTube-API 上传文件没有任何错误(C#)

转载 作者:太空狗 更新时间:2023-10-29 23:15:07 26 4
gpt4 key购买 nike

我正在使用 Google 的 .net nuget (Google.Apis.YouTube.v3) 进行 API 调用。到目前为止一切正常(获取播放列表、视频信息等……)。但是,当我尝试上传视频时,它会在几秒钟内完成,但什么也没有发生。upload_ResponseReceived 从未被调用,upload_ProgressChanged 仅被调用两次,输出如下:1) 发送的字节数:0,状态:开始,异常:过了一会儿2) 发送的字节数:0,状态:失败,异常:System.Threading.Tasks.TaskCanceledException:任务已取消。

示例代码:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Upload;
using Google.Apis.Util.Store;
using Google.Apis.YouTube.v3;
using Google.Apis.YouTube.v3.Data;

namespace UploadTest
{
class Program
{
static void Main(string[] args)
{
UserCredential credential;
using (FileStream stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None,
new FileDataStore("YouTube.Auth.Store")).Result;
}
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
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 = @"E:\video.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;
videosInsertRequest.Upload();
}
Console.ReadLine();
}

private static void videosInsertRequest_ResponseReceived(Video obj)
{
Debug.WriteLine("Video has been uploaded! ID: {0}",obj.Id);
}

private static void videosInsertRequest_ProgressChanged(IUploadProgress obj)
{
Debug.WriteLine("Bytes sent: {0}, Status: {1}, Exception: {2}", obj.BytesSent, obj.Status, obj.Exception);
}
}
}

堆栈跟踪:

System.AggregateException was unhandled.
HResult=-2146233088
Message=One or more errors occurred.
Source=mscorlib
StackTrace:
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at System.Threading.Tasks.Task`1.get_Result()
at Google.Apis.Upload.ResumableUpload`1.Upload() in c:\code\google.com\google-api-dotnet-client\default\Tools\Google.Apis.Release\bin\Debug\output\default\Src\GoogleApis\Apis\[Media]\Upload\ResumableUpload.cs:line 351
at UploadTest.Program.<>c__DisplayClass2.<Main>b__1() in e:\Development\UploadTest\Program.cs:line 52
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.Threading.Tasks.TaskCanceledException
HResult=-2146233029
Message=A task was canceled.
InnerException:

知道我可能做错了什么吗?

最佳答案

好的,我认为您遇到了连接问题,您所要做的就是将 block 大小更改为更小的大小,因此您的代码应该如下所示:

const int KB = 0x400;
var minimumChunkSize = 256 * KB;

var videosInsertRequest = youtubeService.Videos.Insert(video,
"snippet,status", fileStream, "video/*");
videosInsertRequest.ProgressChanged +=
videosInsertRequest_ProgressChanged;
videosInsertRequest.ResponseReceived +=
videosInsertRequest_ResponseReceived;
// The default chunk size is 10MB, here will use 1MB.
videosInsertRequest.ChunkSize = minimumChunkSize * 4;
videosInsertRequest.Upload();

关于c# - YouTube-API 上传文件没有任何错误(C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21559550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com