2012-09-03 3 views
1

카메라로 캡처 한 프레임을 잡고, 인코딩하고 마지막으로 RTP/RTSP를 사용하여 전송합니다.stagefright CameraSource :: read가 삼성 Galaxy S2의 작은 프레임 (20 바이트)을 반환합니다.

캡쳐를하려면 stagefright의 CameraSource 클래스를 사용하고 있습니다. 화면의 미리보기 (자바에서 전달 된 서피스)가 좋습니다. 그러나 프레임을 추출하려고하면 프레임이 20 바이트가됩니다.

내가 뭘 잘못하고 있니?

Size videoSize; 
videoSize.width = 352; 
videoSize.height = 288; 
sp<CameraSource> myCamera = CameraSource::CreateFromCamera(NULL, NULL, 
          1 /*front camera*/, videoSize, 25, mySurface, true); 
myCamera->start(); 

//the following is from a reader thread. 
status_t err = OK; 
MediaBuffer* pBuffer; 
while ((err = myCamera->read(&pBuffer)) == OK) 
{ 
    // if not getting a valid buffer from source, then exit 
    if (pBuffer == NULL) 
    { 
     return; 
    } 
    else 
    { 
     LOGD("The Size of the returned buffer is: %d", pBuffer->size()); 
    } 
    pBuffer->release(); 
    pBuffer = NULL; 
} 

답변

1

모든 것을 올바르게하고 있지만 삼성은 구현하려고 시도한 경로를 지원하지 않기로 결정했습니다. Galaxy S2 (및 다른 많은 삼성 장치)에서 CameraSource를 사용하는 유일한 방법은 직접 하드웨어 인코더에 연결하는 것입니다.

+0

어떻게하면 카메라의 콜백이 작동하고 원시 프레임 버퍼가 제공됩니까? – Pavel

0

20 바이트는 실제로 카메라와 비디오 엔코더 사이의 통신에 사용되는 일종의 메타 데이터입니다. 이 데이터를 해석하는 방법을 모르면이 데이터에서 비디오 프레임을 추출하기가 어렵습니다.