其他分享
首页 > 其他分享> > Android:使用OMXCodec作为MediaSource时,MPEG4Writer无法启动

Android:使用OMXCodec作为MediaSource时,MPEG4Writer无法启动

作者:互联网

我正在尝试编码来自字节数组缓冲区的视频,并且这样做我正在使用来自本机代码的MPEG4Writer API.

我创建了我的自定义MediaSource类来提供数据,我用OMXCodec将其包装到MPEG4Writer:

sp<MediaSource> mVideoEncoder = OMXCodec::Create(client.interface(), omxEncMeta, true, mVideoOutSource);
mVideoEncoder->start();

mVideoOutSource是我的自定义MediaSource类,omxEncMeta是以下内容:

int32_t colorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
int32_t width = 480;
int32_t height = 360;
int32_t frameRate = 24;
int32_t bitRate = 500 * 1024;
int32_t iFrameInterval = 1;

sp<MetaData> omxEncMeta = new MetaData;
omxEncMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
omxEncMeta->setInt32(kKeyColorFormat, colorFormat);
omxEncMeta->setInt32(kKeyWidth, width);
omxEncMeta->setInt32(kKeyHeight, height);
omxEncMeta->setInt32(kKeyStride, width);
omxEncMeta->setInt32(kKeySliceHeight, height);
omxEncMeta->setInt32(kKeyFrameRate, frameRate);
omxEncMeta->setInt32(kKeySampleRate, frameRate);
omxEncMeta->setInt32(kKeyBitRate, bitRate);
omxEncMeta->setInt32(kKeyIFramesInterval, iFrameInterval);

但是当我调用start()方法时,它返回错误代码UNKNOWN_ERROR.

相反,如果我尝试直接给我的MPEG4Writer我的自定义MediaSource(没有用OMXCodec包装它就会成功启动但最终会停止记录错误的编解码器特定数据(大约12帧后),我认为这是因为我的自定义MediaSource仅提供有关实际帧的信息,但不提供有关编解码器格式的信息.

我确定我错过了OMXCodec的东西,但我无法弄明白…有没有人可以为我提供自定义MediaSource编码的工作示例?或者给我一些暗示为什么这根本不起作用?
如果你需要更多的信息,请问,谢谢!

编辑:我正在针对API 14进行开发,所以请不要建议我使用API​​ 16中的MediaCodec

标签:android,c,android-ndk,stagefright,openmax
来源: https://codeday.me/bug/20190831/1776472.html