Как получить идентификатор для загруженного видео на YouTube с помощью возобновляемой загрузки
Я использую Async ResumableUpload для загрузки видео на YouTube, однако мне не удалось получить VideoID для успешно загруженного видео. Это было очень легко для отдельных загрузок Sync, но я не смог найти никаких примеров для Async.
Вот код:
var mResumableUploader = new ResumableUploader(chunkSize);
mResumableUploader.AsyncOperationCompleted += MResumableUploaderAsyncOperationCompleted;
mResumableUploader.AsyncOperationProgress += MResumableUploaderAsyncOperationProgress;
var youTubeAuthenticator = new ClientLoginAuthenticator(appName, ServiceNames.YouTube, uName, passWord);
youTubeAuthenticator.DeveloperKey = devKey;
newVideo = new Video();
newVideo.Title = "video";
newVideo.Tags.Add(new MediaCategory("Entertainment", YouTubeNameTable.CategorySchema));
newVideo.Keywords = "video";
newVideo.Description = "video";
newVideo.YouTubeEntry.Private = false;
newVideo.YouTubeEntry.MediaSource = new MediaFileSource(fileName, fileContType);
var link = new AtomLink("http://uploads.gdata.youtube.com/resumable/feeds/api/users/default/uploads");
link.Rel = ResumableUploader.CreateMediaRelation;
newVideo.YouTubeEntry.Links.Add(link);
Console.WriteLine("Starting upload: ");
mResumableUploader.InsertAsync(youTubeAuthenticator, newVideo.YouTubeEntry, "inserter");
Любая помощь будет высоко ценится.
Благодарю.
2 ответа
Решение
Как показано в примерах данных, предоставленных Google, вы можете проанализировать видео после завершения процесса загрузки. С уважением
ru.AsyncOperationCompleted += new AsyncOperationCompletedEventHandler(ru_AsyncOperationCompleted);
void ru_AsyncOperationCompleted(object sender, AsyncOperationCompletedEventArgs e)
{
//upload complete
YouTubeRequestSettings ytSettings = new YouTubeRequestSettings("myApp", googleDevKey, ytUsername, ytPassword);
Video v = ytRequest.ParseVideo(e.ResponseStream);
string videoId = v.VideoId;
string watchPage = v.WatchPage.ToString();
}
С YouTube API v3 вам не нужно использовать ResumableUploader. Вам просто нужно добавить делегата в VideoInsertRequest ResponseReceived:
var video = new Video();
video.Snippet = new VideoSnippet();
video.Snippet.Title = "Default Video Title";
video.Status = new VideoStatus();
video.Status.PrivacyStatus = "unlisted"; // or "private" or "public"
var filePath = @"REPLACE_ME.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.ResponseReceived += videosInsertRequest_ResponseReceived;
await videosInsertRequest.UploadAsync();
}
void videosInsertRequest_ResponseReceived(Video video)
{
Console.WriteLine("Video id '{0}' was successfully uploaded.", video.Id);
}
Полный код здесь: https://developers.google.com/youtube/v3/code_samples/dotnet