【发布时间】:2023-03-12 06:31:02
【问题描述】:
我正在使用 .NET 创建一个视频上传应用程序。虽然是 与 YouTube 通信并上传文件、处理 该文件失败。 YouTube 给了我错误信息,“上传失败 (无法转换视频文件)。”这应该意味着“你的 视频采用我们的转换器无法识别的格式..."
我尝试了两个不同的视频,都上传了 当我手动进行操作时处理正常。所以我怀疑我的代码是 a.) 未正确编码视频和/或 b.) 未发送我的 API 正确请求。
以下是我如何构建我的 API PUT 请求和编码 视频:
任何关于错误可能是什么的建议将不胜感激。
谢谢
附:我没有使用客户端库,因为我的应用程序将使用 可恢复上传功能。因此,我正在手动构建我的 API 请求。
代码:
// new PUT request for sending video
WebRequest putRequest = WebRequest.Create(uploadURL);
// set properties
putRequest.Method = "PUT";
putRequest.ContentType = getMIME(file); //the MIME type of the uploaded video file
//encode video
byte[] videoInBytes = encodeVideo(file);
public static byte[] encodeVideo(string video)
{
try
{
byte[] fileInBytes = File.ReadAllBytes(video);
Console.WriteLine("\nSize of byte array containing " + video + ": " + fileInBytes.Length);
return fileInBytes;
}
catch (Exception e)
{
Console.WriteLine("\nException: " + e.Message + "\nReturning an empty byte array");
byte [] empty = new byte[0];
return empty;
}
}//encodeVideo
//encode custom headers in a byte array
byte[] PUTbytes = encode(putRequest.Headers.ToString());
public static byte[] encode(string headers)
{
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] bytes = encoding.GetBytes(headers);
return bytes;
}//encode
//entire request contains headers + binary video data
putRequest.ContentLength = PUTbytes.Length + videoInBytes.Length;
//send request - correct?
sendRequest(putRequest, PUTbytes);
sendRequest(putRequest, videoInBytes);
public static void sendRequest(WebRequest request, byte[] encoding)
{
Stream stream = request.GetRequestStream(); // The GetRequestStream method returns a stream to use to send data for the HttpWebRequest.
try
{
stream.Write(encoding, 0, encoding.Length);
}
catch (Exception e)
{
Console.WriteLine("\nException writing stream: " + e.Message);
}
}//sendRequest
【问题讨论】:
-
请不要在标题中重复“.NET”之类的标签。将它们留在它们所属的标签中。
标签: .net video encoding youtube youtube-api