#vimeo #vimeo-api #vimeo-android
#vimeo #vimeo-api #vimeo-android
Вопрос:
Я загружаю видео в Vimeo с помощью своего приложения, но некоторые из моих статусов видео не обновляются
Я следил за документом api, представленным по этой ссылке: https://developer.vimeo.com/api/upload/videos:
Я использую приведенный ниже код:
public boolean sendVideo(String file1, String completeURi, String endpoint, String id) throws FileNotFoundException, IOException {
File file = new File(file1);
long contentLength = file.length();
String contentLengthString = Long.toString(contentLength);
FileInputStream is = new FileInputStream(file);
int bufferSize = 20485760;
byte[] bytesPortion = new byte[bufferSize];
int byteNumber = 0;
while (is.read(bytesPortion, 0, bufferSize) != -1) {
String contentRange = Integer.toString(byteNumber);
boolean success = false;
int bytesOnServer = 0;
while (!success) {
long bytesLeft = contentLength - (bytesOnServer);
System.out.println(newline newline "Bytes Left: " bytesLeft);
if (bytesLeft < bufferSize) {
//copy the bytesPortion array into a smaller array containing only the remaining bytes
bytesPortion = Arrays.copyOf(bytesPortion, (int) bytesLeft);
//This just makes it so it doesn't throw an IndexOutOfBounds exception on the next while iteration. It shouldn't get past another iteration
bufferSize = (int) bytesLeft;
}
bytesOnServer = sendVideoBytes("Vimeo Video upload", endpoint, contentLengthString, "video/mp4", contentRange, bytesPortion, first,isuploaded);
AppLog.e("bytesOnServer", "===contentLength===" bytesOnServer "amp;amp;==" contentLengthString);
if (bytesOnServer >= Integer.parseInt(contentLengthString)) {
System.out.println("Success is true!");
return true;
} else {
contentRange = (bytesOnServer 1) "-" (Integer.parseInt(contentLengthString)) "/" (Integer.parseInt(contentLengthString));
System.out.println(bytesOnServer " != " contentLength);
System.out.println("Success is not true!" contentRange);
success=false;
first = true;
}
}
}
return true;
}
/**
* Sends the given bytes to the given endpoint
*
* @return the last byte on the server (from verifyUpload(endpoint))
*/
private static int sendVideoBytes(String videoTitle, String endpoint, String contentLength, String fileType, String contentRange, byte[] fileBytes, boolean addContentRange,boolean isuploaded) throws FileNotFoundException, IOException {
OAuthRequest request = new OAuthRequest(Verb.PUT, endpoint);
request.addHeader("Content-Length", contentLength);
request.addHeader("Content-Type", fileType);
if (addContentRange) {
request.addHeader("Content-Range", "bytes " contentRange);
}
request.addPayload(fileBytes);
Response response = signAndSendToVimeo(request, "sendVideo with file bytes " videoTitle, false);
if (response.getCode() != 200 amp;amp; !response.isSuccessful()) {
return -1;
}
return verifyUpload(endpoint, contentLength, contentRange,isuploaded);
}
/**
* Verifies the upload and returns whether it's successful
*
* @param
* @param contentLength
* @param endpoint to verify upload to @return the last byte on the server
*/
public static int verifyUpload(String endpoint, String contentLength, String contentRange,boolean isuploaded) {
// Verify the upload
OAuthRequest request = new OAuthRequest(Verb.PUT, endpoint);
request.addHeader("Content-Length", "0");
request.addHeader("Content-Range", "bytes */*");
Response response = signAndSendToVimeo(request, "verifyUpload to " endpoint, true);
AppLog.e("verifyUpload", "" response.getCode());
if (response.getCode() != 308 || !response.isSuccessful()) {
return -1;
}
String range = response.getHeader("Range");
AppLog.e("After verify","==range header contains" Integer.parseInt(range.substring(range.lastIndexOf("-") 1)));
//range = "bytes=0-10485759"
return Integer.parseInt(range.substring(range.lastIndexOf("-") 1)); // 1 remove
//return Integer.parseInt(range.substring(range.lastIndexOf("-") 1)) 1;
//The 1 at the end is because Vimeo gives you 0-whatever byte where 0 = the first byte
}
public static Response signAndSendToVimeo(OAuthRequest request, String description, boolean printBody) throws org.scribe.exceptions.OAuthException {
String newline = "n";
System.out.println(newline newline
"Signing " description " request:"
((printBody amp;amp; !request.getBodyContents().isEmpty()) ? newline "tBody Contents:" request.getBodyContents() : "")
((!request.getHeaders().isEmpty()) ? newline "tHeaders: " request.getHeaders() : ""));
service.signRequest(OAuthConstants.EMPTY_TOKEN, request);
Response response = request.send();
// AppLog.e("Uplaod Video aftre Response", "" response.getCode());
return response;
}
Кто-нибудь может помочь с рабочим кодом для Android??
Заранее спасибо!!
Комментарии:
1. Можете ли вы предоставить более подробную информацию о том, что вы делаете, и поделиться соответствующим кодом загрузки?
2. Привет, Кевин, спасибо за ответ, я не могу вставить сюда весь код. Можете ли вы предоставить свой контактный адрес электронной почты, если это возможно?? Мне нужна поддержка, пожалуйста, помогите!!!!!
3. Нэнси, ты должна иметь возможность опубликовать его в своем исходном вопросе, отредактировав его. Если вы не можете этого сделать, я предлагаю другой способ его загрузки, например, на GitHub (возможно, gist).
4. Хорошо, Кевин, я обновил свой вопрос.
5. На первый взгляд кажется, что этот код следует правильному потоку, но я с ним не работал. Вы потратили время на его отладку? Получаете ли вы ответы на каждый сетевой запрос, и если нет, какой запрос для вас не выполняется?
Ответ №1:
Недавно у меня была такая же проблема с vimeo. API возвращает состояние VIMUploadState_Succeeded для процесса загрузки, но если вы попытаетесь просмотреть видео на vimeo.com он застрял в состоянии загрузки и показывает черный экран в приложении, когда вы пытаетесь воспроизвести видео.
Я получил следующие ответы от их службы поддержки:
Похоже, что это конкретное видео не перешло из состояния загруженного в состояние сбоя.
Извините, но видео, представленные по этим ссылкам, так и не завершили загрузку и потеряны. Их необходимо будет повторно загрузить.
На нашей платформе каждый день загружается несколько видеороликов, и, похоже, у нее нет шаблона, позволяющего определить, когда возникнет эта проблема с загрузкой. Если для вас не проблема повторно загрузить видео, vimeo может быть хорошим решением, поскольку его цена действительно хороша по сравнению с другими видеоплатформами, в противном случае вам следует поискать другое решение для хранения / воспроизведения видео.
Ответ №2:
Трудно проверить ваш код без надлежащей отладки.
Вот обходной путь для вашего кода с добавлением немного дополнительных функций
Вы можете проверить код здесь