首页 > 解决方案 > 如何实时解码ffmpeg中的视频?

问题描述

基本的 ffmpeg 解码包括avcodec_send_packet发送编码数据包和avcodec_receive_frame接收解码帧。

avcodec_send_packet返回EAGAIN以防它已满。也就是说,万一没有人打电话avcodec_receive_frame

假设我正在读取一个 mp4 文件并在屏幕上呈现。也就是说,我想要实时播放视频。一种方法是告诉渲染器文件具有的确切 fps,例如:

如果文件应该以 30 fps 的速度播放,那么渲染器avcodec_receive_frame每秒调用 30 次,并且avcodec_send_packet只有在可以时才发送新数据包。如果收到EAGAIN,它会等待并在 1 毫秒内再次发送,而不是丢弃数据包。

这是正确的做法吗?因为获取文件的 fps 并非易事。至少我从来没有在ffmpeg中看到过这个。也许 .mp4 文件有这些信息,但原始 .h264 文件呢?VLC 播放器可以在正确的时间播放原始 .h264,但我不知道它是如何做到的

标签: videoffmpegdecoding

解决方案


推荐阅读