- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将字幕添加到上传到我公司的youtube channel 的视频时遇到问题。我想用.Net中的Google的Youtube Api v3做到这一点。我能够成功将视频上传到 channel ,但是在尝试发送字幕时出现以下错误:
“System.Net.Http.HttpRequestException:响应状态代码不指示成功:403(禁止)。”
据我所知,我的凭据不会禁止我上传字幕。我可以顺利上传视频。
我使用以下说明创建了刷新 token :
Youtube API single-user scenario with OAuth (uploading videos)
这是我用来创建YouTubeService对象的代码:
private YouTubeService GetYouTubeService()
{
string clientId = "clientId";
string clientSecret = "clientSecret";
string refreshToken = "refreshToken";
try
{
ClientSecrets secrets = new ClientSecrets()
{
ClientId = clientId,
ClientSecret = clientSecret
};
var token = new TokenResponse { RefreshToken = refreshToken };
var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = secrets,
Scopes = new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubeUpload, YouTubeService.Scope.YoutubeForceSsl }
}),
"user",
token);
var service = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "TestProject"
});
service.HttpClient.Timeout = TimeSpan.FromSeconds(360);
return service;
}
catch (Exception ex)
{
Log.Error("YouTube.GetYouTubeService() => Could not get youtube service. Ex: " + ex);
return null;
}
}
private void UploadCaptionFile(String videoId)
{
try
{
Caption caption = new Caption();
caption.Snippet = new CaptionSnippet();
caption.Snippet.Name = videoId + "_Caption";
caption.Snippet.Language = "en";
caption.Snippet.VideoId = videoId;
caption.Snippet.IsDraft = false;
WebRequest req = WebRequest.Create(_urlCaptionPath);
using (Stream stream = req.GetResponse().GetResponseStream())
{
CaptionsResource.InsertMediaUpload captionInsertRequest = _youtubeService.Captions.Insert(caption, "snippet", stream, "*/*");
captionInsertRequest.Sync = true;
captionInsertRequest.ProgressChanged += captionInsertRequest_ProgressChanged;
captionInsertRequest.ResponseReceived += captionInsertRequest_ResponseReceived;
IUploadProgress result = captionInsertRequest.Upload();
}
}
catch (Exception ex)
{
Log.Error("YouTube.UploadCaptionFile() => Unable to upload caption file. Ex: " + ex);
}
}
void captionInsertRequest_ResponseReceived(Caption obj)
{
Log.Info("YouTube.captionInsertRequest_ResponseReceived() => Caption ID " + obj.Id + " was successfully uploaded for this clip.");
Utility.UpdateClip(_videoClip);
}
void captionInsertRequest_ProgressChanged(IUploadProgress obj)
{
switch (obj.Status)
{
case UploadStatus.Uploading:
Console.WriteLine("{0} bytes sent.", obj.BytesSent);
break;
case UploadStatus.Failed:
Log.Error("YouTube.UploadCaptionFile() => An error prevented the upload from completing. " + obj.Exception);
break;
}
}
public string UploadClipToYouTube()
{
try
{
var video = new Google.Apis.YouTube.v3.Data.Video();
video.Snippet = new VideoSnippet();
video.Snippet.Title = _videoClip.Name;
video.Snippet.Description = _videoClip.Description;
video.Snippet.Tags = GenerateTags();
video.Snippet.DefaultAudioLanguage = "en";
video.Snippet.DefaultLanguage = "en";
video.Snippet.CategoryId = "22";
video.Status = new VideoStatus();
video.Status.PrivacyStatus = "unlisted";
WebRequest req = WebRequest.Create(_videoPath);
using (Stream stream = req.GetResponse().GetResponseStream())
{
VideosResource.InsertMediaUpload insertRequest = _youtubeService.Videos.Insert(video, "snippet, status", stream, "video/*");
insertRequest.ProgressChanged += videosInsertRequest_ProgressChanged;
insertRequest.ResponseReceived += videosInsertRequest_ResponseReceived;
insertRequest.Upload();
}
return UploadedVideoId;
}
catch (Exception ex)
{
Log.Error("YouTube.UploadClipToYoutube() => Error attempting to authenticate for YouTube. Ex: " + ex);
return "";
}
}
void videosInsertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress)
{
switch (progress.Status)
{
case UploadStatus.Uploading:
Log.Info("YouTube.videosInsertRequest_ProgressChanged() => Uploading to Youtube. " + progress.BytesSent + " bytes sent.");
break;
case UploadStatus.Failed:
Log.Error("YouTube.videosInsertRequest_ProgressChanged() => An error prevented the upload from completing. Exception: " + progress.Exception);
break;
}
}
void videosInsertRequest_ResponseReceived(Google.Apis.YouTube.v3.Data.Video video)
{
Log.Info("YouTube.videosInsertRequest_ResponseReceived() => Video was successfully uploaded to YouTube. The YouTube id is " + video.Id);
UploadedVideoId = video.Id;
UploadCaptionFile(video.Id);
}
最佳答案
好了,我为您提供了从Java
转换过来的非常快的内容(诚实地大约15分钟)。首先,您当前的代码中我注意到了很多东西,但这不是 CodeReview 。
The YouTubeApi v3 doesn't have much information on adding captions. All I was able to find was some old information for v2
private async Task addVideoCaption(string videoID) //pass your video id here..
{
UserCredential credential;
//you should go out and get a json file that keeps your information... You can get that from the developers console...
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeForceSsl, YouTubeService.Scope.Youtube, YouTubeService.Scope.Youtubepartner },
"ACCOUNT NAME HERE",
CancellationToken.None,
new FileDataStore(this.GetType().ToString())
);
}
//creates the service...
var youtubeService = new Google.Apis.YouTube.v3.YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = this.GetType().ToString(),
});
//create a CaptionSnippet object...
CaptionSnippet capSnippet = new CaptionSnippet();
capSnippet.Language = "en";
capSnippet.Name = videoID + "_Caption";
capSnippet.VideoId = videoID;
capSnippet.IsDraft = false;
//create new caption object
Caption caption = new Caption();
//set the completed snippet to the object now...
caption.Snippet = capSnippet;
//here we read our .srt which contains our subtitles/captions...
using (var fileStream = new FileStream("filepathhere", FileMode.Open))
{
//create the request now and insert our params...
var captionRequest = youtubeService.Captions.Insert(caption, "snippet",fileStream,"application/atom+xml");
//finally upload the request... and wait.
await captionRequest.UploadAsync();
}
}
.srt
文件示例。
1
00:00:00,599 --> 00:00:03,160
>> Caption Test zaggler@ StackOverflow
2
00:00:03,160 --> 00:00:05,770
>> If you're reading this it worked!
关于.net - 如何在.Net中使用YoutubeApi v3向YouTube视频添加字幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488440/
我正在学习WidgetMarqueeLabel课: #include "WidgetMarqueeLabel.h" #include #include WidgetMarqueeLabel::Wi
我需要使用 Graphviz DOT 打印大量图表。为了区分每个图对应的输入,我还希望每个图都有一个标题。有没有办法将它嵌入到图形的 DOT 表示中。 最佳答案 您可以使用 label为图表添加标题。
我用 jQuery 编写了一个简单的脚本,允许根据 .hover 触发器弹出和弹出标题。 问题是您必须将鼠标悬停在图像上,移回图像上,然后再次将鼠标悬停在图像上才能正常工作。 (你可以在这里明白我的意
我已经成功地将视频转换到 chromecast 现在我正在尝试添加对字幕的支持,这里我面临两个问题 当我使用 NanoHttpd 流式传输 vtt 文件时,chromecast 返回错误代码 2100
我想知道 HTML 选框是否允许在控件(或容器)的开头使用静态文本,以便当文本向左滑动时它会滑动传递文本? 例如。 我正在查看要静态对齐到左侧的日期,数据库中的文本将滑过它,然后从右侧重新出现。 HT
如何在ExoPlayer2上设置字幕?我试过这个 tu bild MergingMediaSource: SingleSampleMediaSource singleSampleSource
我正在使用 FFMPEG 使用如下命令刻录字幕: ffmpeg -i video.mp4 -vf "subtitles=subs.srt:force_style='Fontsize=24,Primar
我有一个输入文件,它基本上是一个 .ts 文件,其中包含 4 个 dvb 字幕流(嵌入其中)。我正在使用以下命令在输出视频中保留 dvb 字幕。 ffmpeg -i Input.ts -c:a cop
假设我想查找副标题中包含“法国总统选举”一词的视频列表。 我可以使用 YouTube API 做到这一点吗? 如果它甚至可以在人工生成和自动生成的字幕中搜索,那将是完美的。但是如果它可以搜索两种类型的
我正在尝试将 YouTube 视频嵌入 YouTube iframe。 视频有一个 yt:cc=on 标签,这意味着默认情况下会加载字幕。 (即使用户不想要,属性 cc_load_policy=1 也
我正在使用 ggplot2 来改进降水条形图。 这是我想要实现的可重现示例: library(ggplot2) library(gridExtra) secu <- seq(1, 16, by=2)
我正在尝试从外部 url 播放电影的字幕,但它不起作用,当我尝试添加本地存储的 vtt 文件时,它就起作用了。下面是代码 上面的代码不起作用。但是当我复制 vtt 的内容时它起作用了。 请
我有一个包含单元格的表格,其中只有在搜索了某些内容后才会出现副标题。这是 cellForRowAtIndexPath 的代码: - (UITableViewCell *)tableView:(UITa
不确定这是不是该问的地方,但我在其他地方运气不好,之前经常通过查看其他人在本网站上的问题和答案来设法找到问题的答案。 我最近安装了一个 WordPress 插件 (WP Subtitle),它允许我为
我正在使用 ActionBarSherlock 字幕并尝试使用样式更改字幕文本大小,但似乎不起作用。我对主题不太熟悉,所以..我该如何更改?? 提前致谢 最佳答案 @style/Widget
跑马灯动画不行,这是我做的。 它适用于第一个 TextView ,但不适用于第二个。我究竟做错了什么? 最佳答案 这对我
如何以编程方式获取正在播放的 YouTube 视频的字幕? 最初我尝试通过 YouTube API 离线进行, 但是 as it seems YouTube 禁止获取您不是所有者的视频的字幕。 现在我
由于 AVPlayer 渲染的隐藏式字幕有时会与其他 UI 组件重叠,我想在单独的 View 中渲染 cc。 我可以通过将 closedCaptionDisplayEnabled 设置为 NO 来关闭
这有点与 Does YouTube API forbid to download video captions if you are not it's owner? 重复的问题, Get YouTub
因此,我尝试使用默认的 chrome 发送器应用程序为 chromecast 设置隐藏式字幕,根据文档,这应该是可能的,as seen here 。我不明白为什么我的代码不起作用。它与提供的示例代码几
我是一名优秀的程序员,十分优秀!