1)ffmpeg 写avi时候,avio_open成功,但是写avi头时调用avformat_write_header失败

在解码器初始化时,先avio_open创建文件后,然后马上调用avformat_write_header函数,会出现avformat_write_header失败,返回值-22;但是如果将解码器封装成一个类,提供一个封装好的avformat_write_header函数就没有这个问题了。

原因:avformat_write_header的参数信息不正确,增加帧率控制就ok了

DecodecContext->time_base.num=1;
 DecodecContext->time_base.den=25;

//释放avDecodeFmtContext 失败
 2)avformat_free_context(avDecodeFmtContext);

if (VideoDecodeSt->codec!=NULL)
 {
  avcodec_close(VideoDecodeSt->codec);
  av_free(VideoDecodeSt->codec);
  VideoDecodeSt->codec=NULL;
 }

if (avDecodeFmtContext!=NULL)
 {
  avformat_free_context(avDecodeFmtContext); 
  avDecodeFmtContext=NULL;
 }

这样是失败的,但是改为这样就ok

if (VideoDecodeSt->codec!=NULL)
 {
  avcodec_close(VideoDecodeSt->codec);
  //av_free(VideoDecodeSt->codec);
  //VideoDecodeSt->codec=NULL;
 }

if (avDecodeFmtContext!=NULL)
 {
  avformat_free_context(avDecodeFmtContext); 
  avDecodeFmtContext=NULL;
 }

但是这样后,造成释放avformat_free_context(avDecodeFmtContext); 后,在重新初始化avformat_alloc_output_context2 出错,该函数返回值-22

原因是:

int ret=avformat_alloc_output_context2(&avDecodeFmtContext, NULL, NULL, fileName.c_str());

最后的fileName.c_str());没有传递正确;

ffmpeg 转码使用的api调用顺序:

1) av_register_all();

2) avformat_alloc_output_context2(&oc, NULL, NULL, filename);

3)avcodec_find_encoder(codec_id);

4)avformat_new_stream(oc, *codec);

5)可选

//防止编码延迟修改参数
  av_opt_set(c->priv_data, "preset", "superfast", 0); 
  av_opt_set(c->priv_data, "tune", "zerolatency", 0);

6) av_dump_format(oc, 0, filename, 1);

7) if (!(fmt->flags & AVFMT_NOFILE)) {
  ret = avio_open(&oc->pb, filename, AVIO_FLAG_WRITE);
  if (ret < 0) {
   //fprintf(stderr, "Could not open '%s': %s\n", filename,av_err2str(ret));
   return 1;
  }
 }

8) ret = avformat_write_header(oc, NULL);

9) ret = av_interleaved_write_frame(oc, &pkt);

10) av_write_trailer(oc);

11)avcodec_close(st->codec);

12)if (!(fmt->flags & AVFMT_NOFILE))
 {
  /* Close the output file. */
  avio_close(oc->pb);
 }

13) avformat_free_context(oc);

avio_open成功avformat_write_header失败相关推荐

  1. linux脚本登录启动失败,在Linux上检查用户登录成功与失败的shell脚本

    在Linux上检查用户登录成功与失败的shell脚本 Linux管理员的典型任务之一是检查Linux系统中成功和失败的登录尝试. 手动验证它们非常困难,因为" /var/log/secure ...

  2. ajax请求成功和失败方法_创新需要反馈和失败的新方法

    ajax请求成功和失败方法 今天,"组织文化"令人不解,有充分的理由. 越来越多的领导者意识到,渗透并指导其组织的文化将决定他们是成功还是失败. 术语"组织文化" ...

  3. ajax回调函数有时成功有时失败,javascript - Ajax 回调函数行为随机。我做错了什么?...

    我有以下行为随机的 ajax 函数.有时会显示警报 success finally.在其他情况下,第二个警报是 显示 Failure: my status is 500. promptId 从调用函数 ...

  4. 事件管理决定一个网管软件的成功与失败

    很多人用网管软件很长时间了,但是还是觉得用起网管软件来,很不方便.这是什么原因呢?认真分析种种原因,最终发现,原来是很多人并没有把网管软件中的事件管理用好. 什么是事件管理   首先向大家说明一下,什 ...

  5. gif 动态加载_搞笑GIF:这个游戏最大的成功就是失败!

    ҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈喜҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈欢҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈看҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈搞笑GIF动态图 ҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈可҉҉҈҉҉҉҈҉҉҉҈҈ ...

  6. 最成功的失败学——《创游记:游戏团队创业成长之路》

    游戏创业是九死一生的冒险,只有不到30%的团队能坚持到游戏开发完成:又只有10%的团队能把游戏卖出去:而最后只有1%的团队能赚到钱.玩家在应用商店下载到的游戏可能玩了两局就卸载掉了,吐槽一句:&quo ...

  7. 成功与失败——《异类》读后感

    看完<异类>,才知道成功不是想象中那么简单.     知道这本书是因为那个一万小时定律,这个定律大概是说 一个人只要坚持专注于某一领域有一万个小时,那么他就能成为该领域的专家.这个理论给了 ...

  8. 求一颗二叉排序树查找成功和失败情况下的平均查找长度

    /** *    实验题目: *        求一颗二叉排序树查找成功和失败情况下的平均查找长度 *    实验目的: *        掌握二叉排序树的查找过程及其算法设计 *    实验内容: ...

  9. WebView监听网页加载成功与失败

    问题说明: 现在好多APP在应用中会内嵌webview,好多时候需要监听webview是否加载成功与失败.当加载成功的时候会回调WebViewClient的onPageFinished方法:当加载失败 ...

最新文章

  1. [译] Android 的多摄像头支持
  2. Java 自动装箱与拆箱
  3. 网络工程师要如何选择?
  4. .NET 6 中 gRPC 的新功能
  5. android java 时间格式化_(Java / Android)计算两个日期之间的日期,并以特定格式显示结果...
  6. JS获取元素的第一个子节点
  7. tcp/ip协议listen函数中backlog参数的含义
  8. react 使用rewired_使用react-app-rewired和customize-cra对默认webpack自定义配置
  9. win2008 server 多IP配置
  10. 北京理工大学计算机学硕考研科目,2021北京理工大学计算机考研科目
  11. “极狐•华为HI版本”的尴尬与困境
  12. zencart模板,外贸鞋子模板
  13. 证明:二阶导函数大于零时为凹函数
  14. 随机生成验证码,并判断是否正确(String版)
  15. Struggling
  16. Domino V12 Beta新玩法
  17. UI自动化框架 基于selenium+pytest和PO分层思想
  18. 金弘同创怎么样:拼多多获取奖励金的办法
  19. c++实现种子填充算法与扫描线算法
  20. 用Jquey实现双击图片放大和触摸放大的功能。

热门文章

  1. 网易云音乐数仓治理之数据任务重构实践
  2. C语言详解生成随机数的过程,time函数、时间戳timer、rand函数和srand函数,附猜数字小游戏
  3. 基于CNN模型的手写字符识别的分析与实现过程
  4. 坚果投影完成6亿元D轮融资,阿里巴巴领投
  5. Keysight N9010 仪器SCPI控制
  6. 大疆无人机 从Mavic Pro 兼容 Mavic 2 zoom (解决方案)
  7. Python十大经典语法合集
  8. hp9000 e25服务器 显示器,DIY瞎折腾 篇十五:又挽救了一台显示器-HP 2011X-附翻车过程...
  9. html分割线颜色怎么在css中写,html水平分割线 html 分割线颜色怎么变浅
  10. 动态规划解决编辑距离问题