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!
Ich weiß nicht, wie oft ich den Code gelesen habe D: .. Danke! :) –