2013-01-01 60 views
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的性能?

+0

這是一個更復雜的編解碼器,所以我不會感到震驚,知道它需要更多的處理時間來解碼。 –

+0

嗨.. ffmpeg android可以使用cygwin在android中編譯?我已經嘗試過,但無法編譯和生成.so文件。 – itsrajesh4uguys

回答