video - 如何实时解码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,但我不知道它是如何做到的
解决方案
推荐阅读
- android - 主页和后退按钮在 android 模拟器像素 2 和像素 3 api 中不起作用
- conv-neural-network - 为 InceptionResnetV2 设置输入形状
- reactjs - OnClick 功能关闭一个模式并打开另一个
- java - Flutter 无法连接到我的 Java websocket
- python - positional_or_keyword_parameters 和 var_positional_parameters 之间的冲突?
- typescript - 不使用 typeorm 关系
- c# - 尝试创建类的新实例时,请获取 CS7036 C# 没有给出与所需的形式参数相对应的参数
- javascript - 如何在 HTML/EJS 页面中将节点 Js sql 查询结果显示为下拉列表
- python-3.x - 使用 python 打印文件打印 n 个最大字符/行
- vba - Visual Basic - 使用名称中的变量引用组合框