Android如何增加ffmpeg mp4 perfromance?
我检测到功能 avcodec_decode_audio3
使用mp4格式工作缓慢,这里我的代码循环解码音频:
I have detected that function avcodec_decode_audio3
works slow with mp4 format, here my code cycle for decoding audio:
while (av_read_frame(av_format_context, &packet) >= 0 && is_play == 1) {
if (av_codec_context->codec_type == AVMEDIA_TYPE_AUDIO
&& is_play == 1) {
int out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
int size = packet.size;
int n;
int dataLength = size;
int decoded = 0;
while (size > 0) {
//start measure time
gettimeofday(&tvBegin, NULL);
int len = avcodec_decode_audio3(av_codec_context,
(int16_t *) pAudioBuffer, &out_size, &packet);
//stop measure time
gettimeofday(&tvEnd, NULL);
timeval_subtract(&tvDiff, &tvEnd, &tvBegin);
LOGI("%d", tvDiff.tv_usec / 1000);
LOGI("len='%d'", len);
LOGI("out_size='%d'", out_size);
if (len < 0) {
break;
return 1;
}
if (out_size > 0) {
jbyte *bytes = (*env)->GetByteArrayElements(env, array,
NULL);
memcpy(bytes, (int16_t *) pAudioBuffer, out_size);
(*env)->ReleaseByteArrayElements(env, array, bytes, 0);
(*env)->CallVoidMethod(env, obj, play, array, out_size,
is_play);
}
size -= len;
}
}
if (packet.data)
av_free_packet(&packet);
}
但与其他格式,如flac和mp3,它的工作正常。 avcodec_decode_audio3
需要大约1-2毫秒来解码mp3帧与 out_size
= 4608,但在mp4解码中具有相同的帧大小花费约6-7毫秒。我从此处获取我的构建脚本。
But with other formats like flac and mp3 it works fine. avcodec_decode_audio3
take about 1-2 milisecounds for decoding mp3 frame with out_size
= 4608 but with the same frame size in mp4 decoding take about 6-7 millisecounds. I got my build script from here.
是否正常行为?是否有任何方法提高解码mp4的性能?
Does it normal behavior? Is any way to increase performance of decoding mp4?
你可以搜索硬件加速...
u could search on hardware acceleration...
H / W加速H.264解码在Android上
"H/W Accelerated H.264 Decoding on Android"
例如:
http://readlist.com/lists/mplayerhq.hu/mplayer-users/5/26751.html
IMO - ffmpeg仍然主要是软件,但在较新版本的Android,您可能可以找到一些stagefright API提供GPU加速方式来访问framebuffer?
IMO - ffmpeg is still mostly in software but on the newer versions of android, you may be able to find some stagefright API's providing GPU accelerated way to access the framebuffer??