Я пытаюсь запустить мультимедиа через Android MediaPlayer с некоторой ссылкой API (таким образом, не имеет .mp3 в конце URL) следующим образом:

Код Android:

headers.put("token", token_value);
myPlayer.setDataSource(
                    getApplicationContext(),
                    Uri.parse(url),//url : http://basedomain.com/api/getmp3
                    headers
            );

Код внутреннего кода:

$song_path = "abc.mp3";   
$path = storage_path().DIRECTORY_SEPARATOR."somefolder".DIRECTORY_SEPARATOR.$song_path;
$response = new BinaryFileResponse($path);
return $response;

Я получаю двоичный ответ от кода laravel (проверено почтальоном), однако код Android не воспроизводит музыку из ответа laravel.

Список вопросов для Android:

1) W / MediaPlayer: не удалось открыть http://basedomain.com/api/getmp3: java.io.FileNotFoundException: нет поставщика контента: http://basedomain.com/api/getmp3

2) E / MediaPlayer: ошибка (1, -2147483648)

0
Ankit Sagwekar 20 Авг 2018 в 23:05

3 ответа

Лучший ответ

Я наконец нашел причину этой проблемы. Мой бэкэнд-вызов laravel api был POST-запросом. Изменение того же самого запроса Get сработало для меня. Также изменение запроса с POST на GET не было проблемой, так как параметры моего запроса были отправлены через заголовок. (Это было сделано потому, что метод setDataSource для android mediaplayer принимает только заголовки, а не параметры тела).

Короче говоря, Android MediaPlayer ожидает, что мы будем использовать только запрос GET.

0
Ankit Sagwekar 8 Сен 2018 в 18:06

Попробуйте проверить свой код по URL-адресу известного общедоступного mp3-файла, чтобы убедиться в правильности кода MediaPlayer. Как только это сработает, вы можете сузить проблему до того, что токен будет установлен неправильно или ваш сервер не вернет mp3-файл правильно. Возможно, ответ не указывает, что это mp3-файл правильно, и, следовательно, медиаплеер не знает, как с этим справиться.

0
CodeSmith 20 Авг 2018 в 21:56

Я только что попробовал следующий код в Android Studio для Android SDK 28, и он отлично работает. Убедитесь, что ваш API действительно возвращает файл mp3.

Документы Android MediaPlayer

    try {
        MediaPlayer player = new MediaPlayer();
        player.setDataSource("https://yourdomain/yourmusic.mp3");
        player.prepare();
        player.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
0
max meijer 20 Авг 2018 в 20:24
51937818