Sou novo no StackOverflow. E não sei como estruturar a pergunta corretamente.
Estou tentando criar um servidor de streaming de mídia para meu projeto, onde uma câmera framboesa será transmitida para o servidor nginx rtmp e meu computador periodicamente criará pedaços dos fluxos e os salvará como arquivos .h264
.
Este é o meu comando ffmpeg em execução picamera
(estou usando python 2.7 e biblioteca 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
na minha máquina:
ffmpeg -i (media server url) -vcodec copy -maxrate 2M -bufsize 1M qwertyuip.h264
A taxa de bits no pi permanece constante em torno de 2 Mbits antes da gravação, mas quando começo a gravar no meu PC, a taxa de bits no pi aumenta loucamente para 11.000 kbits. Isso está consumindo toda a minha largura de banda.
Você pode me ajudar a manter uma taxa de bits quase constante?
Responder1
As opções -vcodec copy
e -maxrate 2M
são mutuamente exclusivas: Se o fluxo for copiado (aot reencodificado), o ffmpeg não terá influência sobre a taxa de dados (além do preenchimento) - portanto, a taxa de dados emitida pela sua câmera será a taxa de dados que o ffmpeg transmite.
Você tem duas opções:
- Reencodifique o vídeo (nos moldes de
-c:v h264 -b:v 2M
), mas duvido que o RasPi tenha força suficiente para fazer isso enquanto executa o servidor da câmera também - Faça com que seu servidor de câmera produza uma taxa de saída razoável. É assim que eu abordaria o problema, primeiro observando quais opções e configurações de saída ele permite.