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