尝试将视频上传到YouTube,视频已上传但我上传后却收到例外情况

时间:2011-09-21 11:15:52

标签: c# youtube-api google-data-api

这是代码:

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

我从http://code.google.com/p/google-gdata/downloads/list引用了一些dll文件 我下载了两个文件:Google_Data_API_Setup_1.9.0.0.msi Google Data API Setup(1.9)和YouTube_SDK_1.9.0.0.msi

现在我尝试再次上传视频文件这个视频文件并上传得很好,没有问题一次,视频正在youtube.com上运行 但即使它在我的代码中工作,我也遇到了异常错误。无论上传是否有效,我都会得到例外。

  1. 程序正在运行并挂起几分钟,我在运行时看不到form1。
  2. 几分钟后,我得到了例外。
  3. 即使我收到异常,但每次程序运行时我都会收到异常,但文件上传得很好。

    我不知道为什么,但是我看到文件上传了3-5次,一次或两次上传了相同的文件,其他文件被拒绝,因为它是重复的。但是我运行了一次程序,为什么有时它会立即上传文件很多次?现在我再试一次;该程序不再运行,我在10分钟前关闭它。并且在完成该过程之后看到文件上传并正在处理我看到文件再次上传,现在它被拒绝,因为它是重复的。但是,如果程序没有运行,为什么还要继续上传文件?

    上传之间的时间就像我的程序关闭的14分钟相同的文件我不再运行它了但是我看到两个同名的文件,同一个文件:一个是好的,一个被拒绝复制。

    所以我现在有3个问题:

    1. 在程序挂起时运行程序时无法看到form1。

    2. 始终出现异常错误。

    3. 文件上传的时间超过一次。

    4. 例外是在线:request.Upload(video);

      异常错误消息是:执行请求失败:

      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: 
      
      form1.cs上的第47行是:request.Upload(video);

      现在我再次看到它上传了4次文件: 无法弄清楚为什么以及如何继续上传文件。 其中3个文件被拒绝重复,一个是好的!

      我问了一个人,他告诉我这对他没有任何问题。

      我正在使用Visual Studio 2010专业版.net 4.0 Windows 7 64位。

      我多次检查了我的YouTube登录信息和密码,也检查了我的Gmail以及所有相同的问题和例外情况。

2 个答案:

答案 0 :(得分:3)

该异常说明了这里发生了什么:您的请求超时。您可以使用this property更改超时。默认设置为100,000毫秒。您可以将其设置为更大的数字,以增加超时或将-1设置为默认的HTPPRequestObject:

settings.Timeout = -1;

此外,您应该以单独的线程上传视频。这样,GUI就像你说的那样保持响应并且不会“挂起”。

<强>更新

你可以像这样开始一个线程:

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

答案 1 :(得分:0)

以下是通过c#上传YouTube视频的教程。

请参阅此处:http://codewithgeek.blogspot.com/2015/12/upload-video-to-youtube-from-c-aspnet.html