我是 StackOverflow 新手。我不知道如何正确组织问题。
我正在尝试为我的项目创建媒体流服务器,其中树莓派摄像头将流式传输到 nginx rtmp 服务器,而我的计算机将定期从流中分块并将其保存为.h264
。
这是我正在运行的 ffmpeg 命令picamera
(我正在使用 python 2.7 和 picamera 库)。
cmdline = ['ffmpeg', '-i','-','-vcodec','copy','-crf','30','-maxrate','2M','-bufsize',' 1M','-an', '-f','flv', Cam_URL]
logger.debug("Starting the streaming process to server")
rtmpstream = subprocess.Popen(cmdline, stdin=subprocess.PIPE)
try:
camera.framerate = 24
camera.resolution = (1280, 720)
camera.brightness = int(config_hash['Brightness'])
camera.rotation = int(config_hash['Rotation'])
camera.iso = int(config_hash['ISO'])
camera.sharpness = int(config_hash['Sharpness'])
camera.start_recording(rtmpstream.stdin, quality = 20,bitrate = 0, format = 'h264')
ffmpeg
在我的计算机上:
ffmpeg -i (media server url) -vcodec copy -maxrate 2M -bufsize 1M qwertyuip.h264
在录制之前,pi 上的比特率保持恒定在 2Mbits 左右,但当我开始在 PC 上录制时,pi 上的比特率会疯狂增加到 11000kbits。这耗尽了我所有的带宽。
您能帮助我保持几乎恒定的比特率吗?
答案1
选项-vcodec copy
和-maxrate 2M
是互斥的:如果流被复制(aot重新编码),ffmpeg 对数据速率没有影响(除了填充) - 因此相机输出的数据速率将是ffmpeg 传输的数据速率。
您有两个选择:
- 重新编码视频(类似
-c:v h264 -b:v 2M
),但我怀疑 RasPi 在运行摄像头服务器时是否有足够的能力做到这一点 - 让您的相机服务器产生合理的输出速率。这是我解决问题的方法,首先查看它允许哪些输出选项和设置。