Как получить доступ к кодам состояния MediaMetadataRetriever.setDataSource()?

Я получаю следующую ошибку java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA, и я хотел бы знать, что это за статус. Я использую функцию MediaMetaDataRetriever.setDataSource(String filePath)


person Andrew Orobator    schedule 09.01.2014    source источник


Ответы (6)


Я получил эту ошибку java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA при попытке вызвать void setDataSource(String path) для пустого файла. (0 байт)

Вы должны быть на 100% уверены, что путь к файлу не нулевой, не пустой, сам файл существует и действителен.

person Kirill Karmazin    schedule 05.06.2017
comment
@ user25, может быть, это неверный или неузнаваемый формат? Не могли бы вы указать, какой файл вызывает такую ​​​​ошибку? (тип, расширение, размер, может быть, залить куда-нибудь?) - person Kirill Karmazin; 17.11.2018

Он был очень хорошо закопан, но я нашел источник. Вот ссылка на коды ошибок

Это сборка от ICS, и я не уверен, где она находится в текущей сборке.

Моя ошибка была неподдерживаемой ошибкой, когда я использовал миди-файл.

Источник:

/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef MEDIA_ERRORS_H_

#define MEDIA_ERRORS_H_

#include <utils/Errors.h>

namespace android {

enum {
    MEDIA_ERROR_BASE        = -1000,

    ERROR_ALREADY_CONNECTED = MEDIA_ERROR_BASE,
    ERROR_NOT_CONNECTED     = MEDIA_ERROR_BASE - 1,
    ERROR_UNKNOWN_HOST      = MEDIA_ERROR_BASE - 2,
    ERROR_CANNOT_CONNECT    = MEDIA_ERROR_BASE - 3,
    ERROR_IO                = MEDIA_ERROR_BASE - 4,
    ERROR_CONNECTION_LOST   = MEDIA_ERROR_BASE - 5,
    ERROR_MALFORMED         = MEDIA_ERROR_BASE - 7,
    ERROR_OUT_OF_RANGE      = MEDIA_ERROR_BASE - 8,
    ERROR_BUFFER_TOO_SMALL  = MEDIA_ERROR_BASE - 9,
    ERROR_UNSUPPORTED       = MEDIA_ERROR_BASE - 10,
    ERROR_END_OF_STREAM     = MEDIA_ERROR_BASE - 11,

    // Not technically an error.
    INFO_FORMAT_CHANGED    = MEDIA_ERROR_BASE - 12,
    INFO_DISCONTINUITY     = MEDIA_ERROR_BASE - 13,

    // The following constant values should be in sync with
    // drm/drm_framework_common.h
    DRM_ERROR_BASE = -2000,

    ERROR_DRM_UNKNOWN                       = DRM_ERROR_BASE,
    ERROR_DRM_NO_LICENSE                    = DRM_ERROR_BASE - 1,
    ERROR_DRM_LICENSE_EXPIRED               = DRM_ERROR_BASE - 2,
    ERROR_DRM_SESSION_NOT_OPENED            = DRM_ERROR_BASE - 3,
    ERROR_DRM_DECRYPT_UNIT_NOT_INITIALIZED  = DRM_ERROR_BASE - 4,
    ERROR_DRM_DECRYPT                       = DRM_ERROR_BASE - 5,
    ERROR_DRM_CANNOT_HANDLE                 = DRM_ERROR_BASE - 6,
    ERROR_DRM_TAMPER_DETECTED               = DRM_ERROR_BASE - 7,

    // Heartbeat Error Codes
    HEARTBEAT_ERROR_BASE = -3000,

    ERROR_HEARTBEAT_AUTHENTICATION_FAILURE                  = HEARTBEAT_ERROR_BASE,
    ERROR_HEARTBEAT_NO_ACTIVE_PURCHASE_AGREEMENT            = HEARTBEAT_ERROR_BASE - 1,
    ERROR_HEARTBEAT_CONCURRENT_PLAYBACK                     = HEARTBEAT_ERROR_BASE - 2,
    ERROR_HEARTBEAT_UNUSUAL_ACTIVITY                        = HEARTBEAT_ERROR_BASE - 3,
    ERROR_HEARTBEAT_STREAMING_UNAVAILABLE                   = HEARTBEAT_ERROR_BASE - 4,
    ERROR_HEARTBEAT_CANNOT_ACTIVATE_RENTAL                  = HEARTBEAT_ERROR_BASE - 5,
    ERROR_HEARTBEAT_TERMINATE_REQUESTED                     = HEARTBEAT_ERROR_BASE - 6,
};

}  // namespace android

#endif  // MEDIA_ERRORS_H_
person Andrew Orobator    schedule 09.01.2014

У меня не было пустого файла или каких-либо других упомянутых здесь ошибок в моем коде. Файлы, которые я пытался использовать, были в порядке. Я точно не знаю почему, но у меня это сработало, когда я просто использовал другую перегрузку setDataSource.

Те, которые я использовал, которые вызвали это исключение, были MediaMetadataRetriever.setDataSource(String) и MediaMetadataRetriever.setDataSource(String, HashMap)

Тот, который просто работал, был MediaMetadataRetriever.setDataSource(Context, URI).

person Benjamin Basmaci    schedule 28.08.2019
comment
Это сработало и для меня! Ты спас мой день, Бенджамин. - person Dhaval Patel; 15.03.2021

Я получил эту ошибку: setDataSource failed: status = 0xFFFFFFEA, потому что файл не существует на моем устройстве.

person Samuel Thompson    schedule 04.02.2017

Я ловлю эту ошибку, когда мой аудиофайл был сломан, она решается, когда я меняю файл, вы можете попробовать вручную установить разные пути к источникам

person Warrocker    schedule 19.10.2016

Я столкнулся с этим вопросом, когда пытался использовать mp3-файл размером 0 КБ, я решил его после того, как удалил этот файл. Возможно, вы сможете поймать это исключение.

person Rickon Gao    schedule 23.09.2019