2011-12-23 30 views
14

Tôi chỉ có một câu hỏi về cách sử dụng ffmpeg/libavcodec/libstagfright.cpp: Tôi cố gắng avcodec_open2(st->codec, codec) khi tôi có sử dụng ffmpeg để thiết codec->id như CODEC_ID_H264,codec->name như libstagefright_h264, có nghĩa là tôi sẽ mở AVCodec ff_libstagefright_h264_decoder.làm thế nào để sử dụng ffmpeg/libavcodec/libstagefright

nhưng khi Stagefright_init->OMXCodec::Create->configureCodec-> initOutputFormat(meta), quá trình này chỉ thoát! Đó là một bazinga!

Tôi biết rằng meta là Siêu dữ liệu, dữ liệu của nó xuất phát từ codec->extradata và ở đây, nó có nghĩa là sps và pps, tôi có đúng không?

Tôi làm cách nào để sử dụng libstagefright thành công trong ffmpeg? Ai đó có thể cho tôi một ví dụ không?

+0

bạn có thể muốn xem xét dự án này: http://gitorious.org/~ olvaffe/ffmpeg/ffmpeg-android, đặc biệt là http://gitorious.org/~olvaffe/ffmpeg/ffmpeg-android/trees/android/doc –

+0

cảm ơn bạn rất nhiều! – 7bigtrees

+0

Trả lời

1

Nó hoạt động tại ICS4.0.3, Moto XT910, FFmpeg 0,7

tôi sử dụng extradata cho cửa hàng MediaFileName, sau đó nhận được dữ liệu từ các mã: 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); 

sau đó bạn có thể OMX :: tạo (có một số khác biệt dành cho Android 2.3 và ICS)

1

Tôi thực sự đang thực hiện việc cung cấp stagefright cho thư viện ffmpeg của tôi trên Android. Tôi đã thực hiện một số thay đổi đối với libstagefright.cpp gốc từ ffmpeg/libav nhưng nó vẫn không ổn định. Sau khi ổn định nó, tôi sẽ tạo yêu cầu pull cho nhóm ffmpeg/libav. Bạn có thể xem xung quanh trên project của mình: trong chi nhánh "hwaccel".

Có sẵn tại AndroidFFmpeg/FFmpegLibrary/jni/ffstagefright.cpp thư mục.

Để sử dụng thư viện này bạn có gọi các phương thức ffmpeg tiêu chuẩn và insteed mở tiêu chuẩn h264 giải mã libstagefright_h264 codec:

AVCodec *codec = avcodec_find_decoder_by_name("libstagefright_h264"); 
Các vấn đề liên quan