2012-03-09 3 views
11

Sto cercando di creare un binario statico all-in-one di FFMPEG con NDK r7b e tutto funziona fino a quando non cerco di crearlo con il supporto RTMP.Creazione di FFMPEG con librtmp per android

Sono fonti usind da https://github.com/guardianproject/android-ffmpeg con librtmp2.4 e configurazione personalizzato come questo

.configure \ 
--target-os=linux \ 
--cross-prefix=arm-linux-androideabi- \ 
--arch=arm \ 
--sysroot=/home/andrey/android-ndk-r7b/platforms/android-3/arch-arm \ 
--enable-static \ 
--disable-shared \ 
--disable-symver \ 
--enable-small \ 
--disable-devices \ 
--disable-avdevice \ 
--enable-gpl \ 
--enable-librtmp \ 
--prefix=../build/ffmpeg/armeabi \ 
--extra-cflags=-I../rtmpdump/librtmp \ 
--extra-ldflags=-L../rtmpdump/librtmp \ 

e directory rtmpdump stabilisce sullo stesso livello come ffmpeg. Come ho capito le ultime due stringhe nella mia configurazione dice dove il compilatore può trovare fonti di librtmp. Ma tutto quello che ottengo è ERROR: librtmp not found

Non sono espirato con NDK e ovviamente mi manca qualche parte importante ma non riesco a trovarlo da solo.

risposta

10

Questa è una sfida, ma penso di avere una soluzione. Il problema al momento della configurazione è che FFmpeg vuole rilevare un'appropriata installazione di librtmp tramite il sistema di gestione di pkg-config.

Suppongo che abbiate librtmp compilato in modo incrociato nella directory a cui fa riferimento ../rtmpdump. Modificare lo script di configurazione FFmpeg e cercare la linea:

enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket 

commento che fuori (mettere un '#' nella parte anteriore della linea). Ora, rieseguire configure, solo con queste modifiche:

--extra-cflags="-I/full/path/to/rtmpdump" 

Può essere utile avere un percorso assoluto qui. Inoltre, ometti/librtmp/alla fine poiché le direttive #include già prefissano i file di intestazione con librtmp /. Successivo:

--extra-ldflags="-L/full/path/to/rtmpdump -lrtmp" 

Anche in questo caso, il percorso assoluto, e specificare la libreria di collegare contro da quando abbiamo commentato che la logica tramite configurazione.

Ora la configurazione dovrebbe avere successo e anche la compilazione incrociata dovrebbe essere felice. Il binario ffmpeg finale dovrebbe riferire alla famiglia di moduli RTMP secondo protocolli:

ffmpeg -protocols 
[...] 
rtmp 
rtmpe 
rtmps 
rtmpt 
rtmpte 

Si noti che non ho un ambiente dev NDK per testare questo su. Ma ho provato sul mio sistema desktop Ubuntu compilando librtmp (senza che il pacchetto fosse installato tramite pkg-config) e poi eseguendo i passaggi precedenti.

+0

Informazioni preziose, puoi dare un'occhiata a questo: http://stackoverflow.com/questions/9605757/using-ffmpeg-with-android-ndk – iSun

+0

Ho visto questa domanda ma non ho molta esperienza con Android NDK o Cygwin. –

+0

Aha, comunque Grazie. – iSun