H264编码器错误
H264 encoder error
我正在尝试使用 H264 编码器从 Android 设备流式传输视频。为了捕捉图像,我使用后置摄像头;图片为 NV21 格式。编解码器已正确初始化,但在设置编解码器时会抛出错误 "configure failed with err 0xffffffea",堆栈跟踪如下:http://pastebin.com/ZrpsB9cy
我试过Google和高通的编码器,但都在同一点抛出异常。我正在使用 Android SDK 版本 21。这是我编写的代码:
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);
}
};
我看了其他帖子,还是没能解决。任何提示或建议表示赞赏。提前致谢!
您正在尝试使用解码器进行编码
mediaCodec = MediaCodec.createByCodecName("OMX.qcom.video.DECODER.avc");
尝试
mediaCodec = MediaCodec.createByCodecName("OMX.qcom.video.encoder.avc");
改为
我正在尝试使用 H264 编码器从 Android 设备流式传输视频。为了捕捉图像,我使用后置摄像头;图片为 NV21 格式。编解码器已正确初始化,但在设置编解码器时会抛出错误 "configure failed with err 0xffffffea",堆栈跟踪如下:http://pastebin.com/ZrpsB9cy
我试过Google和高通的编码器,但都在同一点抛出异常。我正在使用 Android SDK 版本 21。这是我编写的代码:
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);
}
};
我看了其他帖子,还是没能解决。任何提示或建议表示赞赏。提前致谢!
您正在尝试使用解码器进行编码
mediaCodec = MediaCodec.createByCodecName("OMX.qcom.video.DECODER.avc");
尝试
mediaCodec = MediaCodec.createByCodecName("OMX.qcom.video.encoder.avc");
改为