如何使用ffmpeg / libavcodec / libstagefright

我刚才有一个关于如何使用ffmpeg/libavcodec/libstagfright.cpp :当我使用ffmpeg将codec->id设置为CODEC_ID_H264,codec->namelibstagefright_h264 ,我尝试使用avcodec_open2(st->codec, codec) ,这意味着我将打开AVCodec ff_libstagefright_h264_decoder

但是当Stagefright_init->OMXCodec::Create->configureCodec-> initOutputFormat(meta) ,这个过程就退出了! 这是一个bazinga!

我知道元是元数据,它的数据来自codec->extradata ,在这里,它意味着sps和pps,我是对的吗?

如何在ffmpeg中成功使用libstagefright ? 有人能举个例子吗?

它适用于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 ;
}
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); 

然后你可以OMX :: create(Android 2.3和ICS有一些区别)

我实际上正致力于为Android上的ffmpeg库提供stagefright。 我对来自ffmpeg / libav的原始libstagefright.cpp进行了一些更改,但它仍然不稳定。 稳定之后,我将为ffmpeg / libav团队创建拉取请求。 您可以浏览我的项目 :在“hwaccel”分支中。

它可以在AndroidFFmpeg / FFmpegLibrary / jni / ffstagefright.cpp目录下find。

要使用此库,您可以调用标准的ffmpeg方法并打开标准的h264编解码器libstagefright_h264编解码器:

 AVCodec *codec = avcodec_find_decoder_by_name("libstagefright_h264");