簡體   English   中英

Android內置的相機編碼器VS FFMPEG —速度

[英]Android built in Camera encoder VS FFMPEG — Speed

在相同的視頻大小下,如何在Android相機應用程序中錄制1080P,H264編碼的視頻實時快速,但是使用FFMPEG在android中編碼視頻卻慢呢?

我知道FFMPEG是一種軟件級編碼器,它不支持任何硬件功能。

我知道相機應用程序直接從相機驅動程序獲取緩沖區數據。

但是實際上差異發生在哪里?

為什么相機應用程序實時性很快???

它是否使用手機的GPU和OpenGL功能對視頻進行編碼,以使其實時性如此之快?

因為Camera Application和FFMPEG都在同一台移動設備上運行,但是相機仍然實時編碼H264?

我知道FFMPEG是一種軟件級編碼器,它不支持任何硬件功能。

您基本上已經為您自己回答了這個問題。 許多設備具有不依賴於常規CPU指令進行任何編碼的硬件編解碼器。 FFmpeg不會利用這些優勢。 (我不確定可以在FFmpeg中內置一些硬件優化,盡管我不確定它們在Android上是否可用。)

FFMPEG在ARM平台上默認情況下支持NEON優化,因此,在QVGA或VGA之類的分辨率下,差異似乎不太明顯。 但是片上硬件用於視頻編碼的速度要快得多,例如1080P之類的高分辨率,而最少利用ARM MHz。 請注意,編碼器使用的硬件與OpenGL硬件引擎不同。

如果以此方式配置,ffmpeg可以使用可選的x264編碼器; 請注意,這具有可怕的許可含義。x264非常好且高效,並且當構建為使用切片多線程時,它可以在三星S4等現代設備上為WVGA視頻實現25FPS的速度。

可以使用libstagefrihht編譯ffmpeg,后者使用內置的硬件解碼器,但不幸的是不包含編碼器。

我也遇到了這個問題,使我長期困擾。我通過以下方法解決了這個問題:

AVDictionary *param = 0;
//H.264
if (pCodecCtx->codec_id == AV_CODEC_ID_H264) {
//        av_dict_set(&param, "preset", "slow", 0);
    /**
    * 
    * ultrafast,superfast, veryfast, faster, fast, medium
    * slow, slower, veryslow, placebo. This is x264 encoding speed parameter
    */
    av_dict_set(&param, "preset", "superfast", 0);
    av_dict_set(&param, "tune", "zerolatency", 0);
}

if (avcodec_open2(pCodecCtx, pCodec, &param) < 0) {
    loge("Failed to open encoder!\n");
    return -1;
}

您需要設置預設超快或超快

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM