我刚才有一个关于如何使用ffmpeg/libavcodec/libstagfright.cpp
的问题:当我使用ffmpeg将avcodec_open2(st->codec, codec)
设置为codec->id
作为CODEC_ID_H264,codec->name
时,我尝试libstagefright_h264
,这意味着我会打开
AVCodec ff_libstagefright_h264_decoder
。
但是当Stagefright_init->OMXCodec::Create->configureCodec-> initOutputFormat(meta)
时,这个过程就退出了!这是一个bazinga!
我知道meta是元数据,它的数据来自codec->extradata
,在这里,它意味着sps和pps,我是对的吗?
如何在ffmpeg中成功使用libstagefright
?有人可以举个例子吗?
答案 0 :(得分:1)
适用于ICS4.0.3,Moto XT910,FFmpeg 0.7
我使用extradata存储MediaFileName,然后从代码中获取元数据:
DataSource::RegisterDefaultSniffers();
sp source ;
source = createSource((char*)MeidaFileName);
if(source==NULL){
return -1 ;
}
meta = source->getFormat();
if(!meta->findData(kKeyAVCC, &type, &data, &data_size))
{
return -1 ;
}
meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
然后你可以OMX :: create(Android 2.3和ICS有一些区别)
答案 1 :(得分:1)
我实际上正在为Android上的ffmpeg库提供stagefright。我对来自ffmpeg / libav的原始libstagefright.cpp进行了一些更改,但它仍然不稳定。稳定之后,我将为ffmpeg / libav团队创建拉取请求。您可以浏览我的project:“hwaccel”分支。
可在 AndroidFFmpeg / FFmpegLibrary / jni / ffstagefright.cpp 目录下找到。
要使用此库,您可以调用标准的ffmpeg方法并打开标准的h264编解码器libstagefright_h264编解码器:
AVCodec *codec = avcodec_find_decoder_by_name("libstagefright_h264");