【问题标题】:How to access the Camera via Bluetooth?如何通过蓝牙访问相机?
【发布时间】:2014-03-12 18:06:35
【问题描述】:

这就是我想要实现的。 我有 2 台安卓设备,我想通过蓝牙访问第二台的摄像头并在第一台上显示预览。

任何提示如何做到这一点?

基本上我想通过蓝牙获取另一个安卓设备的相机实例。

【问题讨论】:

    标签: android camera android-bluetooth


    【解决方案1】:

    简答:

    您无法通过这种方式获得直接实例。也就是说 - 你不会得到一个可以正常使用的相机对象。相反,您将不得不大量伪造它。

    长答案:

    您将不得不在两台设备之间建立蓝牙客户端/主机关系。完成后,您将设置一个作为这种关系的“控制”方面,另一个作为相机。我们将它们称为 1 和 2。

    1 将有一个 UI(拍照按钮等)。当一个按钮被按下时,一个命令将向下移动到 2。

    2 然后将按照命令请求并将一些数据传回 1。

    在拍照的情况下:

    用户在 1 中按下拍照按钮。 1 向 2 发送“拍照”命令。 2 然后根据您的指示使用此命令拍照。 2 然后通过蓝牙将这张图片的文件结果发回。

    对于进行图像预览 - 即在您实际单击“捕获”之前查看图像是什么 - 我认为您不会有太多运气。您可以按照上述模式执行此操作,但我怀疑这是否会是顺畅的体验。

    编辑:

    在 cmets 中与 Alex 进行了一些讨论,并对此进行了一些思考,我有一些想法可供预览。

    关注点:

    如果您可以从 2 到 1 获得大约 10-15 fps,则可以进行合理的预览。根据您的需求/用例,可能更少。

    你需要实现

    Camera.PreviewCallback:
    
    onPreviewFrame(byte[] data, Camera camera); :
    

    http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html#onPreviewFrame(byte[], android.hardware.Camera),并注册你的回调

    相机

    setPreviewCallback(Camera.PreviewCallback cb)
    

    您需要缩减采样(可能,我不确定 onPreviewFrame 中提供的内容的大小)以保持较小的内容大小。

    4) 发送。

    我不完全确定这是否可行,因为我没有测试过,但这是我看到的最直接的路线。

    另一种选择:

    进入 JNI 并在那里处理整个事情。就速度而言,您几乎可以肯定地在那个水平上完成这项工作。我对如何做到这一点有模糊的想法,但这将是一项相当艰巨的任务。

    【讨论】:

    • 致我的第一个支持者 - 谢谢你让我超过 1k =)
    • 要获得合理质量的实时预览,您需要说 VGA 分辨率为 15 FPS。这提供了不到 1Mbps 的速度(请参阅stardot.com/bandwidth-and-storage-calculator),并且适合蓝牙基本速率 (BR) 的带宽。但是你需要 h264 编解码器。
    • 并不是说这是不可能的,但 15 fps 是我所说的“流畅”体验的最底端。此外 - 标准的 Android Camera API 不会为您提供 VGA 分辨率的帧。
    • 如今,VGA 是一种最小公分母。对于 4 英寸手机上的照片取景器,甚至更少可能就足够了。您会惊讶地发现 15 FPS 的实际感觉是多么流畅(但我们不是在谈论以这种速率和分辨率录制视频)。
    • 我刚刚以 15 fps 观看了一些视频,你说得对,这并不可怕。也是的,VGA 是 LCD 没有参数。再一次 - 我认为这是可行的,但它需要大量的微调才能在蓝牙上获得体面的预览。此外,内置的预览机制并没有提供直接的途径来进行预览图像传输。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多