При попытке загрузить видео на YouTube видео загружено, но я получаю исключение после его загрузки. - PullRequest
1 голос
/ 21 сентября 2011

Это код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Google.GData.Client;
using Google.GData.Extensions;
using Google.GData.Extensions.MediaRss;
using Google.GData.YouTube;
using Google.YouTube;



namespace YoutubeTesting
{
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
        }

        YouTubeRequestSettings settings;
        YouTubeRequest request;
        string devkey = "AI39si6xhSQXx95FTYIACWPfq-lLIphblgaReuz9z6VEjR1Q6YjrV6FRN2U6FN6P6-lGF2OYaUZhCVOKJ_MCk4o6kPeUszvf5A";
        string username = "tbout72";
        string password = "password here";


        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                settings = new YouTubeRequestSettings("You Manager", devkey, username, password);
                request = new YouTubeRequest(settings);
                Video video = new Video();
                video.Title = "test";
                video.Tags.Add(new MediaCategory("Comedy", YouTubeNameTable.CategorySchema));
                video.Keywords = "Comedy";
                video.Private = false;
                video.MediaSource = new MediaFileSource("d:\\P9170031.MOV", "video/MOV");
                request.Upload(video);
                MessageBox.Show("Successfully Uploaded");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

Я ссылался на некоторые файлы DLL из http://code.google.com/p/google-gdata/downloads/list Я загрузил два файла: Google_Data_API_Setup_1.9.0.0.msi Настройка API данных Google (1.9) и YouTube_SDK_1.9.0.0.msi

Теперь я попытался загрузить видеофайл снова, этот видеофайл был загружен хорошо, без проблем, и видео работает на youtube.com. Но даже если это работает в моем коде, я получил ошибку исключения. Работает загрузка или нет, я получаю исключение.

  1. Программа работает и зависает в течение нескольких минут, я не вижу form1, пока она работает.
  2. Через несколько минут я получаю исключение.

Несмотря на то, что я получаю исключение и получаю его каждый раз, когда работает программа, файл хорошо загружен.

Я не знаю, почему, но я вижу, что файл загружен 3-5 раз, и один или два раза он был загружен так же, как и другие файлы, которые отклоняются, поскольку он является дубликатом. Но я запустил программу один раз, так почему иногда он загружает файл столько раз одновременно? Теперь я попробовал еще раз; программа больше не работает, я закрыл ее как 10 минут назад. И увидел, что файл загружен и обрабатывается сейчас, после того, как он завершил процесс. Я вижу, что файл снова загружен, и теперь он отклонен, поскольку является дубликатом. Но почему загрузка файла продолжается, если программа не запущена?

Время между загрузками составляет примерно 14 минут для одного и того же файла. Моя программа закрыта. Я больше не запускал его, и все же я вижу два файла с одним и тем же именем: один в порядке, другой отклонен для дублирования.

Итак, у меня сейчас 3 проблемы:

  1. Не может видеть форму 1 во время работы программы, так как программа зависает.

  2. Постоянно появляется ошибка исключения.

  3. Файл загружается более одного раза.

Исключение находится в строке: request.Upload (видео);

Сообщение об ошибке исключения: Ошибка выполнения запроса:

https://uploads.gdata.youtube.com/feeds/api/users/default/uploads

Это полное исключение:

Google.GData.Client.GDataRequestException was caught
  Message=Execution of request failed: https://uploads.gdata.youtube.com/feeds/api/users/default/uploads
  Source=Google.GData.Client
  StackTrace:
       at Google.GData.Client.GDataRequest.Execute()
       at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
       at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
       at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
       at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
       at Google.GData.Client.GDataGAuthRequest.Execute()
       at Google.GData.Client.MediaService.EntrySend(Uri feedUri, AtomBase baseEntry, GDataRequestType type, AsyncSendData data)
       at Google.GData.Client.Service.Insert(Uri feedUri, AtomEntry newEntry, AsyncSendData data)
       at Google.GData.Client.Service.Insert[TEntry](Uri feedUri, TEntry entry)
       at Google.GData.YouTube.YouTubeService.Upload(String userName, YouTubeEntry entry)
       at Google.YouTube.YouTubeRequest.Upload(String userName, Video v)
       at Google.YouTube.YouTubeRequest.Upload(Video v)
       at YoutubeTesting.Form1.Form1_Load(Object sender, EventArgs e) in D:\C-Sharp\Youtube_Testing\YoutubeTesting\YoutubeTesting\Form1.cs:line 47
  InnerException: System.Net.WebException
       Message=The operation has timed out
       Source=System
       StackTrace:
            at System.Net.HttpWebRequest.GetResponse()
            at Google.GData.Client.GDataRequest.Execute()
       InnerException: 

строка 47 в form1.cs: запрос. Загрузка (видео);

Теперь я снова вижу, что он загружал файл примерно 4 раза: Не могу понять, почему и как он продолжает загружать файл. И 3 файла отклонены для дубликата, один в порядке!

Я спросил кого-то, и он сказал, что у него это работает без проблем.

Я использую Visual Studio 2010 pro .net 4.0 Windows 7 64bit.

Я много раз проверял свой логин и пароль на YouTube, а также в своем Gmail и все те же проблемы и исключения.

Ответы [ 2 ]

3 голосов
/ 21 сентября 2011

В исключении указано, что здесь происходит: ваш запрос истек.Вы можете изменить время ожидания с помощью этого свойства .По умолчанию установлено 100 000 миллисекунд.Вы можете установить его на большее число, чтобы увеличить время ожидания или -1, чтобы придерживаться значения по умолчанию HTPPRequestObject:

settings.Timeout = -1;

Кроме того, вы должны загрузить видео в отдельном потоке.Таким образом, графический интерфейс пользователя остается отзывчивым и не «зависает», как вы говорите.

Обновление:

Вы можете создать тему следующим образом:

new Thread(new ThreadStart(() =>
{
    var settings = new YouTubeRequestSettings("You Manager", devkey, username, password)
    {
        Timeout = -1
    };
    var request = new YouTubeRequest(settings);
    var video = new Video()
    {
        Title = "test",
        Tags.Add(new MediaCategory("Comedy", YouTubeNameTable.CategorySchema)),
        Keywords = "Comedy",
        Private = false,
        MediaSource = new MediaFileSource("d:\\P9170031.MOV", "video/MOV"),
    };
    request.Upload(video);
})).Start();
0 голосов
/ 08 июня 2015

Вот учебник для загрузки видео с YouTube через c #.

См. Здесь: http://codewithgeek.blogspot.com/2015/12/upload-video-to-youtube-from-c-aspnet.html

...