对于我正在开发的应用程序,我需要知道某些YouTube视频的持续时间。我正在使用 YouTube API V3 的 .NET 库。
请求 FileDetails 的 durationMs 属性适用于某些视频,但对于其他视频(全部完全处理)返回"null"。该视频均未列出,并且应该保持不变,因此我宁愿不透露导致问题的视频的ID。
这个问题的原因可能是什么?我没有从 API 收到任何错误,并且我确实得到了容器 (MOV),但持续时间等属性都是空的。
我已经包含了相关的代码片段。
var videosListRequest = youtube.Videos.List("processingDetails,FileDetails");
videosListRequest.Id = file.FileName;
videosListRequest.OauthToken = Authresult.Result.Credential.Token.AccessToken;
VideoListResponse vlr = videosListRequest.Execute();
if (vlr.Items.Count > 0 && vlr.Items[0].ProcessingDetails.ProcessingStatus == "succeeded")
{
file.IsVideoProcessed = true;
int durationInS = (int)(vlr.Items[0].FileDetails.DurationMs / 1000.0);
UpdateVideoStatus(file.Id, ClientId.Value, MediaStatus.READY, durationInS);
}
我认为你应该使用part=contentDetails
而不是fileDetails。
从这个SO问题中,可以清楚地说明part=contentDetails
包含持续时间。
以下是使用 part=contentDetails 的示例请求
https://www.googleapis.com/youtube/v3/videos?id=9bZkp7q19f0&part=contentDetails&key={YOUR_API_KEY}
有关详细信息,请查看此文档和此相关的 SO 问题。