Как использовать 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");