Android 在没有Camera2 API的视频流中使用ImageReader曲面

Android 在没有Camera2 API的视频流中使用ImageReader曲面,android,android-camera,video-capture,image-reader,Android,Android Camera,Video Capture,Image Reader,我正试图将摄像机的视频流导入imagereader表面,以便能够处理这些图像。我找到了很多关于Camera2API的例子,但我不使用它,因为我的视频流来自外部摄像头 理想情况下,我会有两个曲面:一个用作预览,另一个来自ImageReader以处理图像。类似我知道您使用CaptureRequest.Builder和.addTarget(surface)将这两个曲面组合起来。问题是我没有CamerDevice来生成createCaptureRequest 我正在使用的代码可以找到 我试图创建一个Im

我正试图将摄像机的视频流导入imagereader表面,以便能够处理这些图像。我找到了很多关于Camera2API的例子,但我不使用它,因为我的视频流来自外部摄像头

理想情况下,我会有两个曲面:一个用作预览,另一个来自ImageReader以处理图像。类似我知道您使用
CaptureRequest.Builder
.addTarget(surface)
将这两个曲面组合起来。问题是我没有
CamerDevice
来生成
createCaptureRequest

我正在使用的代码可以找到

我试图创建一个ImageReader及其表面,并将其传递给
startDecoding
函数。但这并没有很好地工作,因为我得到了这个错误:

E/JNI: close+++++++
E/BufferQueueProducer: [ImageReader-1280x720f32315659m16-17834-0] dequeueBuffer: BufferQueue has been abandoned
E/ACodec: NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS query failed: No such device (19)
E/ACodec: Failed to allocate output port buffers after port reconfiguration: (-19)
E/ACodec: signalError(omxError 0x80001001, internalError -19)
E/MediaCodec: Codec reported err 0xffffffed, actionCode 0, while in state 6
E/AccessHeadCameraActivity: Error has occured.
                            java.lang.IllegalStateException
                            at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
                            at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:2379)
任何指向正确方向的提示都很好

更新1:

该错误是由返回值
dequeueOutputBuffer
引起的,因为它的值为
-1
。根据MediaCodec上的,这意味着呼叫超时。但为什么会这样呢

更新2

我没有创建
表面视图
(因为我再也没有表面视图了),所以代码移动到
onCreate
。其他的一切都和我的一样


你能提供一些代码吗?我在上面添加了代码。@E.Abdel你有时间看一下代码吗?有什么建议吗?很抱歉回复太晚,请查看ImageReaderDecoderTest.java,它可能会对您有所帮助
@Override
public void onCreate(Bundle savedInstanceState) {

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_acess_headcamera);
    mediaManager = (MediaManager) getUnitManager(FuncConstant.MEDIA_MANAGER);

    setupImageReader();

    StreamOption streamOption = new StreamOption();
    streamOption.setChannel(StreamOption.MAIN_STREAM);
    streamOption.setDecodType(StreamOption.HARDWARE_DECODE);
    streamOption.setJustIframe(false);
    mediaManager.openStream(streamOption);

    surface = imageReader.getSurface();
    startDecoding(surface);

    initListener();
}

private void setupImageReader() {
    imageReader = ImageReader.newInstance(width, height, ImageFormat.YV12,
            IMAGE_READER_BUFFER_SIZE);
    imageReader.setOnImageAvailableListener(onImageAvailableListener, backgroundHandler);
}