Android играет сырой аудио со стороны C ++ - PullRequest
2 голосов
/ 22 февраля 2010

Мне нужно иметь возможность потоковой передачи аудио из пользовательского формата файлов на стороне C ++ системы Android. Я работаю над переносом пользовательского медиапроигрывателя и должен иметь возможность открывать пользовательский файл и воспроизводить из него аудиопоток. Это важно, так как я не думаю, что перенос всего проигрывателя на JAVA возможен с точки зрения производительности, а перемещение звуковых буферов через интерфейс JNI, я считаю, будет слишком медленным, чтобы поддерживать приемлемую частоту кадров. Я могу обрабатывать видео на стороне NDK через OpenGL ES, но с аудио я понятия не имею, как это сделать.

Ответы [ 2 ]

2 голосов
/ 10 сентября 2010

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

Просто примечание о реализации, не заставляйте Java создавать буфер каждый раз, когда вы хотите передать аудио, просто создайте буфер в Java (или через JNI) и затем memcpy в него каждый раз, когда вам нужно обновить .

Кроме того, вы должны заметить, что ВСЕ аудио классы на Android в настоящее время написаны на c ++ и проходят через JNI. Если он достаточно быстрый, чтобы идти в одну сторону (в настоящее время я работаю над игрой, в которой мы можем без проблем передавать более 0,5 Мб аудиоданных из Java в AudioTrack в некоторых кадрах), то, вероятно, это будет не так уж и плохо. переходите к другому, поскольку это в основном та же самая операция, то есть блокировка буфера, запись, разблокировка при переходе к аудио, и блокировка буфера, чтение, разблокировка в аудио классах.

1 голос
/ 07 марта 2010

В настоящее время NDK не поддерживает воспроизведение аудиофреймов. Вы должны использовать API JavaTrack для достижения этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...