3
pAvframe = GetVideoFrame();

av_init_packet(&pkt);
/* encode the image */
ret = avcodec_encode_video2(pAvCodecCtx, &pkt, pAvframe, &got_packet); //return Generic error in external library
if (ret < 0) 
{
    char errbuf[128];
    const char *errbuf_ptr = errbuf;

    if (av_strerror(ret, errbuf, sizeof(errbuf)) < 0)
        errbuf_ptr = strerror(AVUNERROR(ret));
    av_log(NULL, AV_LOG_ERROR, "%s\n", errbuf_ptr);

    _stprintf_s(szErr,MAX_PATH, _T("Error encoding video frame:: "));
    LOG_ENTRY_ERROR(E_FAIL,szErr);
}



if(ret >= 0)
{
    ret = WriteFrameToFile(&pAvCodecCtx->time_base, m_stVideoStream.pAVStream, &pkt);
    if(ret < 0)
    {
        av_packet_unref(&pkt);

    }
}

它总是返回 - -542398533“外部库中的一般错误”仅使用 h.264 编码器如果 gop 为零,请提供解决方案它可以工作一段时间。

4

1 回答 1

1

pAvFrame 的内容是什么?例如,什么是pix_fmt,widthheight? pix_fmt应该(取决于 x264 的构建,但我在这里假设一个典型的配置)是AV_PIX_FMT_YUV420P. 假设 4:2:0 色度二次采样,大小应该是偶数。data指针和linesizes 32 字节对齐吗?

你能否提供一些关于你如何初始化编码器的信息,即调用的代码avcodec_open2(),特别是你在AVCodecContext调用之前设置的条目avcodec_open2(),以及所有调用av_opt_set_*()

于 2017-01-20T13:41:59.947 回答