如何使用ffmpeg / libavcodec / libstagefright

时间:2011-12-23 07:40:12

标签: android ffmpeg

我刚才有一个关于如何使用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?有人可以举个例子吗?

2 个答案:

答案 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");