我是 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 在運行相機伺服器時是否有足夠的能力來執行此操作 - 讓您的相機伺服器產生合理的輸出速率。這就是我解決問題的方法,首先看看它允許哪些輸出選項和設定。