最近学习使用ffmpeg时,遇到了不少的困难,这两天终于解决了两个,下面把解决方法记录下来:
一、avcodec_encode_video调用时程序崩溃
这个错误一直困扰了我很多天,而且 没有一点进展,我本以为是ffmpeg编译的问题,结果换了好几个版本都不行,最后,还是对比别人的代码时,发现自己在代码中avcodec_encode_video函数的调用中,第一个参数AVCodecContext*传错了,我给写成了解码时用的那个AVCodecContext。修改后再进行测试,这个函数的调用就没有问题了。这个低级的错误让我浪费了太多时间,真是后悔自己不该这么粗心。
二、av_write_frame调用时程序崩溃
又是程序崩溃,搞得我都要崩溃了,上面编码的问题解决了,下面写文件又不行了,真是苦恼。这次我长记性了,先仔细检查了一遍自己的代码,看看是不是又有哪里粗心大意搞错了,结果检查了几遍都没问题,唉,没办法,又开始在论坛里发帖子求高人帮助,谁知几天过去了还是没有进展,最后,还是在网上看到的一份代码,仔细阅读后发现它比我多了如下几行:
if (url_fopen(&pFormatCtxEncoder->pb, output_file, URL_WRONLY) < 0) {
fprintf(stderr, "Could not open '%s'\n", output_file);
return 1;
}
}
原来输出文件是要自己打开的呀,真是让我哭笑不得,ffmpeg里的例子代码都是自己开文件自己写文件,没有用到av_write_frame,结果我就照着例子写,自然也就没有这个打开文件的过程了,真是让我郁闷。
总之,这两个问题解决了,我的第一个转码程序就成功执行了。不过,对于ffmpeg现在我还是云里雾里一样,不是很了解,所以后面的问题肯定还是多多,在这里也希望寻找一些有同样爱好的朋友一起来研究,当然,最渴望的还是有遇到困难时,能有高人指点迷津呀!