关于ffmpeg新API avcodec_send_packet 和avcodec_parameters_to_context 出现无法解码的问题

试试名字能够有多长 2017-09-23 10:22:45
3.2版本的ffmpeg中使用了新的API,avcodec_parameters_to_context来初始化AVCodecContext结构体,但是这样初始化的结构体比AVStream中的codec成员少了很多信息,导致后续使用avcodec_send_packet函数时出错,有没有人遇到过相似的问题?
使用
代码如下

video_codec = avcodec_find_decoder(param->codec_id);
if (!video_codec)
{
fprintf(stderr, "ERROR: Finding video codec FAILED!\n");
goto end;
}
video_codec_context = avcodec_alloc_context3(video_codec);//使用此句会出现问题
video_codec_context = stream->codec;//使用此句能够正常解码
if (!video_codec_context)
{
fprintf(stderr, "ERROR: Allocating video codec FAILED!\n");
goto end;
}
ret = avcodec_open2(video_codec_context, video_codec, NULL);
if (ret < 0)
{
fprintf(stderr, "ERROR: Opening video codec FAILED!\n");
goto end;
}
ret = avcodec_parameters_to_context(video_codec_context, param);
if (ret < 0)
{
fprintf(stderr, "ERROR: Filling video codec context FAILED!\n");
goto end;
}

错误如下:
...全文
4280 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
祝哥靓 2021-06-25
  • 打赏
  • 举报
回复

虽然过去很久了,但我今天也遇到这个问题,也解决了,就放上来吧,

你应该是想处理视频,但它读出的是音频,所以需要先判断是否视频,再处理

具体步骤:

av_read_frame成功后,

先检测一下AVPacket.stream_index是否是视频(一般来讲,即是av_find_best_stream返回的那个值)

 是视频则再调用avcodec_send_packet 及后继处理

不是就继续av_read_frame

 

  • 打赏
  • 举报
回复
引用 4 楼 夏天的一叶 的回复:
楼主 您好 像像您请教关于FFMpeg的问题 方便加下微信吗
我已经不搞ffmpeg了
  • 打赏
  • 举报
回复
我现在已经不搞ffmpeg了
夏天的一叶 2020-10-16
  • 打赏
  • 举报
回复
楼主 您好 像像您请教关于FFMpeg的问题 方便加下微信吗
爱吃de兔子 2020-04-19
  • 打赏
  • 举报
回复
楼主请教一个问题,我最近在学习ffmepg,AVCodecContext被替代以后,很多变量没有了,比如参考帧refs变量,怎么都获取不到,楼主您知道最新版本的refs参考帧变量放哪里去了吗?需要怎么才能获取呀?望回复,非常感谢!
路口游子 2019-08-11
  • 打赏
  • 举报
回复
这个错误你解决了吗?

2,275

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 Flash流媒体开发
社区管理员
  • Flash流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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