2014-10-21 13 views
5

http://bigflake.com/mediacodec/'dan CameraToMpegTest.java'yı çalıştırırken bir sorunum var.CameraToMpegTest.java çalışmıyor, IllegalStateException ile biter: Yanlış durum nedeniyle duramıyorum

public class MyActivity extends Activity { 
    private CameraToMpegTest ctmt = new CameraToMpegTest(); 

    ... 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     try { 
      ctmt.testEncodeCameraToMp4(); 
     } catch (Throwable throwable) { 
      throwable.printStackTrace(); 
     } 

    } 

    ...  

Bu LogCat ile sona: Ben Aktivite onu başlattığınızda

D/CameraToMpegTest﹕ video/avc output 640x480 @6000000 
D/CameraToMpegTest﹕ Camera preview size is 640x480 
I/OMXClient﹕ Using client-side OMX mux. 
E/ACodec﹕ [OMX.Nvidia.h264.encoder] storeMetaDataInBuffers (output) failed w/ err -2147483648 
I/ACodec﹕ setupVideoEncoder succeeded 
D/libEGL﹕ loaded /system/lib/egl/libEGL_tegra.so 
D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_tegra.so 
D/libEGL﹕ loaded /system/lib/egl/libGLESv2_tegra.so 
I/CameraToMpegTest﹕ Output file is /storage/emulated/0/test.640x480.mp4 
W/System.err﹕ java.lang.IllegalStateException: Can't stop due to wrong state. 
W/System.err﹕ at android.media.MediaMuxer.stop(MediaMuxer.java:229) 
W/System.err﹕ at CameraToMpegTest.releaseEncoder(CameraToMpegTest.java:395) 
W/System.err﹕ at CameraToMpegTest.encodeCameraToMpeg(CameraToMpegTest.java:216) 
W/System.err﹕ at CameraToMpegTest.access$000(CameraToMpegTest.java:68) 
W/System.err﹕ at CameraToMpegTest$CameraToMpegWrapper.run(CameraToMpegTest.java:128) 
W/System.err﹕ at java.lang.Thread.run(Thread.java:841) 
D/OpenGLRenderer﹕ Enabling debug mode 0 

Ben mStManager.awaitNewImage çağırarak çevreleyen çalıştı bazı testlerden sonra(); İstisnalar baskı ve I Try-catch bloğu bu var olan:

D/CameraToMpegTest﹕ video/avc output 640x480 @6000000 
D/CameraToMpegTest﹕ Camera preview size is 640x480 
I/OMXClient﹕ Using client-side OMX mux. 
E/ACodec﹕ [OMX.Nvidia.h264.encoder] storeMetaDataInBuffers (output) failed w/ err -2147483648 
I/ACodec﹕ setupVideoEncoder succeeded 
D/libEGL﹕ loaded /system/lib/egl/libEGL_tegra.so 
D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_tegra.so 
D/libEGL﹕ loaded /system/lib/egl/libGLESv2_tegra.so 
I/CameraToMpegTest﹕ Output file is /storage/emulated/0/test.640x480.mp4 
I/System.out﹕ java.lang.RuntimeException: Camera frame wait timed out 
I/System.out﹕ java.lang.RuntimeException: Camera frame wait timed out 
D/CameraToMpegTest﹕ encoder output format changed: {csd-1=java.nio.ByteArrayBuffer[position=0,limit=8,capacity=8], height=480, mime=video/avc, csd-0=java.nio.ByteArrayBuffer[position=0,limit=13,capacity=13], what=1869968451, width=640} 
I/MPEG4Writer﹕ limits: 4294967295/0 bytes/us, bit rate: -1 bps and the estimated moov size 3072 bytes 
I/MPEG4Writer﹕ setStartTimestampUs: 0 
I/MPEG4Writer﹕ Earliest track starting time: 0 
I/System.out﹕ java.lang.RuntimeException: Camera frame wait timed out 
W/MPEG4Writer﹕ 0-duration samples found: 1 
W/MPEG4Writer﹕ 0-duration samples found: 2 
I/MPEG4Writer﹕ Received total/0-length (3/0) buffers and encoded 3 frames. - video 
D/MPEG4Writer﹕ Stopping Video track 
D/MPEG4Writer﹕ Stopping Video track source 
D/MPEG4Writer﹕ Video track stopped 
D/MPEG4Writer﹕ Stopping writer thread 
D/MPEG4Writer﹕ 0 chunks are written in the last batch 
D/MPEG4Writer﹕ Writer thread stopped 
D/MPEG4Writer﹕ Stopping Video track 
D/OpenGLRenderer﹕ Enabling debug mode 0 
I/Choreographer﹕ Skipped 90 frames! The application may be doing too much work on its main thread. 

sorunda (android: SurfaceTexure, camera frame wait time out) gibi benzer bir sorun gibi görünüyor ama CameraToMpegTest.java ayrı bir evre kullanır.

Test cihazım Google Nexus 7 (2012) 32GB 3G çalıştıran 4.4.4 Android.

Yardımlarınız için teşekkür ederiz.

cevap

6

MediaMuxer sınıfı, başlatmışsanız, ancak herhangi bir veriyi henüz desteklemediyseniz "özel durumu durduramaz" ifadesini atar. Bu pek anlamlı değil, ama işte böyle.

Kök sorunu, genellikle belirlediğiniz sorundan (this answer numaralı belgede ayrıntılı olarak açıklanan SurfaceTexture öğesinden) kaynaklanan hiçbir veri olmamasıdır. İşi yapan iş parçacığının bir Looper bulunmadığından emin olmalısınız.

Örnek kod olarak Grafika kullanmanız daha iyi olabilir. "Sürekli yakalama" gibi etkinlikler, bir CTS test ortamı yerine bir uygulama ortamında kameradan MPEG yolunu gösterir.

+0

Grafika'nın Show + capture camera etkinliklerini kullandım ve çalışıyor. Teşekkür ederim. – Erniecz

İlgili konular