开发者

Playing audio with FFMPEG

I have been trying to port FFMPEG (for playing audio) into Android using NDK. I have had some success

  • I could build FFMPEG and link it via NDK.
  • I could call avcodec_decode_audio3() and decode a given audio file.

So here I have a audio buffer output from the function. How do I play this now? Any ffmpeg guys can te开发者_开发问答ll me the exact steps to decode and play audio. I am really clueless of what to do with the audio buffers created I got from avcodec_decode_audio3().

thanks a lot.


In order to use the FFmpeg as an audio playback tool you can untilize FFplay (available for Windows and for Linux).

It's as simple as: ffplay <input audio track> The audio track must be of a supported format, meaning you will need some libraries.

  1. If you want something for a Windows system, then just download the builds here, and then put the executable in your environment variable path. One can also go the hard way and download the source code and build. But why bother?
  2. In case you're using something sporting some Linux, including Raspbian this link describes how to get libraries and then enable then in the FFmpeg build. The FFmpeg build will also include FFplay. I have tested this and it seems to work for me.
  3. In both cases you will need to have a C compiler installed in order to tackle the make commands.

An implementation example using FFplay processes in python3:

I am working on a personal project utilizing a RaspberryPi as more or less a fancy mp3 player doorbell type IoT device. It plays Darude Sandstorm on full blast for anyone ringing the doorbell. But it also has a twist. It's called DarudeDoorBell.


I have developed a videoplayer on android based on ffmpeg. You can use AudioTrack class to play audio onto device.

EDIT :

In Java create an audiotrack object

AudioTrack track;
bufferSize = AudioTrack.getMinBufferSize(44100,AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT)
track = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, mode);

//Play audio clip
track.play();

while(stream_is_over){
//Copy the decoded raw buffer from native code to "buffer" .....
............
track.write(buffer, 0, readBytes);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜