avio_open成功avformat_write_header失败
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失败相关推荐
- linux脚本登录启动失败,在Linux上检查用户登录成功与失败的shell脚本
在Linux上检查用户登录成功与失败的shell脚本 Linux管理员的典型任务之一是检查Linux系统中成功和失败的登录尝试. 手动验证它们非常困难,因为" /var/log/secure ...
- ajax请求成功和失败方法_创新需要反馈和失败的新方法
ajax请求成功和失败方法 今天,"组织文化"令人不解,有充分的理由. 越来越多的领导者意识到,渗透并指导其组织的文化将决定他们是成功还是失败. 术语"组织文化" ...
- ajax回调函数有时成功有时失败,javascript - Ajax 回调函数行为随机。我做错了什么?...
我有以下行为随机的 ajax 函数.有时会显示警报 success finally.在其他情况下,第二个警报是 显示 Failure: my status is 500. promptId 从调用函数 ...
- 事件管理决定一个网管软件的成功与失败
很多人用网管软件很长时间了,但是还是觉得用起网管软件来,很不方便.这是什么原因呢?认真分析种种原因,最终发现,原来是很多人并没有把网管软件中的事件管理用好. 什么是事件管理 首先向大家说明一下,什 ...
- gif 动态加载_搞笑GIF:这个游戏最大的成功就是失败!
҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈喜҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈欢҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈看҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈搞笑GIF动态图 ҉҉҈҉҉҉҈҉҉҉҈҈҉҉҈可҉҉҈҉҉҉҈҉҉҉҈҈ ...
- 最成功的失败学——《创游记:游戏团队创业成长之路》
游戏创业是九死一生的冒险,只有不到30%的团队能坚持到游戏开发完成:又只有10%的团队能把游戏卖出去:而最后只有1%的团队能赚到钱.玩家在应用商店下载到的游戏可能玩了两局就卸载掉了,吐槽一句:&quo ...
- 成功与失败——《异类》读后感
看完<异类>,才知道成功不是想象中那么简单. 知道这本书是因为那个一万小时定律,这个定律大概是说 一个人只要坚持专注于某一领域有一万个小时,那么他就能成为该领域的专家.这个理论给了 ...
- 求一颗二叉排序树查找成功和失败情况下的平均查找长度
/** * 实验题目: * 求一颗二叉排序树查找成功和失败情况下的平均查找长度 * 实验目的: * 掌握二叉排序树的查找过程及其算法设计 * 实验内容: ...
- WebView监听网页加载成功与失败
问题说明: 现在好多APP在应用中会内嵌webview,好多时候需要监听webview是否加载成功与失败.当加载成功的时候会回调WebViewClient的onPageFinished方法:当加载失败 ...
最新文章
- [译] Android 的多摄像头支持
- Java 自动装箱与拆箱
- 网络工程师要如何选择?
- .NET 6 中 gRPC 的新功能
- android java 时间格式化_(Java / Android)计算两个日期之间的日期,并以特定格式显示结果...
- JS获取元素的第一个子节点
- tcp/ip协议listen函数中backlog参数的含义
- react 使用rewired_使用react-app-rewired和customize-cra对默认webpack自定义配置
- win2008 server 多IP配置
- 北京理工大学计算机学硕考研科目,2021北京理工大学计算机考研科目
- “极狐•华为HI版本”的尴尬与困境
- zencart模板,外贸鞋子模板
- 证明:二阶导函数大于零时为凹函数
- 随机生成验证码,并判断是否正确(String版)
- Struggling
- Domino V12 Beta新玩法
- UI自动化框架 基于selenium+pytest和PO分层思想
- 金弘同创怎么样:拼多多获取奖励金的办法
- c++实现种子填充算法与扫描线算法
- 用Jquey实现双击图片放大和触摸放大的功能。
热门文章
- 网易云音乐数仓治理之数据任务重构实践
- C语言详解生成随机数的过程,time函数、时间戳timer、rand函数和srand函数,附猜数字小游戏
- 基于CNN模型的手写字符识别的分析与实现过程
- 坚果投影完成6亿元D轮融资,阿里巴巴领投
- Keysight N9010 仪器SCPI控制
- 大疆无人机 从Mavic Pro 兼容 Mavic 2 zoom (解决方案)
- Python十大经典语法合集
- hp9000 e25服务器 显示器,DIY瞎折腾 篇十五:又挽救了一台显示器-HP 2011X-附翻车过程...
- html分割线颜色怎么在css中写,html水平分割线 html 分割线颜色怎么变浅
- 动态规划解决编辑距离问题