我目前正在使用 VP8 和 V4L2 开发视频流软件,但我正在努力解决帧率的关键概念。
我有一个基本的工作实现,它在循环中获取帧,对其进行编码并通过 RTP 发送(尽可能快)。但是,我不明白如何控制视频的帧速率或调节采样。
基本上可以总结如下:
while (true) {
ioctl(fd, VIDIOC_DQBUF, buf); // Get the V4L buffer
vpx_codec_encode(...); // VP8 encode using pts and timebase
sendto(); // Send through RTP with the correct timestamp
}
特别是,我不知道如何正确设置:
- V4L2 捕获循环(是否需要一个计时器来定期获取帧?)
- V4L2 中的 FRAME INTERVAL 设置(是强制性的吗?)
- libvpx 时基(我应该使用 1/fps 吗?1001/30000 ?)
- pts 值(是否需要为 frame num * (1/fps) * 90000 ?)
- RTP 时间戳(我可以在这里使用 pts 吗?)
- 可以考虑的任何其他配置设置...