主题 : 6618开发板,使用USB 摄像头无法录像 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 134403
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
贡献值: 0 点
综合积分: 8 分
注册时间: 2017-08-30
最后登录: 2018-04-08
楼主  发表于: 2017-09-11 13:54

 6618开发板,使用USB 摄像头无法录像

图片:
录像录出来完全是纯绿色的,我怀疑是数据没有传到编码器引起的,但是检查了android代码,没发现什么问题。  

        请问你们是否遇到过这样的问题?看看下面的代码和log,有么有什么解决方法。


      录像用的是MediaCodec和MediaMuxer,设置的属性大概如下:
        final MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE,
                VIDEO_WIDTH, VIDEO_HEIGHT);
        format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
                MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
        format.setInteger(MediaFormat.KEY_BIT_RATE, calcBitRate());
        format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
        format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10);
        if (DEBUG)
            Log.i(TAG, "format: " + format);

        mMediaCodec = MediaCodec.createEncoderByType(MIME_TYPE);
        mMediaCodec.configure(format, null, null,
                MediaCodec.CONFIGURE_FLAG_ENCODE);
        // get Surface for encoder input
        // this method only can call between #configure and #start
        mSurface = mMediaCodec.createInputSurface(); // API >= 18
        mMediaCodec.start();


如果把KEY_COLOR_FORMAT设置为COLOR_FormatYUV420Planar,则直接崩溃:

01-02 05:49:06.503   135  2946 F libc    : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x89898a96 in tid 2946 (mediaserver)
01-02 05:49:06.509   135  2945 E audio_hw_primary: unable to find path 'media-speaker'
01-02 05:49:06.509   135  2945 E audio_hw_primary: unable to find path 'media-main-mic'
01-02 05:49:06.566   133   133 I DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-02 05:49:06.566   133   133 I DEBUG   : Build fingerprint: 'Android/aosp_nanopi3/nanopi3:5.1.1/LMY48G/root09081935:userdebug/dev-keys'
01-02 05:49:06.566   133   133 I DEBUG   : Revision: '1'
01-02 05:49:06.566   133   133 I DEBUG   : ABI: 'arm'
--------- beginning of system
01-02 05:49:06.566   419   496 W NativeCrashListener: Couldn't find ProcessRecord for pid 135
01-02 05:49:06.566   133   133 I DEBUG   : pid: 135, tid: 2946, name: mediaserver  >>> /system/bin/mediaserver <<<
01-02 05:49:06.566   133   133 I DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x89898a96
01-02 05:49:06.579   133   133 I DEBUG   :     r0 00000037  r1 b55ea95e  r2 00020002  r3 89898a8a
01-02 05:49:06.579   133   133 E DEBUG   : AM write failure (32 / Broken pipe)
...
01-02 05:49:06.813  2846  2934 E AndroidRuntime: FATAL EXCEPTION: MediaVideoEncoder
01-02 05:49:06.813  2846  2934 E AndroidRuntime: Process: com.serenegiant.uvccamera, PID: 2846
01-02 05:49:06.813  2846  2934 E AndroidRuntime: java.lang.IllegalStateException
01-02 05:49:06.813  2846  2934 E AndroidRuntime:     at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
01-02 05:49:06.813  2846  2934 E AndroidRuntime:     at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:1033)
01-02 05:49:06.813  2846  2934 E AndroidRuntime:     at com.serenegiant.usb.encode.MediaEncoder.drain(MediaEncoder.java:354)
01-02 05:49:06.813  2846  2934 E AndroidRuntime:     at com.serenegiant.usb.encode.MediaEncoder.run(MediaEncoder.java:158)
01-02 05:49:06.813  2846  2934 E AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)