Подтвердить что ты не робот

Android - используйте камеру без просмотра поверхности или текстуры

Я пытался выяснить, есть ли способ использовать камеру для съемки видео или изображений без определения вида поверхности или текстуры. Я нашел эту ссылку: Использовать Android-камеру без просмотра поверхности

Я использовал этот трюк с текстурой на моем планшете нексуса, но не повезло! Кроме того, http://handycodeworks.com/?p=19 говорит, что этот подход не работает на всех устройствах.

Кто-нибудь знает, есть ли способ сделать это вообще? или его просто что-то, что фреймворк андроида не поддерживает вообще, и GUI должен иметь некоторый элемент поверхности/текстуры в макете? Тогда единственный вариант - просто манипулировать макетом, чтобы он не отображался на экране в соответствии с требованиями приложения.

ИЗМЕНИТЬ 1: Как поясняется в приведенной выше ссылке http://handycodeworks.com/?p=19, я попробовал код ниже:

public class CameraCapture {

  // I pass the getApplicationContext() from the main activity.
  public void startCameraCapture(Context contx) {
    SurfaceView sv = new SurfaceView(contx);
    mCamera = Camera.open();
    mCamera.setPreviewDisplay(sv.getHolder());
    mCamera.setPreviewCallback(new PreviewCallback() {
      @Override
      public void onPreviewFrame(byte[] data, Camera camera) {
        Log.v("TAG", "on preview frame called");
      }
    Thread.sleep(1000);
    mCamera.startPreview();
}

Однако onPreviewFrame() никогда не вызывается. Я что-то пропустил?

ИЗМЕНИТЬ 2:

Можно ли это сделать в собственном коде? Захват видео/использование камеры без элемента GUI (обзор поверхности/текстуры) с использованием OpenCV? Я посмотрел на эту ссылку: http://docs.opencv.org/trunk/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization. Тем не менее, они также показывают пример кода с некоторым элементом просмотра камеры, определенным в основном XML файле макета.

4b9b3361

Ответ 1

Я могу сделать это, указав объект SurfaceTexture следующим образом:

SurfaceTexture surfaceTexture = new SurfaceTexture(10);
<camera object>.setPreviewTexture(surfaceTexture);

В этом я не должен определять элемент GUI в приложении.

Ответ 2

Это появляется периодически.

Это зависит от того, на каком уровне API вы нацеливаетесь. API 11 (Honeycomb) представил класс SurfaceTexture, который направляет входящие кадры на текстуру GLES, а не на видимое окно. Вы можете увидеть его в CameraToMpegTest, который делает "безгласную" запись видео на .mp4 (требуется API 18 для всех видеоматериал).

Если вы нацеливаете 2.3.x, вам понадобится другое решение.