저는 C# 코드에서 30FPS의 비디오 프레임을 가지고 있으며 다른 모든 응용 프로그램에서 사용할 수 있도록 로컬 호스트에서 브로드 캐스팅하려고합니다. 나는 비디오이기 때문에 어떤 패킷 손실 및 클라이언트에서 연결/받아 들일 필요가 없다면 걱정할 필요가 없다. UDP는 좋은 선택이다.소켓을 통한 비디오 전송 프레임
하지만 여기에는 많은 문제가 있습니다.
- 나는 UDP 유니 캐스트 속도 (CPU 사용이 적합하지 않습니다 내 4 코어 CPU에 하나 개의 스레드에 100 %를 평균 25 % 이다. 그러나 적어도 그것의 충분한 세트를 보내 초당 25에 대해, 충분히 사용하는 경우 데이터). 그러나 유니 캐스트 캔트는 모든 클라이언트에 데이터 을 전달합니다.
- 브로드 캐스트 속도를 사용하는 경우 매우 낮습니다. 동일한 CPU 사용으로 약 10FPS.
어떻게해야합니까?! 데이터는 동일한 컴퓨터에 있으므로 LAN이나 기타 등에서 원격 액세스 할 필요가 없습니다. 단지 동일한 기계의 서로 다른 애플리케이션간에 초당 약 30MB의 데이터를 전송하는 방법이 필요합니다. (640x480은 픽셀 당 이미지 x 30fps x 3byte의 고정 크기가 약 27000KByte/초입니다.)
- UDP 멀티 캐스트의 성능은 더 좋습니까?
- 각 클라이언트를 수락하더라도 TCP가 더 나은 성능을 제공 할 수 있습니까? 및 독자적으로 보낼 수 있습니까?!
- 소켓보다 더 좋은 방법이 있습니까?! 메모리 공유 또는 뭔가?!
- 왜 UDP 방송이 그렇게 느린가요?! 초당 약 10MB!?
- 고성능 프레임을 압축하는 빠른 방법이 있습니까 ( 초 30fps 인코딩 및 다른 부분의 디코딩)? 클라이언트 응용 프로그램은 C++에 있으므로 크로스 플랫폼 방식이어야합니다.
여기서는 다른 개발자의 경험과 아이디어를 알고 싶습니다. 생각해보십시오. 도움 주셔서 감사합니다.
편집 : 데이터에 대한
상세 정보 : 데이터 비트 맵 RGB24 형식으로되어 그들이 30FPS 내 응용 프로그램에 장치에서 스트리밍된다. 이 데이터를 다른 응용 프로그램에 브로드 캐스팅하고이 이미지를 RGB24 형식으로 다시 가져와야합니다. 어떤 헤더 나 어떤 것이 없으며 고정 된 크기의 비트 맵 데이터 만 존재합니다. 모든 작업은 즉시 수행해야합니다. 손실 압축 알고리즘이나 어떤 것을 사용 하든지 관계 없습니다.
어떤 이유로 많은 기존의 스트리밍 비디오 프로토콜 중 하나 적합하고 많은 비디오 스트리밍 솔루션 중 하나를 사용하여 왜 작동하지 않습니다이 있습니까 : 여기
는 파일 매핑으로 시작하는 샘플입니다? 이것은 여러 가지 다른 방법으로 해결 된 문제입니다. 분명히 그러한 방법 중 하나가 당신의 필요를 충족시켜야하며 바퀴를 다시 발명 할 필요가 없습니다. – Pete@ Pete, UDP 기반의 크로스 플랫폼 (.Net, C++) 비디오 스트리밍 라이브러리를 아십니까? 불행하게도 나는 그것을 발견 할 수 없다. 라이브러리없이 이러한 프로토콜 중 하나를 구현하는 것이 전체 솔루션을 발명하는 것이 쉽지 않기 때문에. –
FFMPEG 체크 아웃 – Pete