0
我已檢測功能avcodec_decode_audio3
解碼音頻可與MP4格式慢,在這裏我的代碼循環:Android如何增加ffmpeg mp4的性能?
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毫秒。我從here獲得了我的構建腳本。
它是否正常行爲?有什麼辦法來提高解碼MP4的性能?
這是一個更復雜的編解碼器,所以我不會感到震驚,知道它需要更多的處理時間來解碼。 –
嗨.. ffmpeg android可以使用cygwin在android中編譯?我已經嘗試過,但無法編譯和生成.so文件。 – itsrajesh4uguys