2011-12-23 20 views
14

Sólo tengo una pregunta acerca de cómo usar ffmpeg/libavcodec/libstagfright.cpp: Trato de avcodec_open2(st->codec, codec) cuando tengo uso ffmpeg para establecer codec->id como CODEC_ID_H264,codec->name como libstagefright_h264, eso significa que voy a abrir avcodec ff_libstagefright_h264_decoder.cómo utilizar ffmpeg/libavcodec/libstagefright

pero cuando Stagefright_init->OMXCodec::Create->configureCodec-> initOutputFormat(meta), el proceso simplemente ¡Salir! Es un bazinga!

Sabía que meta es Metadata, sus datos provienen de codec->extradata, y aquí, significa sps y pps, ¿estoy en lo cierto?

¿Cómo puedo usar libstagefright con éxito en ffmpeg? ¿Alguien puede darme un ejemplo?

+0

es posible que desee echar un vistazo a este proyecto: http://gitorious.org/~ olvaffe/ffmpeg/ffmpeg-android, en particular a http://gitorious.org/~olvaffe/ffmpeg/ffmpeg-android/trees/android/doc –

+0

¡muchas gracias! – 7bigtrees

Respuesta

1

Funciona a ICS4.0.3, Moto XT910, FFmpeg 0.7

utilizo extradata para el almacén MediaFileName, a continuación, obtener los metadatos de códigos: 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); 

entonces usted puede OMX :: create (hay algunas diferencias para Android 2.3 e ICS)

1

Estoy trabajando realmente en proporcionar stagefright a mi biblioteca ffmpeg en Android. Realicé algunos cambios en el archivo libstagefright.cpp original de ffmpeg/libav, pero todavía no es estable. Después de estabilizarlo, crearé una solicitud de extracción para el equipo ffmpeg/libav. Puede buscar en mi project: en "hwaccel" rama.

Está disponible en AndroidFFmpeg/FFmpegLibrary/jni/ffstagefright.cpp directorio.

Para utilizar esta biblioteca dispone de llamada estándar y métodos ffmpeg insteed abierto del estándar H264 codec codec libstagefright_h264:

AVCodec *codec = avcodec_find_decoder_by_name("libstagefright_h264");