Как получить доступ к кодам состояния MediaMetadataRetriever.setDataSource(...)?
Я получаю следующую ошибку java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
и я хотел бы знать, что это за статус. Я использую функцию MediaMetaDataRetriever.setDataSource(String filePath)
7 ответов
Это было очень хорошо похоронено, но я нашел источник. Вот ссылка на коды ошибок
Это сборка из ICS, и я не уверен, где она находится в текущей сборке.
Моя ошибка была не поддерживаемой, когда я использовал midi-файл.
Источник:
/*
* 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_
Я получил эту ошибку java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
когда пытался позвонить void setDataSource(String path)
на пустом файле. (0 байт)
Вы должны быть на 100% уверены, что путь к файлу не нулевой, не пустой, сам файл существует и действителен.
У меня не было пустого файла или каких-либо других ошибок в моем коде. Файлы, которые я пытался использовать, были в порядке. Я точно не знаю почему, но у меня это сработало, когда я просто использовал другую перегрузкуsetDataSource
.
Те, которые я использовал для создания этого исключения, были MediaMetadataRetriever.setDataSource(String)
а также MediaMetadataRetriever.setDataSource(String, HashMap)
Тот, который просто работал, был MediaMetadataRetriever.setDataSource(Context, URI)
.
Я получил эту ошибку: setDataSource failed: status = 0xFFFFFFEA
потому что файл не существует на моем устройстве.
Я встретил этот вопрос, когда попытался использовать mp3-файл размером 0 КБ, я решил его после удаления этого файла. Может быть, вы можете поймать это исключение.
Просто добавьте эту ссылку, чтобы узнать больше о кодах ошибок: https://kdave.github.io/errno.h/
При поиске FFEA он сообщает, что 0xFFFFFFEA является десятичным значением 22, как сказал @AndrewOrobator , ошибка - недопустимый аргумент EINVAL .
Я улавливаю эту ошибку, когда мой аудиофайл был разбит, он решается, когда я меняю файл, вы можете попробовать вручную установить пути к различным источникам