api-поток "audio / mpeg" для некоторых файлов проигрывает некоторые файлы? - PullRequest
0 голосов
/ 12 октября 2018

Мы записываем некоторые аудиофайлы на телефонах Android, которые имеют следующий формат согласно информации vlc:

Codec: MPEG AAC Audio (mp4a)
Language: English
Type: Audio
Channels: Stereo
Sample rate: 32000 Hz
Bits per sample: 32

Указанные выше файлы не воспроизводились в браузере Safari с типом mime audio/mpeg, но каккак только мы изменили MIME на audio/mp4, он начал играть в браузере Safari.Для Android мы используем API для потоковой передачи этого файла с использованием API-ресурса следующим образом:

@GET
    @UnitOfWork
    @Produces("audio/mpeg")
    @Path("/getaudiofile/{fileId}")
    public Response getPart(@Auth AuthUser authUser, @PathParam("fileId") Long fileId) {

 File audioFile = new File(filesTableDAO.getFilePathById(fileId));

if(audioFile.exists()) {
return Response.ok().entity(audioFile).build();
} else {
// ... Return 404 here
}

}

Но при использовании вышеуказанного API некоторые файлы воспроизводятся, а некоторые нет, как в случае с Safari ранее.Но проблема с сафари исчезла как можно скорее, мы изменили MIME на "audio/mp4" или "video/mp4", оба типа MIME работают.

Но для API /getaudiofile/{fileId} ни один из следующих типов MIME не работал с аннотацией javax.ws.rs @Produces:

    audio/mp4
    video/mp4
    audio/mpeg
    audio/m4a
    audio/mpeg-4
audio/mp4a

Но при audio/mpeg некоторые файлы воспроизводятся, а некоторые - нет.

Какой может быть правильный тип MIME или может ли файл сам установить кодек или информацию MIME при возвратеиз API?

Или есть ли способ сделать Android Media Player MIME-тип осведомленным?Как html tag .

Мы передали потоковое содержимое файла mime "audio / mpeg", медиаплеер легко воспроизводит файлы меньшего размера.Но больше потокового контента не воспроизводится, например, 10 - 20 МБ.

Проблема с потоковым URL-адресом, у плеера нет расширения mime, например, mp3 или mp4.Поэтому мы хотим, чтобы медиаплеер заранее знал, какой тип контента передается в потоковом режиме.

Поддерживает ли MediaPlayer API установку типа mime для экземпляра плеера перед воспроизведением?

Обновление

1] Это происходит для файлов с большими размерами, небольшие файлы воспроизводятся очень хорошо, запись нескольких секунд (1-50 секунд) воспроизводится без проблем, запись файлас продолжительностью воспроизведения более минуты не удается воспроизвести.

2] При воспроизведении с аутентифицированным URL воспроизведение не удается, если тот же файл находится в локальной файловой системе, воспроизводится безупречно.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

https://github.com/aruld/jersey-streaming

Вышеупомянутый проект Арул Dhesiaseelan решил мою проблему, способ, которым я написал, получить файл Ресурс был неэффективным, В вышеупомянутом проекте GitHub посмотрите MediaResource.java .

Это правильный способ потоковой передачи мультимедийных файлов. Настройте mime-типы в соответствии с вашим файлом.

Я установил заголовки для медиаплеера следующим образом:

Map<String, String> headers = new HashMap<>();
            headers.put("Authorization", "Basic <BASE64_ENCODED_AUTH_TOKEN>");
            headers.put("Accept-Ranges", "bytes");
            headers.put("Status", "206");
            headers.put("Cache-control", "no-cache");

            Uri uri = Uri.parse(url);
            mediaPlayer.setDataSource(getContext(), uri, headers);

Теперь я могу транслировать медиа с аутентификацией.

0 голосов
/ 22 октября 2018

Если я правильно понимаю ваш вопрос, возможно, вы можете попробовать

openTypedAssetFile

public AssetFileDescriptor openTypedAssetFile (Uri uri, StringmimeTypeFilter, Bundle opts)

Вызывается клиентом, чтобы открыть поток только для чтения, содержащий данные определенного типа MIME.Это похоже на openAssetFile (Uri, String), за исключением того, что файл может быть доступен только для чтения, и поставщик контента может выполнять преобразования данных для генерации данных нужного типа.

Документация для openTypedAssetFile is здесь .

Также посмотрите API для openWTypedAssetFileDescriptor здесь .

...