我试图使用libavcodec和libavformat实时使用mp4编写一个h264视频文件。我正在使用一种深受这个答案启发的方法-- here --作为一种非实时解决方案,它工作得很好,但是,avcodec_receive_packet()在大约20帧后开始运行得慢得多(这通常是它第一次返回成功,因此第一次调用av_interleaved_write_frame() )。这太慢了,我的写作不能实时完成。
我尝试过的解决办法:
avcodec_receive_packet()和av_interleaved_write_frame()在一个单独的线程上,从实时视频sourcegop_size,在视频上下文中捕获avcodec_receive_packet()和av_interleaved_write_frame(),在视频上下文中使用我遗漏了什么吗?可能是一些实时拍摄视频的基本规则。我对视频编程不是很有经验。
发布于 2022-11-01 09:27:36
我已经解决了这个问题,不使用h.264编码,而是使用libavcodec的mpeg2video编码器。这将导致更大的文件大小,但是逐帧编码的处理时间要一致得多。感谢@G.M.对此的评论。我还没有测试过任何其他编码器,所以这些可能也会有所帮助。
另一个可能的解决方案是使用@VC.One提到的GPU加速,但是对于我的用例来说,这是不可行的,因为运行的目标硬件是未知的。一种可能的混合方法是确定代码中的目标硬件,如果有足够强大的GPU可用,则启用带有GPU处理的H.264;如果没有,则使用mpeg2video编码。
https://stackoverflow.com/questions/74263795
复制相似问题