2009-12-01 5 views
6

저는 사진 스트림을 생성 한 다음 비디오 스트림으로 다른 응용 프로그램으로 전송하는 C++ 응용 프로그램을 빌드 할 것입니다. 어떻게 시작할 수 있을지에 대한 아이디어가 있습니까? 무슨 뜻인지, 어떤 라이브러리를 사용해야하며 인코딩은 무엇입니까? MJPEG, UDP 또는 RTP 프로토콜에 대해 생각하고 있습니다 .... 어떤 도움을 주시면 감사하겠습니다.C++을 사용한 비디오 스트리밍

답변

5

입력 데이터가 비디오가 아니라 임의의 이미지 일 경우 "비디오 스트리밍"을 수행하지 않을 것입니다. 당신은 단지 전체 이미지들을 보내 게 될 것입니다. 비디오 인코딩 기술을 포함 할 필요가 없으며 가장 단순한 이미지 전송 만 수행하면됩니다. 비디오 인코더는 실제 비디오에서 일반적인 것처럼 이전 프레임과 다양한 관계가있는 각 프레임에 의존합니다. 임의 이미지의 입력에 대해서는 압축 할 수 없으며 단일 프레임 압축 (예 : JPEG/PNG/기타)이 이미 입력 데이터에 적용될 가능성이 큽니다.

아마도 각 파일의 내용을 원본 파일 이름과 함께 보내고받는 클라이언트가 디스크에 파일을 다시 만들고 기존 디스크 지향 라이브러리를 사용하여 이미지를 열고 디코딩하게하십시오.

아마도 복잡하고 오류가 발생하기 쉬운 UDP/RTP 기반 솔루션을 사용해야한다는 요구 사항에는 TCP를 사용해야합니다.

+2

예외는 "모션 JPEG"(MJPEG)입니다. 실제로는 각 프레임에 작은 헤더가있는 JPEG 압축 프레임 시퀀스입니다. Canon 디지털 카메라는이 형식으로 비디오를 캡처했습니다. –

+0

이미지 묶음과 비디오 스트림 (압축 유형 제외)의 차이점은 비디오 스트림에서 시간 동기화가 있다는 점입니다. –

0

스트림을 인코딩 할 때 ffmpeg 라이브러리를 사용하고 스트림을 보내기 위해 RTP/RTSP 스택을 사용하십시오.

5

스트리밍 파트의 ​​경우 Live555을 사용할 수 있습니다. 필요한 모든 것을 다 커버해야합니다. MJpeg 스트림을 생성하는 문제는 여전히 남아 있습니다. 여기서 추측 할 수있는 것은 FFMpeg입니다. (스트리밍도 포함되어 있으므로이 광고 만 필요할 수도 있습니다.) MJpeg가 당신에게 매우 적합하다고 생각합니다. TCP 또는 UDP의 경우 사용 방법에 따라 다릅니다. UDP는 스트림 멀티 캐스트를 만들고 싶다면 의미가 있습니다. 그렇지 않으면 더 신뢰할 수 있기 때문에 TCP를 선호합니다.

희망 유용한 힌트입니다.