热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Invaliddatafoundwhenprocessinginput

ffmpeg——Invaliddatafoundwhenprocessinginput一、问题描述二、原因三、解决方案一、问题描述流程描述:我把每一帧原始YUV图像


ffmpeg——Invalid data found when processing input

  • 一、问题描述
  • 二、原因
  • 三、解决方案


一、问题描述

流程描述:我把每一帧原始YUV图像数据,构造成Y4M(YUV4MPEG2)格式的流,然后使用ffmpeg编码成h264格式进行RTMP推流。
ffmpeg执行avformat_open_input打开文件和执行avformat_find_stream_info探测流都正常,但在执行avformat_write_header报错:Invalid data found when processing input


二、原因

编码器参数设置错误

// enc_ctx编码器上下文,dec_ctx解码器上下文
AVCodecContext *dec_ctx, *enc_ctx;
...
dec_ctx = pFormatCtx->streams[i]->codec;
...
if (dec_ctx->codec_type == AVMEDIA_TYPE_VIDEO) {LOGD_DEBUG("height = %d, width = %d, sample_aspect_ratio = %d/%d, pix_fmt = %d, framerate = %d/%d, time_base = %d/%d",dec_ctx->height, dec_ctx->width,dec_ctx->sample_aspect_ratio.num,dec_ctx->sample_aspect_ratio.den,dec_ctx->pix_fmt,dec_ctx->framerate.num, dec_ctx->framerate.den,dec_ctx->time_base.num, dec_ctx->time_base.den);enc_ctx->height = dec_ctx->height;enc_ctx->width = dec_ctx->width;enc_ctx->sample_aspect_ratio = dec_ctx->sample_aspect_ratio;/* take first format from list of supported formats */if (encoder->pix_fmts)enc_ctx->pix_fmt = encoder->pix_fmts[0];elseenc_ctx->pix_fmt = dec_ctx->pix_fmt;/* video time_base can be set to whatever is handy and supported by encoder */enc_ctx->time_base = dec_ctx->framerate;enc_ctx->codec_type = AVMEDIA_TYPE_VIDEO;
}

我这里的编码器参数是根据解码器里参数进行设置的,但解码器取得的部分参数时不准确的,推测原因可能和我构造的Y4M(YUV4MPEG2)流格式有关。


三、解决方案

将上面的代码修改为:

// enc_ctx编码器上下文,dec_ctx解码器上下文
AVCodecContext *dec_ctx, *enc_ctx;
...
dec_ctx = pFormatCtx->streams[i]->codec;
...
if (dec_ctx->codec_type == AVMEDIA_TYPE_VIDEO) {LOGD_DEBUG("height = %d, width = %d, sample_aspect_ratio = %d/%d, pix_fmt = %d, framerate = %d/%d, time_base = %d/%d",dec_ctx->height, dec_ctx->width,dec_ctx->sample_aspect_ratio.num,dec_ctx->sample_aspect_ratio.den,dec_ctx->pix_fmt,dec_ctx->framerate.num, dec_ctx->framerate.den,dec_ctx->time_base.num, dec_ctx->time_base.den);enc_ctx->height = dec_ctx->height;enc_ctx->width = dec_ctx->width;enc_ctx->sample_aspect_ratio = {476, 477};//dec_ctx->sample_aspect_ratio;/* take first format from list of supported formats */if (encoder->pix_fmts)enc_ctx->pix_fmt = encoder->pix_fmts[0];elseenc_ctx->pix_fmt = dec_ctx->pix_fmt;/* video time_base can be set to whatever is handy and supported by encoder */enc_ctx->time_base = av_inv_q({25, 1});//dec_ctx->framerate);enc_ctx->codec_type = AVMEDIA_TYPE_VIDEO;
}

推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • java实现rstp格式转换使用ffmpeg实现linux命令第一步安装node.js和ffmpeg第二步搭建node.js启动websocket接收服务
    java实现rstp格式转换使用ffmpeg实现linux命令第一步安装node.js和ffmpeg第二步搭建node.js启动websocket接收服务第三步java实现 ... [详细]
  • 《Python数据可视化编程实战》——5.4 在matplotlib中创建动画
    本节书摘来自异步社区《Python数据可视化编程实战》一书中的第5章,第5.4节,作者[爱尔兰]IgorMilovanović,颛青山译& ... [详细]
  • ffmpeg【百度百科】
    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录 ... [详细]
  • FFmpeg 源码学习(一):avformat_open_input 源码分析
    一、源码方法参数分析下面是avformat_open_input的方法及参数:***Openaninputstreamandreadtheheader.Thecode ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
author-avatar
两人浪漫_607
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有