Статус загрузки видео в Vimeo

#vimeo #vimeo-api #vimeo-android

#vimeo #vimeo-api #vimeo-android

Вопрос:

Я загружаю видео в Vimeo с помощью своего приложения, но некоторые из моих статусов видео не обновляются Скриншот видео на веб-сайте 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:

Трудно проверить ваш код без надлежащей отладки.

Вот обходной путь для вашего кода с добавлением немного дополнительных функций

Вы можете проверить код здесь