Использование ffmpeg для конвертации звуковых файлов для использования в приложении для Android - PullRequest
0 голосов
/ 29 ноября 2011

short: Я пытаюсь просто воспроизвести звуковой файл, преобразованный с помощью ffmpeg, в моем приложении для Android, но у меня возникают проблемы с его работой.

long: у нас есть приложение для iphone и приложение для Android, которые делают одно и то же, и мне нужно перенести функцию воспроизведения звука на взаимодействие с пользователем.У меня есть исходный файл в формате aiff, и я пытался преобразовать его в mp3 для Android.но приложение продолжает падать, когда оно пытается загрузить файл

AssetFileDescriptor fileDescriptor = context.getResources().openRawResourceFd(resid);
final MediaPlayer mp = new MediaPlayer();
mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());
fileDescriptor.close();
mp.prepare();

, более конкретно, mp.setDataSource падает.некоторые копания заставили меня поверить, что с кодировкой что-то не так.сам звуковой файл находится в res / raw.

11-29 17:11:48.012: ERROR/SoundManager(15580): java.io.IOException: setDataSourceFD failed.: status=0x80000000
11-29 17:11:48.012: ERROR/SoundManager(15580):     at android.media.MediaPlayer.setDataSource(Native Method)
...

что я пробовал:

  • с использованием другого mp3, который уже используется с тем же кодом в другом месте.это работает.
  • преобразовал его в файл WAV.это не приводило к падению приложения, но не воспроизводило звук.это может быть другая проблема.
  • преобразовал его в ogg;крах

, поэтому параметры преобразования ffmpeg выглядят следующим образом:

$ ffmpeg -i click_24db.aif -f mp3 ~/foobar/wheel_click.mp3
ffmpeg version 0.7.8, Copyright (c) 2000-2011 the FFmpeg developers
  built on Nov 24 2011 14:31:00 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
  configuration: --prefix=/opt/local --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libopenjpeg --enable-libxvid --enable-libx264 --enable-libvpx --enable-libspeex --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64 --enable-yasm
  libavutil    50. 43. 0 / 50. 43. 0
  libavcodec   52.123. 0 / 52.123. 0
  libavformat  52.111. 0 / 52.111. 0
  libavdevice  52.  5. 0 / 52.  5. 0
  libavfilter   1. 80. 0 /  1. 80. 0
  libswscale    0. 14. 1 /  0. 14. 1
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, aiff, from 'click_24db.aif':
  Duration: 00:00:00.01, start: 0.000000, bitrate: 1570 kb/s
    Stream #0.0: Audio: pcm_s16be, 44100 Hz, 2 channels, s16, 1411 kb/s
Output #0, mp3, to '/Users/xyz/foobar/wheel_click.mp3':
  Metadata:
    TSSE            : Lavf52.111.0
    Stream #0.0: Audio: libmp3lame, 44100 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
Press [q] to stop, [?] for help
size=       1kB time=00:00:00.05 bitrate=  92.9kbits/s    
video:0kB audio:0kB global headers:0kB muxing overhead 45.563549%

полученный файл хорошо воспроизводится в itunes, не воспроизводится в vlc и вылетает при загрузке сandroid.media.MediaPlayer (примечание: сначала я попробовал это с библиотекой SoundPool, с mp3 и ogg, но это тоже не сработало).

Я также попробовал следующие параметры, которые не работалиработа:

ffmpeg -i inputfile.aif -f mp3 -acodec libmp3lame -ab 192000 -ar 44100 outputfile.mp3

я работаю на OSX, сегодня построил ffmpeg с macports, уровень Android-API равен 7 (Google API, 2.1-обновление1).просмотр таблицы «поддерживаемых форматов» на dev.android не показал, что мой файл не соответствует спецификации, но я могу ошибаться в этом.

у меня нетмалейшая подсказка относительно битрейта и так далее, так может кто-нибудь указать мне правильную комбинацию параметров ffmpeg, чтобы получить рабочий mp3 для Android?мне все равно, будет ли полученный файл mp3, ogg или 3gp или что-то еще.

1 Ответ

1 голос
/ 10 января 2012

Возможно, не то, что вы ищете, но для работы со звуком вам может повезти с SoX . Это как ffmpeg только для аудио. Хотя, на мой взгляд, то, что вы сделали с ffmpeg, должно было сработать.

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