1

我正在尝试使用 ffmpeg 并坚持如何将字节缓冲区传递给 FFmpeg 方法avcodec_decode_audio3

在 JNI 代码中,我能够访问字节缓冲区,通过GetDirectBufferAddress它给我一个 jbyte 类型的对象。如何将其传递给avcodec_decode_audio3ffmpeg 的方法?

is 的方法声明avcodec_decode_audio3

avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples, int
*frame_size_ptr, AVPacket *avpkt)

以前有没有人这样做过。

有人可以对此有所了解吗?如果有人可以给我一个如何完成的片段,那将非常有用。

4

2 回答 2

0

不要将其作为类型 jbyte ,而是将值放入 unsigned char *pBuffer char *pBuffer = (*env)->GetDirectBufferAddress(env,buf); 您需要将其类型转换为 int16_t *samples 类型,然后将其传递给 avcodec_decode_audio3(..... .pBuffer....);

复制完成:memcpy(samples, frame.extended_data[0], plane_size);

于 2012-04-12T09:22:55.327 回答
0

我已经开始了一个简单的项目,我使用 ffmpeg 进行解码。我已经设法在 Java 中编译 ffmpeg、获取流、解码并将 pcm 数据返回到 AudioTrack。唯一的问题是我只得到了噪音,但我正在努力。在这里查看https://github.com/mikebevz/AFPlayer

于 2011-10-25T07:32:19.297 回答