3

我想制作一个 WPF 应用程序,从我的网络摄像机获取视频并将其实时发送到我的 youtube 频道。我环顾了所有网站,但没有示例如何使用 c# 将视频直播到 Youtube。google 的网站上有一些示例,但它们是用 PHP、Java 和 Phyton 编写的,但我不知道这种编程语言,所以我无法使用 API。

我试着写了一点,但是没有用。这是我通过 Java 示例编写的代码。

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
          new ClientSecrets { ClientId = "MyClientId", ClientSecret = "MyClientSecret" },
          new[] { DriveService.Scope.Drive,
            DriveService.Scope.DriveFile },
          "My Youtube Channel Name",
          CancellationToken.None,
          new FileDataStore("Drive.Auth.Store")).Result;

        string devkey = "AIzaSyCbxm6g9orAw9PF3MkzTb_0PGbpD3Xo1Qg";
        string username = "MyYoutubeChannelEmailAdress";
        string password = "MyPassword";

        YouTubeRequestSettings youtubereqsetting = new YouTubeRequestSettings("API Project", devkey, username, password);

        YouTubeRequest youtubereq = new YouTubeRequest(youtubereqsetting);

        LiveBroadcastSnippet broadcastSnippet = new LiveBroadcastSnippet();

        broadcastSnippet.Title = "Test Live Stream";
        broadcastSnippet.ScheduledStartTime = new DateTime(2015, 3, 12, 19, 00, 00);
        broadcastSnippet.ScheduledEndTime = new DateTime(2015, 3, 12, 20, 00, 00);


        LiveBroadcastStatus status = new LiveBroadcastStatus();
        status.PrivacyStatus = "Private";

        LiveBroadcast broadcast = new LiveBroadcast();

        broadcast.Kind = "youtube#liveBroadcast";
        broadcast.Snippet = broadcastSnippet;
        broadcast.Status = status;

        Google.Apis.YouTube.v3.LiveBroadcastsResource.InsertRequest liveBroadcastInsert = new Google.Apis.YouTube.v3.LiveBroadcastsResource.InsertRequest(service, broadcast, "");            
        LiveBroadcast returnLiveBroadcast = liveBroadcastInsert.Execute();

请帮我!?!?!?

4

2 回答 2

4

这是我设法使它工作的方法:

  1. 创建应用 - Google 开发者控制台
  2. 在您的应用上启用 API - Youtube Data API v3
  3. 创建 OAuth 客户端 ID -创建 OAuth 凭据
  4. 应用类型必须设置为其他
  5. 将您的客户 ID 和客户密码复制到安全位置。
  6. 访问以下 URL(您应该使用将直播直播的 Google 帐户登录):

https://accounts.google.com/o/oauth2/auth?client_id= CLIENT_ID &scope= https://gdata.youtube.com&response_type=code&access_type=offline&redirect_uri=urn:ietf:wg:oauth:2.0:oob

使用在步骤 3中生成的客户端 ID更改CLIENT_ID

  1. 从页面上的输入文本框中复制生成的令牌。
  2. 使用某些工具(cURL、wget、Google Chrome 的 Postman 插件等)向以下 URL 发出 POST 请求:

    https://accounts.google.com/o/oauth2/token

    使用以下字段对这个 url 进行HTTP POST x-www-form-urlencoded:(仅更改 client_id、client_token 和代码,第 2 个保持原样)。

    {
        grant_type=authorization_code,
        redirect_uri=urn:ietf:wg:oauth2.0:oob,
        代码=token_from_step_6_&_7
        client_id=your_client_id,
        client_secret=your_client_secret,
    }
    
  3. 如果直到这里一切看起来都很好,你应该得到这样的回应:

    {
    "access_token" : "令牌在接下来的几分钟内有效。我们不想要这个",
    "token_type" : "承载者",
    “expires_in”:3600,
    "refresh_token" : "令牌对离线应用有效。复制这个,然后存储它"
    }
    
  4. 现在,我们拥有了所有需要的身份验证数据(client_id、client_secret、refresh_token),是时候使用 API 了。
        public String CreateLiveBroadcastEvent(String eventTitle, DateTime eventStartDate)
       {
            ClientSecrets 机密 = 新 ClientSecrets()
            {
                ClientId = CLIENT_ID,
                ClientSecret = CLIENT_SECRET
            };
            var token = new TokenResponse { RefreshToken = REFRESH_TOKEN };
            var 凭据 = 新 UserCredential(新 GoogleAuthorizationCodeFlow(
            新的 GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = secrets }),
            “用户”,令牌);
            var service = new YouTubeService(new BaseClientService.Initializer
            {
                HttpClientInitializer = 凭据,
                ApplicationName = "你的应用名称"
            });
            var broadcast = 新的 LiveBroadcast
            {
                种类 = "youtube#liveBroadcast",
                Snippet = 新的 LiveBroadcastSnippet
                {
                    标题 = 事件标题,
                    ScheduledStartTime = eventStartDate
                },
                状态 = 新的 LiveBroadcastStatus { PrivacyStatus = "public" }
            };
            var request = service.LiveBroadcasts.Insert(broadcast, "id,snippet,status");
            var response = request.Execute();
            返回响应.Id;
        }
    
于 2016-05-06T02:38:07.910 回答
1

当我看到用户名并通过时,您似乎正在尝试使用 ClientLogin。而是使用 OAuth2 并使用这些示例作为指导

于 2015-03-18T23:09:35.557 回答