avio_alloc_context注册回调 + av_interleaved_write_frame一段时间后,回调函数不执行

everything_at_once 2018-11-19 10:33:39
ffmpeg接受网络流,执行注册write_packet回调函数,取出av_interleaved_write_frame后的数据,保存为文件

dst_avio_ctx->write_flag = 1;
ofmt_ctx->flags = AVFMT_FLAG_CUSTOM_IO;
ofmt_ctx->pb = m_dst_avio_ctx;
dst_avio_ctx = avio_alloc_context(m_write_dst_buf, IO_BUFFER_SIZE, 0, (void*)this, NULL, cb_write_dst_data, NULL);

但执行一段时间后(大约36小时),回调函数cb_write_dst_data就不会执行,但是av_read_frame-av_interleaved_write_frame都正常执行。
是不是需要设置一些参数?
...全文
283 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
英雄@末路 2018-11-27
  • 打赏
  • 举报
回复
自己定义Pts时间长了也会循环啊,90K 的时钟,按33bit 算,也就一天多,估计就是你那个30多小时?
rightorwrong 2018-11-27
  • 打赏
  • 举报
回复
是一个rtp包里的pts跨度太大吧,对于一帧数据进行拆分处理时判断当前pts预留出一些。新的一帧重新计数
everything_at_once 2018-11-26
  • 打赏
  • 举报
回复
引用 3 楼 rightorwrong 的回复:
是不是一些值溢出
发现问题了,由于当前程序完成的是转码功能,原始流的pts一段时间后会出现差异较大的变化,比如之前一直是从600000累加,突然降到200000,从新的pts开始继续累加,这样就会返回-22的错误,请问这种问题有什么好的办法?是编码时自定义pts么?
everything_at_once 2018-11-26
  • 打赏
  • 举报
回复
发现问题了,由于当前程序完成的是转码功能,原始流的pts一段时间后会出现差异较大的变化,比如之前一直是从600000累加,突然降到200000,从新的pts开始继续累加,这样就会返回-22的错误,请问这种问题有什么好的办法?是编码时自定义pts么?
rightorwrong 2018-11-26
  • 打赏
  • 举报
回复
是不是一些值溢出
everything_at_once 2018-11-22
  • 打赏
  • 举报
回复
引用 1 楼 rightorwrong 的回复:
是windows环境吗,调试看看。会不会那里阻塞了
经测试,问题出现在av_av_interleaved_write_frame这里,运行一段时间(约30个小时左右)后,该函数执行会报错,返回-22 程序内部主要是转码,解码视频后压缩重新编码,音频未改变,视频的pts在编码是赋值为frame->best_effort_timestamp,具体情况还要测试。 请问出现这种情况是什么原因?
rightorwrong 2018-11-20
  • 打赏
  • 举报
回复
是windows环境吗,调试看看。会不会那里阻塞了

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧