2017-09-15 30 views
0

我們需要在YouTube上上傳視頻。我用我的asp.net web api上傳視頻。所以請任何人都可以幫助我。我使用了YouTube API和OAuth,但現在無法工作。所以請幫助我。使用asp.net web API在Youtube上傳視頻

+0

您可以發佈您的代碼,以便我們可以幫助? –

+0

您可以使用Google Api的Resumable Uploads協議https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol上傳您的視頻,這樣您就可以調用Rest服務上傳視頻,您可以使用HttpClient調用它。 –

回答

1

我無法用幾句話告訴你所有的過程。 YouTube已經在文檔Look here. .Net video upload

可以retreive視頻文件一個很好的例子在CONTROLER通過:

[HttpPost] 
public IHttpActionResult PostVideo(HttpPostedFileBase file){ 
    //here convert to streame described in docs, and send request to youtube. 
} 
0
using System; 
using System.IO; 
using System.Reflection; 
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 YouTube 
{ 
    internal class UploadVideo 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      Console.WriteLine("YouTube Data API: Upload Video"); 
      Console.WriteLine("=============================="); 

      try 
      { 
       new UploadVideo().Run().Wait(); 
      } 
      catch (AggregateException ex) 
      { 
       foreach (var e in ex.InnerExceptions) 
       { 
        Console.WriteLine("Error: " + e.Message); 
       } 
      } 

      Console.WriteLine("Press any key to continue..."); 
      Console.ReadKey(); 
     } 


     private async Task Run() 
     { 
      UserCredential credential; 
      using (var stream = new FileStream("client_secrets.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 }, 
        "user", 
        CancellationToken.None 
       ); 
      } 

      var youtubeService = new YouTubeService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "Youtube Uploader" // 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 = "UCycmrK4RRMNY6CTn58r6gNA"; // See https://developers.google.com/youtube/v3/docs/videoCategories/list 
      video.Status = new VideoStatus(); 
      video.Status.PrivacyStatus = "public"; // or "private" or "public" 
      var filePath = @"D:\1.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(); 
      } 
     } 

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

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