【问题标题】:stagefright CameraSource::read returns small frames (20 bytes) on Samsung Galaxy S2stagefright CameraSource::read 在三星 Galaxy S2 上返回小帧(20 字节)
【发布时间】:2012-08-28 04:20:27
【问题描述】:

我正在尝试抓取相机捕获的帧, 对它们进行编码,最后使用 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;
}

【问题讨论】:

    标签: android android-ndk streaming stagefright


    【解决方案1】:

    这 20 个字节实际上是某种元数据,用于在相机和视频编码器之间进行通信。除非您知道如何解释这些数据,否则很难从这些数据中提取视频帧。

    【讨论】:

      【解决方案2】:

      您所做的一切都是正确的,但三星决定不支持您尝试实施的路线。在 Galaxy S2(和许多其他三星设备)上使用 CameraSource 的唯一方法是将其直接连接到硬件编码器。

      【讨论】:

      • 相机的回调如何工作并提供原始帧缓冲区?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多