【问题标题】:how to use ffmpeg/libavcodec/libstagefright如何使用 ffmpeg/libavcodec/libstagefright
【发布时间】:2012-01-26 15:48:51
【问题描述】:

我只是有一个关于如何使用ffmpeg/libavcodec/libstagfright.cpp的问题:当我使用ffmpeg将codec->id设置为CODEC_ID_H264,codec->namelibstagefright_h264时,我尝试avcodec_open2(st->codec, codec),这意味着我将打开 AVCodecff_libstagefright_h264_decoder.

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

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

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

【问题讨论】:

标签: android ffmpeg


【解决方案1】:

适用于 ICS4.0.3 ,Moto XT910,FFmpeg 0.7

我使用 extradata 存储 MediaFileName,然后从代码中获取元数据:

DataSource::RegisterDefaultSniffers();
sp<MediaSource> 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 有一些区别)

【讨论】:

    【解决方案2】:

    我实际上正在努力为我在 Android 上的 ffmpeg 库提供舞台表演。我从 ffmpeg/libav 对原始 libstagefright.cpp 进行了一些更改,但它仍然不稳定。在稳定它之后,我将为 ffmpeg/libav 团队创建拉取请求。你可以看看我的project: in "hwaccel" 分支。

    它位于AndroidFFmpeg/FFmpegLibrary/jni/ffstagefright.cpp目录。

    要使用这个库,您需要调用标准 ffmpeg 方法并打开标准 h264 编解码器 libstagefright_h264 编解码器:

    AVCodec *codec = avcodec_find_decoder_by_name("libstagefright_h264");
    

    【讨论】:

      猜你喜欢
      • 2010-11-11
      • 2014-11-07
      • 2012-03-31
      • 2012-07-22
      • 2017-05-26
      • 2013-08-04
      • 2011-09-29
      • 2014-02-25
      • 2020-12-11
      相关资源
      最近更新 更多