Video streaming 使用raspivid和cvlc以及低帧率和全视野

Video streaming 使用raspivid和cvlc以及低帧率和全视野,video-streaming,frame-rate,Video Streaming,Frame Rate,我有一个覆盆子圆周率与OV5647相机模块,我用它来流视频 raspivid接受一个名为--mode,-md的命令行参数,该参数提供了相机可以设置使用的两种模式 Mode Size AR Frame rates FOV Binning 0 automatic selection 1 1920x1080 16:9 1-30fps Partial None 2 2592x1944 4:3 1-15fps Full None

我有一个覆盆子圆周率与OV5647相机模块,我用它来流视频

raspivid
接受一个名为
--mode,-md
的命令行参数,该参数提供了相机可以设置使用的两种模式

Mode  Size      AR Frame rates    FOV    Binning
0   automatic
    selection
1   1920x1080  16:9     1-30fps  Partial None
2   2592x1944   4:3     1-15fps  Full    None
3   2592x1944   4:3 0.1666-1fps  Full    None
4   1296x972    4:3     1-42fps  Full    2x2
5   1296x730   16:9     1-49fps  Full    2x2
6    640x480    4:3  42.1-60fps  Full    2x2 plus skip
7    640x480    4:3  60.1-90fps  Full    2x2 plus skip
我宁愿有一个低帧率和良好的图像质量,而不是高FPS

对于高质量的视频,我希望以全高清1920x1080流媒体,但是相机的模式
1
只提供了部分视场,这大大减少了拍摄区域,我真的需要全视场

我想选择模式
2
,这样我就可以以15 FPS的速度以全高清播放缩小的视频

然而,我不得不使用mode
4
,因为它给我的帧速率是25fps

问题如下:

raspivid -o - \
         -t 0 \
         -n \
         -hf -vf \
         -g 25 \
         -pf high \
         -md 4 \
         -fps 25 \
         -b 10000000 \
| cvlc -vvv \
    stream:///dev/stdin \
    --no-audio \
    --sout '#standard{access=http,mux=ts,dst=:8090}' \
    :demux=h264
这个命令有效。它将摄像头设置为模式
4
,使用
25
的fps,并将视频导入
clvc

当我将模式设置为
2
并将fps降低到
15
时,这将不再起作用

出于某种原因,
cvlc
似乎期望帧速率为25,并记录了大量的警告

[73b02cf8] main mux warning: late buffer for mux input (17958)
[73b02cf8] main mux warning: late buffer for mux input (2025)
[73b02cf8] main mux warning: late buffer for mux input (14107)
[73b02cf8] main mux warning: late buffer for mux input (2890)
[73b02cf8] main mux warning: late buffer for mux input (20115)
开头还有一条信息性消息,声称

[73b12410] main decoder debug: using packetizer module "h264"
[73e00568] main input debug: switching to sync mode
[73b088b8] h26x demux debug: using 25.00 fps
因此,我假设我得到了那些
延迟缓冲区
警告,因为raspivid发送到的fps很少,编码器没有足够的数据。视频大约每10秒冻结一次,真的让它无法使用。当它移动时,它会加速


我如何告诉h264编码器它应该以15 FPS的输入输出速度而不是25 FPS的输出速度工作?

您可以通过将
--h264 FPS=15
添加到
cvlc
来实现这一点

raspivid -o - \
         -t 0 \
         -n \
         -hf -vf \
         -g 15 \
         -pf high \
         -md 2 \
         -fps 15 \
         -br 55 \
         -ISO 800 \
         -ae 32,0x00,0x8080FF \
         -a 4 \
         -a "%Y-%m-%d %X" \
         -b 10000000 \
| cvlc -vvv \
    stream:///dev/stdin \
    --no-audio \
    --demux=h264 \
    --h264-fps=15 \
    --sout '#standard{access=http,mux=ts,dst=:8090}'
在Raspberry Pi Zero上,您必须将
force_turbo=1
添加到
\boot\config.txt
,但不设置
过电压
arm_freq
,因为这将使保修无效。如果没有
force_turbo=1
,设备将在流媒体播放数小时后冻结