2016-04-11 16 views
2

Ich versuche, einen H264-Encoder für das Streaming von Videos von einem Android-Gerät zu verwenden. Zum Aufnehmen der Bilder verwende ich die Rückkamera; Bilder sind im NV21-Format. Der Codec ist richtig initialisiert, aber wenn Sie den Codec Einrichtung wirft einen Fehler „configure mit err 0xffffffea fehlgeschlagen“ mit dem folgenden Stack-Trace: http://pastebin.com/ZrpsB9cyH264 Encoderfehler

ich versucht habe Google und Qualcomm-Encoder, aber beide werfen Ausnahmen bei der gleichen Punkt. Ich bin mit Android SDK Version 21. Dies ist der Code, den ich geschrieben habe:

private MediaCodec setupVideoCodec() { 
    MediaCodec mediaCodec = null; 

    try { 
     mediaCodec = MediaCodec.createByCodecName("OMX.qcom.video.decoder.avc"); 
     MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 
       VIDEO_WIDTH, VIDEO_HEIGHT); 
     mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, 
       MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface); 
     mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30); 
     mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, VIDEO_BITRATE); 
     mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, STREAMING_INTERVAL); 

     mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 
     mediaCodec.start(); 

     Log.d(TAG, String.valueOf("Buffers available: " + mediaCodec.getInputBuffers().length)); 
    } catch (MediaCodec.CodecException e) { 
     Log.e(TAG, e.getLocalizedMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     Log.e(TAG, e.getLocalizedMessage()); 
     e.printStackTrace(); 
    } 

    return mediaCodec; 
} 

private void encodeData(byte[] data, MediaCodec codec) { 
     int inputBufferIndex = codec.dequeueInputBuffer(-1); 

     if (inputBufferIndex >= 0) { 
      ByteBuffer buffer = codec.getInputBuffer(inputBufferIndex); 
      buffer.clear(); 
      buffer.put(data); 
      codec.queueInputBuffer(inputBufferIndex, 0, data.length, 0, MediaCodec.BUFFER_FLAG_CODEC_CONFIG); 
     } 
    } 

private final Camera.PreviewCallback mPreviewCbk = new Camera.PreviewCallback() { 
    @Override 
    public void onPreviewFrame(byte[] data, Camera camera) { 
     Log.d(TAG, "onPreviewFrame()"); 

     if (mVideoCodec != null) { 
      mExecutor.execute(new EncodeVideo(data, mVideoCodec)); 
     } 

     camera.addCallbackBuffer(data); 
    } 
}; 

ich andere Beiträge überprüft haben, aber ich habe nicht in der Lage gewesen, es zu lösen. Jeder Hinweis oder Vorschlag wird geschätzt. Danke im Voraus!

Antwort

0

Sie versuchen, mit einem Decoder

mediaCodec = MediaCodec.createByCodecName ("OMX.qcom.video DECODER .avc.") Zu codieren;

versuchen

mediaCodec = MediaCodec.createByCodecName ("OMX.qcom.video Encoder .avc.");

statt

+0

Ich weiß nicht, wie oft ich den Code gelesen habe D: .. Danke! :) –