2014-09-24 163 views
0

我已經編譯了一個FFMPEG庫,以便在Android上使用libx264並使用NDK。FFMPEG x264編碼器Android

我想對MPEG視頻文件進行編碼,但是在avcodec_open2中打開編碼器編解碼器時應用程序失敗。

我從avcodec_open2接收到的FFMPEG日誌如下,函數返回-22。

  • 圖片大小%ux%u無效。
  • 忽略無效的寬度/高度重視
  • 指定pix_fmt不支持

在Windows上的代碼工作正常,不存在失敗的它僅適用於Android。任何ides爲什麼這將失敗在Android上?

if (!(codec = avcodec_find_encoder(AV_CODEC_ID_MPEG1VIDEO))) 
    { 
     return -1; 
    } 

    //Allocate context based on codec 
    if (!(context = avcodec_alloc_context3(codec))) 
    { 
     return -2; 
    } 

    //Setup Context 
    // put sample parameters 
    context->bit_rate = 4000000; 
    // resolution must be a multiple of two 
    context->width = 1280; 
    context->height = 720; 
    // frames per second 
    context->time_base = (AVRational){1,25}; 
    context->inter_quant_bias = 96; 
    context->gop_size = 10; 
    context->max_b_frames = 1; 
    //IDs 
    context->pix_fmt = AV_PIX_FMT_YUV420P; 
    context->codec_id = AV_CODEC_ID_MPEG1VIDEO; 
    context->codec_type = AVMEDIA_TYPE_VIDEO; 


    if (AV_CODEC_ID_MPEG1VIDEO == AV_CODEC_ID_H264) 
    { 
     av_opt_set(context->priv_data, "preset", "slow", 0); 
    } 

    if ((result = avcodec_open2(context, codec, NULL)) < 0) 
    { 
     //Failed opening Codec! 
    } 
+0

您可能有興趣瞭解libx264處理的H.264/AVC格式是否已獲得專利,並且您需要支付版稅以分發基於此產品的產品。至於你的編程問題,你是否嘗試過其他像素格式,如AV_PIX_FMT_YUV422P或其他值? – personne3000 2014-09-24 10:56:01

+0

我嘗試過其他格式,如AV_PIX_FMT_YUV422P,但結果總是相同的。 – DundeeDave 2014-09-24 11:01:34

+0

因此,完全相同的代碼在Windows上工作,但在Android上失敗?你是如何得到這兩個ffmpeg版本的,你是否自己編譯源代碼? ffmpeg需要編譯支持x264(可選)才能支持,所以編解碼器的支持可能不同 – personne3000 2014-09-24 11:09:53

回答

0

這個問題是由構建FFMPEG與過時的源代碼引起的。

我從https://www.ffmpeg.org/獲得了最新的源代碼,並以相同的方式對其進行了編譯,新庫運行正常。

注:我沒有考慮使用libx264的許可證的全部含義。我已經放棄了。