我有一个 gstreamer 管道 - 在这个环境中运行:
- 树莓派 3
- Class 10 闪迪 8GB SD 卡
- Raspbian Jessie,全部更新
- 罗技 C920 USB 2 网络摄像头
- 从源代码编译的 Gstreamer 1.8
- 无需额外的 USB 外围设备或设备
- 2A Apple USB 电源(iPad 充电器)
- 测试了使用和不使用有源 USB 集线器连接 C920
它捕获 H264 素材 (H264.720@24FPS)。我的流水线采用 C920 的 H264 编码输出,然后进行开球。它还捕获(alsa)C920 的音频,将其压缩为 AAC,然后就可以了。两个 T 恤的一条腿直接进入 FLV 多路复用器,然后放到磁盘上进行备份。发球台的第二段被解码(使用 OpenMax),然后以较低的比特率重新压缩(再次,OpenMax),最后,FLV 混合,并推送到 RTMP 服务器进行实时查看。
最终,结果看起来基本上是这样的:
CPU 占 400% 中的 50% 左右(记住四核 :))
现在是有趣的部分...
我已经完成了所有这些工作 - 完美。然后我把它全部关闭,休息一下。我晚上回来,启动代码......它运行了大约 10 秒,然后管道停止了。它没有停止、暂停或错误——它只是停止了——数据包停止写入磁盘和流。
有一些警告和错误,但我以前见过这些,它们对结果流没有影响,但现在,出于某种原因 - 它们对管道的健康状况来说是终端:
0:01:31.219560984 4075 0x1445400 WARN audiobasesrc gstaudiobasesrc.c:864:gst_audio_base_src_create:<alsasrc0> create DISCONT of 708160 samples at sample 2904320
0:01:31.219736087 4075 0x1445400 WARN audiobasesrc gstaudiobasesrc.c:869:gst_audio_base_src_create:<alsasrc0> warning: Can't record audio fast enough
0:01:31.219774941 4075 0x1445400 WARN audiobasesrc gstaudiobasesrc.c:869:gst_audio_base_src_create:<alsasrc0> warning: Dropped 708160 samples. This is most likely because downstream can't keep up and is consuming samples too slowly.
WARNING: from element /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0: Can't record audio fast enough
Additional debug info:
gstaudiobasesrc.c(869): gst_audio_base_src_create (): /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0:
Dropped 708160 samples. This is most likely because downstream can't keep up and is consuming samples too slowly.
所以,在拔掉我剩下的一点头发之后,我把它收拾起来,称之为一个晚上。今天早上,我再次抓住它,准备重新开始。我启动代码,然后……它又开始工作了……没有打嗝!这里发生了什么???
在它工作,不工作,然后再次工作之间唯一改变的是一天中的时间!
然后我有了一个想法。我运行代码几分钟。没有打嗝,一切都很好......然后,我把相机放在我的笔记本电脑包里,所以它什么都看不到。10 秒后,管道停止了!!!
我将管道简化为仅文件接收器(删除了 tee、OMX 元素和 rtmpsink),并重新运行了测试。这一次它并没有完全停止,但我收到了“无法以足够快的速度录制音频”的警告,并且生成的文件有明显的音频丢失。
所以 - 看起来,罗技 C920 在黑暗的环境中似乎会以某种方式窒息。
我注意到的其他东西,不确定这是否相关......但我的录音中总是有一些振荡的高频噪音(约 16khz)。如果我将相机举到耳边,我实际上可以听到相机发出相同的声音。如果我盖住相机上的镜头,声音就会停止。如果我关闭相机的自动对焦,并将绝对对焦级别设置为“0”,那么噪点也几乎消失了。我知道这不是一台无用的相机,因为我有大约 6 个,它们的行为方式都相同。我也知道它不是一个糟糕的 Raspberry Pi,因为我在所有这些上都试过了
- 3 * 树莓派 3
- 1 * 树莓派 2 B+
- 2 * 树莓派 B+
任何人都可以对此有所了解吗?
======================================
补充说明:
- 捕获 mjpeg(不激活相机上的 h264 编码器)可防止来自相机的可听噪音。表示噪音是由相机的 DSP 引起的。
- 捕获 mpjeg 会做一些有趣的事情……在相机处于黑暗中时,生成的视频文件似乎已经丢掉了很多帧……所以一旦它再次亮起,视频就会比音频领先几秒钟。