Używam .NET do tworzenia aplikacji do przesyłania wideo. Chociaż jest to komunikacja z YouTube i przesyłanie pliku, przetwarzanie tego pliku kończy się niepowodzeniem. YouTube wyświetla mi komunikat o błędzie: "Przesyłanie nie powiodło się (nie można przekonwertować pliku wideo)." To oznacza, że rzekomo „Twój film jest w formacie, który nasze konwertery nie rozpoznać ...”youtube - błąd przesyłania wideo - nie można przekonwertować pliku - kodowanie wideo jest nieprawidłowe?
Zrobiłem próby z dwóch różnych filmów, z których oba przesyłać i przetwarzania grzywny, kiedy to zrobić ręcznie . Podejrzewam, że mój kod to a.) Nie kodowanie wideo prawidłowo i/lub b.) Nie wysyłanie poprawnie żądania API .
Poniżej jest jak ja konstruowania moją prośbę API PUT i kodowania wideo :
Wszelkie sugestie na temat tego, co może być błąd byłyby mile widziane.
Dzięki
P.S. Nie używam biblioteki klienta, ponieważ moja aplikacja będzie korzystać z funkcji wznawiania przesyłania. W związku z tym ręcznie buduję żądania API .
Dokumentacja: http://code.google.com/intl/ja/apis/youtube/2.0/developers_guide_protocol_resumable_uploads.html#Uploading_the_Video_File
Kod:
// 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
Proszę nie powtarzać w tytule tagów takich jak ".NET". Pozostaw je w tagach, do których należą. –