저는 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
는 상호 배타적입니다. 스트림이 복사되면(다시 인코딩되지 않음) ffmpeg는 데이터 속도에 영향을 미치지 않습니다(패딩 제외). 따라서 카메라에서 출력되는 데이터 속도는 ffmpeg가 통과하는 데이터 속도가 됩니다.
두 가지 옵션이 있습니다:
- (의 라인을 따라) 비디오를 다시 인코딩
-c:v h264 -b:v 2M
하지만 RasPi가 카메라 서버를 실행하면서 그렇게 할 만큼 충분한 성능을 가지고 있는지 의심스럽습니다. - 카메라 서버가 정상적인 출력 속도를 생성하도록 하십시오. 이것이 제가 문제에 접근하는 방식입니다. 우선 어떤 출력 옵션과 설정이 허용되는지 살펴보겠습니다.