flvmux 没有以与音频相同的速率拉取视频
flvmux not pulling video at same rate as audio
我有一个管道,旨在从 C920 相机捕获音频和视频,对其进行一些非常简单的处理(低 cpu 要求),然后重新压缩并将其混合到文件中。
这是管道的大致轮廓:
Platform:
- Raspberry Pi 3
- Debian Jessie
- GStreamer 1.8
不用担心我的 'simple processing' 地区。我的总体 CPU 低于 25% CPU。
我发现,Q3 和 Q4 慢慢开始充满,直到一个达到阈值,然后我的音频变得断断续续(我从 alsasrc 'downstreaming is not consuming buffers fast enough' 收到警告)。
我可以将泄漏放在队列中,但这很难解决问题。
由于我的管道是 运行,这就是我的队列的样子(当前级别时间,以毫秒为单位)
QUEUE CONTENTS IN MILLISECONDS
TIME(s) Q1 Q2 Q3 Q4 Q5 Q6
0 0 0 0 0 0 0
5 0 0 252 380 0 0
10 0 0 293 460 0 0
15 0 0 332 470 0 0
20 0 0 378 451 0 0
25 0 0 333 460 0 0
30 0 0 383 480 0 0
35 0 0 500 550 0 0
40 0 0 500 610 0 0
45 0 0 539 630 0 0
50 0 0 584 670 0 0
=== 实验 ===
我删除了管道的黄色段,这样我就只捕捉视频了,结果更好了。我没有排队 'growing' - 输出视频很完美。
QUEUE CONTENTS IN MILLISECONDS
TIME(s) Q1 Q2 Q3 Q4 Q5 Q6
0 0 0 0 0 0 0
5 0 0 2 0 0 0
10 0 0 5 0 0 0
15 0 0 8 0 0 0
20 0 0 8 0 0 0
25 0 0 8 0 0 0
30 0 0 8 0 0 0
35 0 0 8 0 0 0
40 0 0 8 0 0 0
45 0 0 8 0 0 0
50 0 0 8 0 0 0
此外,我尝试了以下管道(图中省略了队列),完全成功 - 视频至少录制了 10 分钟,没有任何问题。
=== 问题 ===
这是怎么回事?
我的猜测是,由于 Q3(视频输出)已满,因此音频一定会放慢速度。
因为 Q4 正在填满,而不是 Q5 - 这一定意味着 alsa 产生音频的速度比 aac 编码器压缩它的速度更快 - 对吗?
但是,我的 CPU 使用率非常低 - 我试过 2 个 aac 编码器(voaacenc 和 avenc_aac)和一个 MP3 编码器,都存在同样的问题。
========更新=========
我在音频和视频之后(紧跟其后)放置了几个标识元素,并绘制了它们输出的 PTS。你可以看到他们很快就开始疏远彼此。当视频为 30 秒时,音频远远落后于 21 秒。
这是图表
======== 更新 2 =========
我有第二个摄像头,把它换过来,问题就解决了。音频和视频 PTS 值保持同步至少 25 分钟。
这款新相机的不同之处在于它是经过改装的 C920,装有定制镜头。镜头碰巧完全失焦 - 这就是 PTS 漂移的原因(如果我聚焦自定义镜头,我会得到相同的 PTS 漂移)。
所以 - 问题有点变化:为什么对焦 C920 相机的 PTS 漂移如此严重?
注意:我正在关闭自动曝光,并将曝光绝对值设置为默认值 250。
但是我更希望能够使用自动曝光...
好的,我已经解决了这个问题。对于任何阅读 :)
如果您使用的是 Raspberry Pi,即使是 v3 - 确保您在 uvch264src
上将 peak-bitrate
配置为不超过 3650000
(3.65Mbps)。我还在以 24khz 的频率捕获音频 - 如果你不这样做,你可能会稍微多一点。
如果您将其设置为更多,或完全忽略它,您将遇到与我相同的奇怪问题。视频片段中的运动和高细节会导致编码的 H264 超出 Pi 的处理能力。所以你的问题会很奇怪和零星。
我只能认为 C920 使 USB 总线饱和 - 很奇怪,因为 USB2 应该可以达到 480Mbps - 而我设置的限制是 3.65Mbps。
我听说 Raspberry 有一个非常有缺陷的 USB 固件 blob - 但从未遇到过,直到现在。
问题已解决。我一直在考虑转向龙板...这可能给了我最好的理由。
我有一个管道,旨在从 C920 相机捕获音频和视频,对其进行一些非常简单的处理(低 cpu 要求),然后重新压缩并将其混合到文件中。
这是管道的大致轮廓:
Platform:
- Raspberry Pi 3
- Debian Jessie
- GStreamer 1.8
不用担心我的 'simple processing' 地区。我的总体 CPU 低于 25% CPU。
我发现,Q3 和 Q4 慢慢开始充满,直到一个达到阈值,然后我的音频变得断断续续(我从 alsasrc 'downstreaming is not consuming buffers fast enough' 收到警告)。 我可以将泄漏放在队列中,但这很难解决问题。
由于我的管道是 运行,这就是我的队列的样子(当前级别时间,以毫秒为单位)
QUEUE CONTENTS IN MILLISECONDS
TIME(s) Q1 Q2 Q3 Q4 Q5 Q6
0 0 0 0 0 0 0
5 0 0 252 380 0 0
10 0 0 293 460 0 0
15 0 0 332 470 0 0
20 0 0 378 451 0 0
25 0 0 333 460 0 0
30 0 0 383 480 0 0
35 0 0 500 550 0 0
40 0 0 500 610 0 0
45 0 0 539 630 0 0
50 0 0 584 670 0 0
=== 实验 ===
我删除了管道的黄色段,这样我就只捕捉视频了,结果更好了。我没有排队 'growing' - 输出视频很完美。
QUEUE CONTENTS IN MILLISECONDS
TIME(s) Q1 Q2 Q3 Q4 Q5 Q6
0 0 0 0 0 0 0
5 0 0 2 0 0 0
10 0 0 5 0 0 0
15 0 0 8 0 0 0
20 0 0 8 0 0 0
25 0 0 8 0 0 0
30 0 0 8 0 0 0
35 0 0 8 0 0 0
40 0 0 8 0 0 0
45 0 0 8 0 0 0
50 0 0 8 0 0 0
此外,我尝试了以下管道(图中省略了队列),完全成功 - 视频至少录制了 10 分钟,没有任何问题。
=== 问题 ===
这是怎么回事?
我的猜测是,由于 Q3(视频输出)已满,因此音频一定会放慢速度。 因为 Q4 正在填满,而不是 Q5 - 这一定意味着 alsa 产生音频的速度比 aac 编码器压缩它的速度更快 - 对吗? 但是,我的 CPU 使用率非常低 - 我试过 2 个 aac 编码器(voaacenc 和 avenc_aac)和一个 MP3 编码器,都存在同样的问题。
========更新=========
我在音频和视频之后(紧跟其后)放置了几个标识元素,并绘制了它们输出的 PTS。你可以看到他们很快就开始疏远彼此。当视频为 30 秒时,音频远远落后于 21 秒。 这是图表
======== 更新 2 =========
我有第二个摄像头,把它换过来,问题就解决了。音频和视频 PTS 值保持同步至少 25 分钟。 这款新相机的不同之处在于它是经过改装的 C920,装有定制镜头。镜头碰巧完全失焦 - 这就是 PTS 漂移的原因(如果我聚焦自定义镜头,我会得到相同的 PTS 漂移)。
所以 - 问题有点变化:为什么对焦 C920 相机的 PTS 漂移如此严重? 注意:我正在关闭自动曝光,并将曝光绝对值设置为默认值 250。 但是我更希望能够使用自动曝光...
好的,我已经解决了这个问题。对于任何阅读 :)
如果您使用的是 Raspberry Pi,即使是 v3 - 确保您在 uvch264src
上将 peak-bitrate
配置为不超过 3650000
(3.65Mbps)。我还在以 24khz 的频率捕获音频 - 如果你不这样做,你可能会稍微多一点。
如果您将其设置为更多,或完全忽略它,您将遇到与我相同的奇怪问题。视频片段中的运动和高细节会导致编码的 H264 超出 Pi 的处理能力。所以你的问题会很奇怪和零星。
我只能认为 C920 使 USB 总线饱和 - 很奇怪,因为 USB2 应该可以达到 480Mbps - 而我设置的限制是 3.65Mbps。 我听说 Raspberry 有一个非常有缺陷的 USB 固件 blob - 但从未遇到过,直到现在。
问题已解决。我一直在考虑转向龙板...这可能给了我最好的理由。