ffmpeg报错:avcodec_send_frame() 返回 -22

这篇具有很好参考价值的文章主要介绍了ffmpeg报错:avcodec_send_frame() 返回 -22。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

avcodec_send_frame()作为编码函数,作用是将AVFrame送入编码器。

返回值-22表示找不到编码器,并抛出错误AVERROR(EINVAL)
可以先验证一下-22是不是AVERROR(EINVAL)

int ret = 0;
    ret = avcodec_send_frame(encodctx, frame_dst);
    if ( ret == AVERROR(EINVAL) ) {
        printf("ERROR: no encoder, ret = %d.\n", ret);
    }

ffmpeg -22,FFmpeg,计算机视觉
验证成功,返回值-22就是AVERROR(EINVAL)

那我们接下来可看一下什么情况下会报AVERROR(EINVAL)这个错误,avcodec_send_frame()函数源码为

int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame)
{
    AVCodecInternal *avci = avctx->internal;
    int ret;
    // 判断编码器有没打开,是否为编码器
    if (!avcodec_is_open(avctx) || !av_codec_is_encoder(avctx->codec))
        return AVERROR(EINVAL);
    if (avci->draining)
        return AVERROR_EOF;
    if (avci->buffer_frame->data[0])
        return AVERROR(EAGAIN);
    if (!frame) {
        avci->draining = 1;
    } else {
        ret = encode_send_frame_internal(avctx, frame);
        if (ret < 0)
            return ret;
    }
 
    if (!avci->buffer_pkt->data && !avci->buffer_pkt->side_data) {
        ret = encode_receive_packet_internal(avctx, avci->buffer_pkt);
        if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
            return ret;
    }
 
    return 0;
}

可以看到,函数一上来(第六行)就会检查编码器是否打开,以及传入的AVCodecContext是不是一个编码器,两个条件有一个不成立,就返回AVERROR(EINVAL)

因此,需要检查两个地方:文章来源地址https://www.toymoban.com/news/detail-521300.html

  1. 是不是将avcodec_find_encoder写成了avcodec_find_decoder;
  2. 是否调用avcodec_open2打开编码器。

到了这里,关于ffmpeg报错:avcodec_send_frame() 返回 -22的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FFmpeg5.0源码阅读——av_interleaved_write_frame

       摘要 :本文主要详细描述FFmpeg中封装时写packet到媒体文件的函数 av_interleaved_write_frame 的实现。    : av_interleaved_write_frame    读者须知 :读者需要熟悉ffmpeg的基本使用。    av_interleaved_write_frame 的基本调用流程图如下。   首先就是根据输入数据是否为空

    2024年02月14日
    浏览(48)
  • flv 报错 Unsupported codec in video frame: 12

    [TransmuxingController] DemuxException: type = CodecUnsupported, info = Flv: Unsupported codec in video frame: 12 主要是因为我们的播放器不支持 H.265 视频编码; 方法一:将设备端的视频编码改为 H.264 方法二:更换播放器(eg :EasyPlayer.js) EasyPlayer.js 集播放 http-flv, hls, websocket 于一身的 H5 视频直播

    2024年02月09日
    浏览(45)
  • kafka send data 超时问题 报错:xx ms has passed since last append

    转行到大数据将近一年了,在工作中经常遇到 kafka send data 超时的报错,今天给各位道友浅谈一下这类问题的经验: 此异常错误即RecordBatch#maybeExpire方法抛出,意思是:在设置的timeout时间内send线程没有将client缓存内的请求发送出去。 原因通常来说为以下几种: kafka服务端压

    2024年02月11日
    浏览(40)
  • videoPlayer视频报错:First video frame not zero... WindowsVideoMedia error unhandled Color Standard...

    1、报错信息:First video frame not zero: 2 (0.066667s). Result may be out of sync. Please make sure tracks all start at 0 in 2、报错原因( from ChatGPT4 ): 3、修复过程 重新设置视频的导入格式 Unity 2021.3.18:【Project】-【选中视频文件】-【Inspctor】-【Codec】 设置为 H264 WindowsVideoMedia error unhandled Colo

    2024年02月03日
    浏览(38)
  • torch.distributed.elastic.multiprocessing.api: [WARNING] Sending process 141——YOLOv8双卡训练报错的解决方法

    Ultralytics开源的YOLOv8训练模型的时候——使用如下命令,双GPU部署训练 抛出异常 而使用SingleGPU则不会抛出异常 这是由于上一次双卡训练直接在pycharm的terminal里面直接Ctrl+C按下去,然后终止了训练,这样可能导致了进程没有完全杀死,没有释放该进程。需要重启电脑。 还有一

    2024年02月04日
    浏览(38)
  • ubuntu22.04下编译ffmpeg和ffplay

    Ubuntu22.04 下编译安装 ffmpeg 和 ffplay 一、下载源码包 1.1 官方下载链接 :Download FFmpeg 可以手动下载,也可以命令行下载: wget http://www.ffmpeg.org/releases/ffmpeg-7.0.tar.xz  1.2 下载完解压   tar -xvf  ffmpeg-7.0.tar.xz  二、安装依赖库 官方有个指导文档,Ubuntu怎么使用FFmpeg: https://trac.ff

    2024年04月26日
    浏览(37)
  • Git报错: error: RPC failed; curl 56 HTTP/2 stream 5 was reset; send-pack: unexpected disconnect

    背景: 在本地修改了大量的代码并commit后,最后一次性push时,出现错误。 分析: 从报错的信息来看,貌似是和远程Git连接出现了问题,因此,可以从以下三个角度来分析: 本地和远程Git仓库连接有问题,由于刚提交成功过,可以排除掉; 本地和远程Git仓库的数据传输速度慢

    2024年03月18日
    浏览(56)
  • selenium4.15.2 报错Exception managing chrome: error sending request for url 和 打开Chrome浏览器自动退出问题

    最近更新了一不小心更新了selenium4.15.2,导致每次运行它都会主动去国外官网请求一遍,因为访问不了国外网址,就加载特别慢 最后报错 Exception managing chrome: error sending request for url (https://chromedriver.storage.googleapis.com/index.html),然后再运行,一开始以为是webdriver版本和chrome版本

    2024年02月05日
    浏览(97)
  • ubuntu22.10 ffmpeg-webrtc推拉流srs环境搭建

    一、编译ffmpeg-webrtc 二、openssl,opus,x264配置 三、编译srs 四、测试 4.1推流端 4.2拉流端 五、交互与sdp 最近看到杨大佬发的动态,尝鲜体验一下。 一、编译ffmpeg-webrtc ffmpeg-webrtc官网:https://github.com/ossrs/ffmpeg-webrtc 拉取ffmpeg-webrtc代码: 这里配置需要openssl,opus,x264见下 二、

    2024年02月05日
    浏览(43)
  • git push报错error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)send-pac

    完整报错:error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)send-pack: unexpected disconnect while reading sideband packet 尝试解决:(是我失败了的方法,但可能因人而异,或许可以一搏)     修改网络协议: (不可行,还是报一样的错) 修改缓冲区的大小: (报错 cur

    2024年01月25日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包