2012-03-09 21 views
11

Tôi đang cố gắng để xây dựng tất cả-trong-một trong nhị phân tĩnh của FFMPEG với NDK r7b và tất cả mọi thứ hoạt động tốt cho đến khi tôi cố gắng để xây dựng nó với sự hỗ trợ RTMP.Building FFMPEG với librtmp cho android

Tôi nguồn usind từ https://github.com/guardianproject/android-ffmpeg với librtmp2.4 và cấu hình tùy chỉnh như thế này

.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 \ 

và thư mục rtmpdump đặt trên cùng một mức độ như ffmpeg. Như tôi hiểu hai chuỗi cuối cùng trong cấu hình của tôi nói nơi trình biên dịch có thể tìm thấy nguồn librtmp. Nhưng tất cả những gì tôi nhận được là ERROR: librtmp not found

Tôi không đủ kinh nghiệm với NDK và tôi đã thiếu một số phần quan trọng nhưng tôi không thể tự mình tìm thấy.

Trả lời

10

Đây là thách thức, nhưng tôi nghĩ rằng tôi có một giải pháp. Vấn đề ở cấu hình thời gian là FFmpeg muốn phát hiện một cài đặt librtmp thích hợp thông qua hệ thống quản lý pkg-config.

tôi giả sử có bạn librtmp thành công cross-biên soạn trong thư mục tham chiếu bởi ../rtmpdump. Chỉnh sửa tập lệnh cấu hình FFmpeg và tìm kiếm dòng:

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

Nhận xét rằng (đặt dấu '#' ở đầu dòng). Bây giờ, chạy lại cấu hình, chỉ với những sửa đổi này:

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

Nó có thể giúp bạn có một con đường tuyệt đối ở đây. Ngoài ra, bỏ qua/librtmp/ở phần cuối vì #include chỉ thị đã tiền tố các tệp tiêu đề với librtmp /. Tiếp theo:

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

Một lần nữa, đường dẫn tuyệt đối và chỉ định thư viện liên kết vì chúng tôi đã nhận xét logic đó thông qua cấu hình.

Bây giờ, cấu hình nên thành công và xuyên biên soạn cũng nên được hạnh phúc. Mã nhị phân ffmpeg cuối cùng sẽ báo cáo họ mô-đun RTMP theo giao thức:

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

Lưu ý rằng tôi không có môi trường dev NDK để kiểm tra điều này. Nhưng tôi đã thử nghiệm trên hệ thống Ubuntu trên máy tính để bàn của tôi bằng cách biên dịch librtmp (không có gói được cài đặt thông qua pkg-config) và sau đó thực hiện các bước trên.

+0

Thông tin có giá trị, Bạn có thể xem xét điều này: http://stackoverflow.com/questions/9605757/using-ffmpeg-with-android-ndk – iSun

+0

Tôi đã thấy câu hỏi đó nhưng tôi không có nhiều kinh nghiệm với Android NDK hoặc Cygwin. –

+0

Aha, Dù sao thì cảm ơn. – iSun