最近做android下视频采集+编码功能,已实现通过PreviewCallback回调的方式完成一帧一帧的yuv图像采集功能,本人想在NDK那边(so部分)完成这样的图像采集功能,是否可行呢?NDK是否提供了这样的API?感觉这样的效率可能高一些。

解决方案 »

  1.   

    ndk貌似没有权限直接调摄像头吧
      

  2.   

    对呀  调camera是个瓶颈呀
      

  3.   

    看来没有其他办法了?感觉android提供的接口还是很受限制啊,让开发人员比较为难。
      

  4.   

    你是自己开发平台,还是只是独立的软件?
    如果是自己开发平台,还是可以做到的,camera service本来也是用c写的。
      

  5.   

    那你还是老实一点用java接口去做吧,这样好兼容。
    目前我碰到的几个视频通话都是用java接口做的,网络状况好的话,效果还可以的。
      

  6.   

    谢谢楼上,看来没什么好的方法的话,只能这样了。目前我能采集到yuv420的图像了,可是用yuvviewer播放出来的时候,图片是花的。贴出我的代码吧(采集第50帧的yuv图片):
    class StreamIt implements Camera.PreviewCallback {
    public byte[] yuv420sp =null; public int  m_icount = 0;
    public void onPreviewFrame(byte[] data, Camera camera) 
    {
    // yuv420sp=data;
    ++m_icount;
    if (m_icount != 50)
    {
    return;
    }

    File save = new File("/sdcard/yuv420.yuv");
    FileOutputStream out = null;
    try 
    {
    out = new FileOutputStream(save);

    catch (FileNotFoundException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    try 
    {
    out.write(data, 0, data.length);

    catch (IOException e1) 
    {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    try 
    {
    out.close();

    catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  7.   

    在NDK中使用V4l2来编程,可以采集到YUV格式视频