: 할당된 버퍼보다 더 많은 데이터를 쓰거나, 메모리를 덮어씌울 때 발생
WebRTC + Picamera2에서 이 에러가 발생하는 이유
코드 분석
⚪️ Picamera2 인스턴스를 여러 Track에서 공유하고 있음
➡️ get_camera_instance(index) 함수는 같은 카메라 index에 대해 하나의 객체만 생성해 공유
⚪️ recv() 메서드 안에서 .capture_array()가 병렬 호출됨
➡️ WebRTC에서 frame은 일정 간격으로 각 PeerConnection에 비동기 전달
➡️ 내부적으로 malloc 또는 free가 호출되며 상태가 꼬여서 발생
1. 하나의 카메라 인스턴스만 허용
➡️ 여기서 현재 문제 발생
: 이제 메모리 문제는 발생하지 않지만 카메라 2개가 동시에 가동되지 않는 상태
if camera_index in track_registry:
asyncio.create_task(track_registry[camera_index].stop())
2. 카메라 싱글턴 패턴 사용
track_registry[camera_index] = self
3. 비동기 접근 동기화
async with frame_lock:
frame = self.camera.capture_array()
4. 프레임 형식 검증
어제부터 채널을 맞추기 위해 코드를 이렇게 저렇게 수정하면서 하루하고도 반나절 동안 malloc()을 봤더니 이제 저것만 봐도 토할 것 같다.. 😩 카메라 2개가 들어와서 처리하기 문제였다는거까지는 깨달아서 이제 트랙을 조절하면 되겠다 하고 조절했다. 근데 이제 문제는 로봇이 외눈박이가 되어버렸다.. 목요일에 출근해서 이 부분을 고쳐야겠다 🥹
WebRTC → WebSocket으로 변경 (0) | 2025.07.15 |
---|---|
메모리 할당 충돌 오류-malloc() : 카메라 락 분리하기 (0) | 2025.07.10 |
라즈베리파이 VNC 접속 차단 (1) | 2025.07.07 |
[Error] Cors Error 해결 (0) | 2025.01.29 |
[GIT] 브랜치 내 충돌 해결 (0) | 2025.01.22 |