1

カメラでキャプチャされたフレームを取得してエンコードし、最終的に RTP/RTSP を使用して送信しようとしています。

キャプチャを行うには、stagefright の CameraSource クラスを使用しています。画面上のプレビュー (Java から渡された Surface) は素晴らしいです。しかし、フレームを抽出しようとすると、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;
}
4

2 に答える 2

1

あなたはすべてを正しく行っていますが、Samsungはあなたが実装しようとしたルートをサポートしないことにしました。Galaxy S2(および他の多くのSamsungデバイス)でCameraSourceを使用する唯一の方法は、ハードウェアエンコーダーに直接接続することです。

于 2012-12-16T18:16:39.257 に答える
0

20 バイトは、実際には、カメラとビデオ エンコーダーの間の通信に使用されるある種のメタデータです。このデータの解釈方法を知らなければ、このデータからビデオ フレームを抽出することは困難です。

于 2013-02-10T06:33:24.510 に答える