2011-11-29 2 views
0

짧은 : 내 안드로이드 애플 리케이션에서 ffmpeg로 변환 된 사운드 파일을 재생하려고하지만, 일하는 데 문제가 발생.ffmpeg를 사용하여 안드로이드 애플 리케이션에서 사용하기 위해 사운드 파일을 변환

long : 우리는 아이폰 앱과 안드로이드 앱이 같은 일을하고 있으며, 사용자 상호 작용에서 사운드를 재생하는 기능을 포팅해야합니다. aiff 형식의 소스 파일을 가지고 있으며이를 Android 용 mp3으로 변환하려고 시도했습니다. 이 파일을

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 변환 매개 변수는 추락 다음 android.media.MediaPlayer로드 할 때 VLC와 충돌에서 재생되지 않습니다

$ 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% 

결과 파일은 아이튠즈에서 좋은 활약 (참고 : 나는 SoundPool 라이브러리에서 mp3와 ogg를 사용하여 처음 시도했지만 그 중 하나는 작동하지 않았습니다.

내가 또한 작동하지 않았다 다음 paramters, 시도 : 오늘 MacPorts를 함께 내장는 FFmpeg을 내가 OSX에서 일하고 있어요

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

을, 안드로이드 API 레벨 7 (구글 API를, 2.1 갱신 1) . dev.android에있는 "지원되는 형식"표를 보면 내 파일이 사양을 벗어 났음을 나타내지는 않았지만 그 점은 잘못되었을 수 있습니다.

비트 전송률과 관련하여 가장 단서가 없으므로 누구나 ffmpeg 매개 변수의 올바른 조합을 통해 안드로이드 용 mp3를 얻으실 수 있습니까? 결과 파일이 mp3, ogg 또는 3gp이든 상관 없어요.

답변

1

아마도 당신이 찾고있는 것이 아니지만, 오디오 작업을 위해서는 SoX을 사용하는 것이 더 좋습니다. 그것은 단지 오디오 용 ffmpeg와 비슷합니다. 비록 내 눈을 ffmpeg 함께 했어야 일 했어야.

+0

주셔서 감사합니다. 나는 그것을 볼 것이다! – stefs

관련 문제