Как использовать ffmpeg/libavcodec/libstagefright

У меня только вопрос о том, как использовать ffmpeg/libavcodec/libstagfright.cpp: я пытаюсь avcodec_open2(st->codec, codec), когда у меня есть ffmpeg, чтобы установить codec->id как CODEC_ID_H264,codec->name как libstagefright_h264, значит, я открою AVCodec ff_libstagefright_h264_decoder.

но когда Stagefright_init->OMXCodec::Create->configureCodec-> initOutputFormat(meta), процесс просто прекратите! Это bazinga!

Я знал, что мета - метаданные, ее данные исходят от codec->extradata, и здесь это означает sps и pps, я прав?

Как я могу использовать libstagefright успешно в ffmpeg? Может ли кто-нибудь привести мне пример?

Ответы

Ответ 1

Он работает на ICS4.0.3, Moto XT910, FFmpeg 0.7

Я использую extradata для хранения MediaFileName, а затем получаю метаданные из кодов: <Код > DataSource:: RegisterDefaultSniffers();
источник sp;
source = createSource ((char *) MeidaFileName);
, если (источник == NULL) {
return -1;
}
meta = source- > getFormat();
если (! meta- > findData (kKeyAVCC, тип и данные и данные)
{
return -1;
}

  meta- > setCString (kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
Код>

Код > то вы можете OMX:: create (есть некоторая разница для Android 2.3 и ICS)

Ответ 2

Im фактически работает над предоставлением stagefright для моей библиотеки ffmpeg на Android. Я внес некоторые изменения в оригинальный libstagefright.cpp из ffmpeg/libav, но он все еще нестабилен. После стабилизации я создам запрос на pull для команды ffmpeg/libav. Вы можете посмотреть вокруг моего проекта : в ветке hwaccel.

Он доступен в каталоге AndroidFFmpeg/FFmpegLibrary/jni/ffstagefright.cpp.

Чтобы использовать эту библиотеку, вы вызываете стандартные методы ffmpeg и открываете инсталляцию стандартного кодека кодека h264 libstagefright_h264:

AVCodec *codec = avcodec_find_decoder_by_name("libstagefright_h264");